MySQL備忘點(下)
聯結表
創建聯結 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備忘點(下)