MySQL-ビューとストレージ・プロシージャ


一、MySQL基礎知識
 :
      :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) //