1. 程式人生 > >MySQL備忘點(下)

MySQL備忘點(下)

update 虛擬 主鍵 ble str 內聯 完全 語句 innodb

聯結表

  創建聯結  FROM 表1,表2    與內連接作用相同類似;如果失去WHERE子句,會出現笛卡爾積現象

  內聯結   INNER JOIN    

高級聯結

  自聯結   例子:SELECT 字段b FROM 表 WHERE 字段a = (SELECT 字段a FROM 表 WHERE 字段B的條件),單條SQL文多次引用一張表

  外聯結   LEFT OUTER JOIN  RIGHT OUTER JOIN  FULL JOIN    外聯結有三種,分別代表那張表的結果可以為空,還是說都可以為空

組合查詢

  並        SQL1 UNION SQL2              SQL1 和 SQL2的結果集中字段名必須完全一致

  消除重復的並   SQL1 UNION ALL SQL2            SQL1 和 SQL2的結果集中字段名必須完全一致

  並排序      SQL1 UNION ALL SQL2 ORDER BY 字段     這個排序是將組合後的總結果集進行排序

插入數據      “多行插入”,“插入檢索值”用的比較多

  單行插入    “值”可以是null,盡量把字段名完全列出來,而不是依賴自帶的順序

INSERT INTO 表名        
    (字段名1, 字段名2, 字段名3)    
VALUES        
    (值1, 值2, 值3);    

  多行插入    這是最簡便的方式,避免使用 多條“單行插入”語句

INSERT INTO 表名        
    (字段名1, 字段名2, 字段名3)    
VALUES        
    (值1x, 值2x, 值3x),    
    (值1y, 值2y, 值3y),    
    (值1z, 值2z, 值3z)    

  插入檢索值    INSERT-SELECT語句,INSERT部分和SELECT部分的列名可以不匹配,只要類型一致保證不報錯即可,

INSERT INTO 表名        
    (字段名1, 字段名2, 字段名3)    
SELECT 字段名1, 字段名2, 字段名3 FROM 表名x

例如:

INSERT INTO student (no)

SELECT student_no FROM people

更新刪除數據      “更新”,“刪除”都比較常用,避免使用不帶WHERE條件的更新、刪除語句,它們太危險了

更新

UPDATE 表名 SET    
    字段1=值1,
    字段2=值2
WHERE    
    條件

刪除

DELETE FROM 表名        
WHERE        
    條件    

創建和操縱表

創建表

CREATE TABLE 表名 (        
    字段1 類型 NOT NULL AUTO_INCREMENT,    
    字段2 類型 NULL DEFAULT Deolin,    
    …… ,    
    PRIMARY KEY (字段1)    
) ENGINE=InnoDB        

字段名 類型 null值? 自增? 默認值,
主鍵
引擎類型

更新表

ALTER TABLE 表名 (        
    ADD     
    DROP    
)        

刪除表

DROP TABLE 表名

重命名表

RENAME TABLE 表名1 TO 表名2

視圖        COOP時候的WebQuery

創建視圖

CREATE VIEW 視圖名 AS                                    
    SELECT語句                                

視圖常見的作用就是重用SQL語句,特別是SELECT語句

一般來說視圖不用與INSERT、UPDATE、DELETE

遊標        

用於操作SQL文的結果集,常見的用法可能是分頁

觸發器

創建觸發器

CREATE TRIGGER csts_del AFTER INSERT ON csts         
FOR EACH ROW        
    BEGIN    
        SELECT success
    END    

BEGIN - END用於容納多條SQL語句,不是必須的

刪除觸發器

DROP TRIGGER csts_del

INSERT觸發器

CREATE TRIGGER csts_ins AFTER INSERT ON csts         
FOR EACH ROW        
    SELECT NEW.no    

after可以換成before,before用於插入前數據的凈化,after用於插入後的確認

NEW關鍵字指的是一個虛擬表,表中存儲的是觸發器INSERT語句插入的數據

DELETE觸發器

CREATE TRIGGER csts_del AFTER INSERT ON csts         
FOR EACH ROW        
    SELECT OLD.no

OLD關鍵字與NEW類似,存儲的是觸發器DELETE語句刪除的數據

UPDATE觸發器

CREATE TRIGGER csts_upd BEFORE UODATE ON csts            
FOR EACH ROW            
    SET NEW.name =Upper(NEW.name);        

Upper()函數返回的是參數字段更新後的值

MySQL備忘點(下)