1. 程式人生 > 其它 >常用MYSQL語法

常用MYSQL語法

技術標籤:sql資料庫mysql

常用MYSQL語法
SQL語句:DROP [TRIGGER|TABLE|PROCEDURE] IF EXISTS X;
解釋:如果【表|觸發器|儲存過程】X存在則刪除

SQL語句:CREATE TRIGGER X [BEFORE|AFTER] [UPDATE|INSERT|…]
ON Y FOR EACH ROW EXPR
解釋:建立觸發器X,在表Y被執行修改、插入或其他合理操作時觸發X 並執行 EXPR

SQL語句:DECLARE A [DATE|INT|VARCHAR(40)|…]
解釋:宣告日期,整形,指定長度的字串等變數 A

SQL語句:SELECT A INTO B FROM X WHERE EXPR

解釋:從表中查詢滿足條件 EXPR 的值 A插入變數 B 中

SQL語句:[NEW.A|OLD.A]
解釋:在觸發器中,新插入的或更改的資料行的之前的欄位A

SQL語句:SIGNAL SQLSTATE ‘45000’ SET MESSAGE_TEXT = ‘warn’,
解釋:丟擲異常warn 45000 是通用寫法

SQL語句:INSERT INTO X (A, B, C) VALUES(vol1, vol2, vol3) ON DUPLICATE KEY UPDATE A = vol1, B = vol2
解釋:給表X插入一條欄位 A、B、C的值分別為vol1, vol2, vol3的資料,當插入的資料主鍵或指定唯一欄位重複時,更新欄位A、B的值分別為vol1, vol2

SQL語句:IF(EXPR1, EXPR2, EXPR3)
解釋:當EXPR1=true時執行EXPR2,否則執行EXPR3
SQL語句:IF (EXPR1) THEN EXPR2 ELSE EXPR3 END IF;
解釋:如果EXPR1=true時執行EXPR2 否則執行EXPR3
SQL語句:CREATE PROCEDURE X(
A VARCHAR(40), B BIGINT, C INT)
BEGIN EXPR1(A,B,C); SELECT EXPR2 END
解釋:建立儲存過程X,引數為A,B,C,並在EXPR1語句裡使用,返回查詢語句EXPR2查詢的結果

SQL語句:IFNULL(A,B)

解釋:當欄位A是NULL時取B,不是NULL時取A的值

SQL語句:SET A = LAST_INSERT_ID();
解釋:設定變數A的值為最後插入表的一條資料的主鍵值

SQL語句:SET P_SQL = ‘INSERT INTO 。。’);
SET @P_SQL = P_SQL;
PREPARE STMT FROM @P_SQL;
EXECUTE STMT;
DEALLOCATE PREPARE STMT;
解釋:與定製語句P_SQL,執行P_SQL,關閉STMT
SQL語句:SQRT(POW(A,B))
解釋:計算A的B次方的平方根

SQL語句:LENGTH(A)
解釋:計算字串A的長度

SQL語句:DATE_SUB(P_DATE, INTERVAL 1 DAY);
DATE_ADD(P_DATE, INTERVAL 1 DAY);
解釋:將時間 P_DATE 減去一天和增加一天

SQL語句:ORDER BY 3
解釋:根據表的第三個欄位排序

遊標:
CREATE PROCEDURE proc_test()BEGIN
– 定義變數
DECLARE done INT DEFAULT FALSE;
DECLARE field_1 VARCHAR(20);
DECLARE field_2 VARCHAR(20);-- 建立遊標,並存儲資料
DECLARE cur_list CURSOR FOR SELECT id, name FROM user;
– 遊標中的內容執行完後將done設定為true
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;
– 開啟遊標
OPEN cur_list;
– 執行迴圈 read_loop : LOOP
– 取遊標中的值
FETCH cur_list INTO field_1, field_2;
– 判斷是否結束迴圈,一定要放到FETCH之後,因為在fetch不到的時候才會設定done為true
– 如果放到fetch之前,先判斷done,這個時候done的值還是之前的迴圈的值,因此就會導致迴圈一次
IF done THEN
LEAVE read_loop;
END IF;

    --  執行SQL操作
    SET @sql_insert = CONCAT("insert into user_bak(id, name) VALUES ('", field_1, "','", field_2 ,"')");
    PREPARE sqlli FROM @sql_insert;
        EXECUTE  sqlli;
    COMMIT;
END LOOP read_loop;
-- 釋放遊標
CLOSE cur_list;END

函式:
create function 函式名([引數列表]) returns 資料型別begin
sql語句;
return 值;end;
– 最簡單的僅有一條sql的函式create function myselect2() returns int return 666;
– 呼叫函式select myselect2();
– 帶傳參的函式create function myselect5(name varchar(15)) returns intbegin
declare c int;
select id from class where cname=name into c;
return c;end;select myselect5(“python”);

SQL語句:EXIT_LABEL:BEGIN LEAVE EXIT_LABEL; END
解釋:退出儲存過程

SQL語句:CREATE TEMPORARY TABLE X SELECT * FROM Y;
解釋:將從表Y查到的資料複製給臨時表X

SQL語句:CREATE VIEW X AS Y
解釋:將表Y建立檢視X

SQL語句:[CHARSET|CHARACTER SET]
解釋:指定字符集

SQL語句:
SELECT SUBSTRING(‘MYSQL SUBSTRING’, 7);
SELECT SUBSTRING(‘MYSQL SUBSTRING’, 0);
SELECT SUBSTRING(‘MYSQL SUBSTRING’ FROM -9);
SELECT SUBSTRING(‘MYSQL SUBSTRING’,1,5);
SELECT SUBSTRING(‘MYSQL SUBSTRING’ FROM 1 FOR 5);
SELECT SUBSTRING(‘MYSQL SUBSTRING’ FROM -15 FOR 5);
解釋:
獲取字串第7個(包含第7個)字元以後的子字串
返回空字串
獲取字串倒數第9(包含倒數第9)個以後的子字串
獲取字串第1個(包含第1個)以後5個的子字串
獲取字串第1個(包含第1個)以後5個的子字串
獲取字串倒數第15(包含倒數第15)個以後的5個子字串(如果15大於字串總長度,返回空字串。

SQL語句:B NOT IN (‘1’,‘2’);
解釋:B不在(‘1’,‘2’)裡的集合

show variables like ‘%char%’;
解釋:查詢mysql安裝目錄

SQL語句:SET SQL_SAFE_UPDATES = 0;
解釋:接觸資料庫安全模式