MySQL-ビューとストレージ・プロシージャ
一、MySQL基礎知識
一般条件:1、論理演算子and:と;or:または;not:2以外、比較演算子=より大きい以上より小さい
3、範囲in:そのうち;not in:その中にはありません.between:区間内
4、ワイルドカード%:任意のゼロ文字または任意の複数文字に一致する;_:任意の文字に一致
5、Null値is null:Null値is not null:Null以外
6、制限条件limit 3:前の3行を取るlimit 3,5:3行目から5行を取るlimit 3 offset 5:5行目から3行を取る
7、ソートorder by列asc:小さいから大きいまでソートorder by列desc:大きいから小さいまでソートorder by列1 desc、列2 asc:列1の大きいから小さいまでソート、同じ場合は列2の小さいから大きいまでソート
8、グループselect count(列名)、sum(列名)、max(列名)、min(列名)fromテーブルwhere条件group by列名01、列名02 order by列名特に注意:groupbyはwhereの後、order byの前でなければならない
9、連表に対応関係がなければ表示しない:select A.xx B.oo from A、B where A.x=B.o A.x=B.oに対応するデータがなければ何の結果も表示しない
対応関係がなければ表示しない:select A.xx B.oo from A inner join B where A.x=B.oとBは対等な位置を有し、A.x=B.oの対応するデータがなければ結果は表示されない
A表すべて表示、Bに対応関係がない場合nullselect A.num、A.name、B.name from A left join B on A.nid=B.nid
Bテーブルはすべて表示され、Bに対応関係がない場合はnullselect A.num、A.name、B.name from A right join B on A.nid=B.nid
10、データベースのインポートとエクスポート
二、ビュー
ビュー(view)は仮想的に存在するテーブルであり、論理テーブルであり、それ自体にデータは含まれていない.select文としてデータ辞書に保存されます.ビューを使用すると、ベーステーブルのデータの一部を表示できます.ビューデータは、ビューのクエリーで使用されるテーブルをカスタマイズし、ビューを使用して動的に生成します.
1、ビューの作成
2、ビューの変更
3、ビューの使用
4、ビューの削除
三、ストレージプロセス
ストアド・プロシージャはSQL文の集合であり、ストアド・プロシージャをアクティブに呼び出すと、内部のSQL文が論理的に実行されます.1、無パラメータストレージプロセスの作成
2、パラメータ付きパラメータを作成するプロセス記憶プロセスが受信できるパラメータは3種類あり、in:パラメータの値だけは記憶プロセスを呼び出すときに指定しなければならない.記憶プロセスでこのパラメータを変更した値は返されない.デフォルト値であり、out:この値は記憶プロセス内部で変更され、戻ることができる.inout:呼び出し時に指定され、変更され、戻ることができる.
3、ストレージプロセスの実行にパラメータがない:
パラメータ:
4、ストレージプロセスの削除
5、pymysqlストレージプロセスを実行する
6、条件文IF-THEN-ELSE文
CASE-WHEN-THEN-ELSE文
7、循環文WHILE-DO…END-WHILE
REPEAT...END REPEATこの文の特徴は、操作を実行した後に結果をチェックすることです.
LOOP...END LOOP
8、ストレージプロセスの基本関数文字列クラス
数学クラス
日付時間クラス
:
:insert into ( , ...) values ( , , ...)
:insert into ( , ...) values ( , , ...),( , , ...)
:insert into ( , ...) select , ... from
:
:delete from where
:
:update set = where
:
:select 01 as , 02 from where
一般条件:1、論理演算子and:と;or:または;not:2以外、比較演算子=より大きい以上より小さい
:
select * from test where id > 5 and num > 60;
3、範囲in:そのうち;not in:その中にはありません.between:区間内
:
select * from test where nid between 5 and 10;
4、ワイルドカード%:任意のゼロ文字または任意の複数文字に一致する;_:任意の文字に一致
:
select * from test where name like ' %';
5、Null値is null:Null値is not null:Null以外
6、制限条件limit 3:前の3行を取るlimit 3,5:3行目から5行を取るlimit 3 offset 5:5行目から3行を取る
7、ソートorder by列asc:小さいから大きいまでソートorder by列desc:大きいから小さいまでソートorder by列1 desc、列2 asc:列1の大きいから小さいまでソート、同じ場合は列2の小さいから大きいまでソート
8、グループselect count(列名)、sum(列名)、max(列名)、min(列名)fromテーブルwhere条件group by列名01、列名02 order by列名特に注意:groupbyはwhereの後、order byの前でなければならない
9、連表に対応関係がなければ表示しない:select A.xx B.oo from A、B where A.x=B.o A.x=B.oに対応するデータがなければ何の結果も表示しない
:select tb1.num,tb2.name from tb1,tb2 where tb1.sid = tb2.sid
対応関係がなければ表示しない:select A.xx B.oo from A inner join B where A.x=B.oとBは対等な位置を有し、A.x=B.oの対応するデータがなければ結果は表示されない
A表すべて表示、Bに対応関係がない場合nullselect A.num、A.name、B.name from A left join B on A.nid=B.nid
select score.sid,score.course_id,score.num,student.sname
from score
left join student on score.student_id = student.sid
Bテーブルはすべて表示され、Bに対応関係がない場合はnullselect A.num、A.name、B.name from A right join B on A.nid=B.nid
select score.sid,score.course_id,score.num,student.sname
from student
right join score on score.student_id = student.sid
10、データベースのインポートとエクスポート
mysqldump -u -p > # +
mysqldump -u -p -d > #
mysqldump -u root -p <
二、ビュー
ビュー(view)は仮想的に存在するテーブルであり、論理テーブルであり、それ自体にデータは含まれていない.select文としてデータ辞書に保存されます.ビューを使用すると、ベーステーブルのデータの一部を表示できます.ビューデータは、ビューのクエリーで使用されるテーブルをカスタマイズし、ビューを使用して動的に生成します.
1、ビューの作成
:CREATE VIEW AS SQL
:
create view temp1 as
select score.sid,score.course_id,score.num,student.sname
from score
left join student on score.student_id = student.sid;
2、ビューの変更
:ALTER VIEW AS SQL
:
alter view temp2 as
select score.sid,score.course_id,score.num,student.sname
from score
left join student on score.student_id = student.sid
where course_id in (1,2);
3、ビューの使用
:SELECT * FROM
:
select * from temp2;
4、ビューの削除
:DROP VIEW
:
drop view temp2;
三、ストレージプロセス
ストアド・プロシージャはSQL文の集合であり、ストアド・プロシージャをアクティブに呼び出すと、内部のSQL文が論理的に実行されます.1、無パラメータストレージプロセスの作成
:CREATE PROCEDURE ([[IN|OUT|INOUT] [,[IN|OUT|INOUT] …]]) [ ...]
:
delimiter //
create procedure p1()
BEGIN
select * from score;
END//
delimiter;
2、パラメータ付きパラメータを作成するプロセス記憶プロセスが受信できるパラメータは3種類あり、in:パラメータの値だけは記憶プロセスを呼び出すときに指定しなければならない.記憶プロセスでこのパラメータを変更した値は返されない.デフォルト値であり、out:この値は記憶プロセス内部で変更され、戻ることができる.inout:呼び出し時に指定され、変更され、戻ることができる.
:
delimiter //
create procedure p2(
in i1 int,
out r1 int,
inout i2 int
)
BEGIN
DECLARE temp1 int;
DECLARE temp2 int default 5;
set temp1 = 10;
set i2 = i1 + 100;
set r1 = i1 + temp1 + temp2;
END//
delimiter;
3、ストレージプロセスの実行にパラメータがない:
call p1()
パラメータ:
set @t1 = 0;
set @t2 = 1;
call p2(1,@t1,@t2);
select @t1,@t2;
4、ストレージプロセスの削除
drop procedure ;
5、pymysqlストレージプロセスを実行する
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
#
cursor.callproc('p1', args=(1, 22, 3, 4))
#
cursor.execute("select @_p1_0,@_p1_1,@_p1_2,@_p1_3")
result = cursor.fetchall()
conn.commit()
cursor.close()
conn.close()
print(result)
6、条件文IF-THEN-ELSE文
delimiter \\
CREATE PROCEDURE p3 (
in i1 int
)
BEGIN
IF i1 = 1 THEN
select * from t1;
ELSEIF i = 2 THEN
select * from t2;
ELSE
select * from t3;
END IF;
END\\
delimiter ;
CASE-WHEN-THEN-ELSE文
delimiter \\
CREATE PROCEDURE p3 (
in i1 int
)
BEGIN
CASE i1
WHEN 1 THEN
select * from t1;
WHEN 2 THEN
select * from t2;
ELSE
select * from t3;
END CASE;
END\\
delimiter ;
7、循環文WHILE-DO…END-WHILE
delimiter \\
CREATE PROCEDURE p4 ()
BEGIN
DECLARE i int;
set i = 1;
WHILE i < 3 DO
select i;
set i = i + 1;
END WHILE;
END\\
delimiter ;
REPEAT...END REPEATこの文の特徴は、操作を実行した後に結果をチェックすることです.
delimiter \\
CREATE PROCEDURE p5 ()
BEGIN
DECLARE i int;
set i = 1;
REPEAT
select i;
set i = i + 1;
until i > 3
END REPEAT;
END\\
delimiter ;
LOOP...END LOOP
delimiter \\
CREATE PROCEDURE p5 ()
BEGIN
DECLARE i int default 0;
loop_lable: loop
set i = i + 1;
if i < 3 then
iterate loop_lable;
end if;
if i > 5 then
leave loop_lable;
end if;
select i;
END loop loop_lable;
END\\
delimiter ;
8、ストレージプロセスの基本関数文字列クラス
CHARSET(str) //
CONCAT (string2 [,... ]) //
INSTR (string ,substring ) // substring string , 0
LCASE (string2 ) //
LEFT (string2 ,length ) // string2 length
LENGTH (string ) //string
LOAD_FILE (file_name ) //
LOCATE (substring , string [,start_position ] ) INSTR,
LPAD (string2 ,length ,pad ) // pad string , length
LTRIM (string2 ) //
REPEAT (string2 ,count ) // count
REPLACE (str ,search_str ,replace_str ) // str replace_str search_str
RPAD (string2 ,length ,pad) // str pad , length
RTRIM (string2 ) //
STRCMP (string1 ,string2 ) // ,
SUBSTRING (str , position [,length ]) // str position , length ,
:mysql , 1, position 1
TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //
UCASE (string2 ) //
RIGHT(string2,length) // string2 length
SPACE(count) // count
数学クラス
ABS (number2 ) //
BIN (decimal_number ) //
CEILING (number2 ) //
CONV(number2,from_base,to_base) //
FLOOR (number2 ) //
FORMAT (number,decimal_places ) //
HEX (DecimalNumber ) //
:HEX() , ASC-11 , HEX('DEF') 4142143
, , HEX(25) 19
LEAST (number , number2 [,..]) //
MOD (numerator ,denominator ) //
POWER (number ,power ) //
RAND([seed]) //
ROUND (number [,decimals ]) // ,decimals
SIGN (number2 ) // 1, -1
日付時間クラス
ADDTIME (date2 ,time_interval ) // time_interval date2
CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //
CURRENT_DATE ( ) //
CURRENT_TIME ( ) //
CURRENT_TIMESTAMP ( ) //
DATE (datetime ) // datetime
DATE_ADD (date2 , INTERVAL d_value d_type ) // date2
DATE_FORMAT (datetime ,FormatCodes ) // formatcodes datetime
DATE_SUB (date2 , INTERVAL d_value d_type ) // date2
DATEDIFF (date1 ,date2 ) //
DAY (date ) //
DAYNAME (date ) //
DAYOFWEEK (date ) // (1-7) ,1
DAYOFYEAR (date ) //
EXTRACT (interval_name FROM date ) // date
MAKEDATE (year ,day ) // ,
MAKETIME (hour ,minute ,second ) //
MONTHNAME (date ) //
NOW ( ) //
SEC_TO_TIME (seconds ) //
STR_TO_DATE (string ,format ) // , format
TIMEDIFF (datetime1 ,datetime2 ) //
TIME_TO_SEC (time ) // ]
WEEK (date_time [,start_of_week ]) //
YEAR (datetime ) //
DAYOFMONTH(datetime) //
HOUR(datetime) //
LAST_DAY(date) //date
MICROSECOND(datetime) //
MONTH(datetime) //
MINUTE(datetime) // , 0
SQRT(number2) //