1.將SELECT返回的結果集合給予一個別名t 賦予表的功能,然後再從中檢索數據
SELECT a.au_fname+a.au_lname
FROM authors a,titleauthor ta,
(SELECT `title_id`,`title`
FROM `titles`
WHERE ` ytd_sales`>10000
) AS t
WHERE a.au_id=ta.au_id
AND ta.title_id=t.title_id
2. 使用IGNORE 方法在Insert插入時可以 避免 duplicate 重複的錯誤
INSERT IGNORE INTO table_sales (xcode,vposition,timescap, crdate)
VALUES('KKK36', '61000', 1496298265, '2017-06-01 16:09:15')
3.INSERT IGNORE INTO 表名 ON Duplicate Key UPDATE
此語句:一邊插入一邊更新:前提 是 插入的值 與表 關鍵字段 對應,
當要插入的數據 與表關鍵字一樣且 與錶行對應的值 不一樣時,則更新。
當要插入的數據 與表關鍵字不一樣時,則會插入一條新記錄
示例:設計table_name表時,將bbb,ccc字段置為關鍵字段
INSERT IGNORE INTO table_name( aaa,bbb,ccc,ddd)
VALUES('1111','2222','3333','4444')
ON Duplicate Key UPDATE aaa='1111',bbb='2222',ccc='3333',ddd='4444'
當table_name表的行中有 bbb='2222',ccc='3333',且aaa='1111',ddd='4444',則不會更新數據。
當table_name表的行中有 bbb='2222',ccc='3333',且aaa不等於'1111',ddd='4444' (且的條件 aaa,ddd字段任意一個表中沒有都會更新數據),則會更新數據。
當table_name表的行中沒有 bbb='2222',ccc='3333',則會插入新的一行數據。
4.REPLACE INTO 語句只需要一個關鍵字,比如ID字段為自動編號
REPLACE INTO 和 INSERT IGNORE INTO 功能上有很大相似.
如果一個表在一個字段上建立了唯一索引,當我們再向這個表中使用已經存在的鍵值插入一條記錄,那將會拋出一個主鍵衝突的錯誤。當然,我們可能想用新記錄的值來覆蓋原來的記錄值。如果使用傳統的做法,必須先使用DELETE語句刪除原先的記錄,然後再使用INSERT插入新的記錄。而在MySQL中為我們提供了一種新的解決方案,這就是REPLACE語句。使用REPLACE插入一條記錄時,如果不重複,REPLACE就和INSERT的功能一樣,如果有重複記錄,REPLACE就使用新記錄的值來替換原來的記錄值。
使用REPLACE的最大好處就是可以將DELETE和INSERT合二為一,形成一個原子操作。這樣就可以不必考慮在同時使用DELETE和INSERT時添加事務等複雜操作了。
REPLACE INTO users (id,name,age) VALUES(123, '趙本山', 50);
插入多條記錄:
REPLACE INTO users(id, name, age)
VALUES(123, '趙本山', 50), (134,'Mary',15);
REPLACE也可以使用SET語句
REPLACE INTO users SET id = 123, name = '趙本山', age = 50;
以上在Mysql DB ,MariaDB,SkySQLDB 新版本均支持。
閱讀更多 IT資源先峰 的文章