不常規SQL技巧解決繁瑣後端程序處理的問題

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

不常規SQL技巧解決繁瑣後端程序處理的問題

2. 使用IGNORE 方法在Insert插入時可以 避免 duplicate 重複的錯誤

INSERT IGNORE INTO table_sales (xcode,vposition,timescap, crdate)

VALUES('KKK36', '61000', 1496298265, '2017-06-01 16:09:15')

不常規SQL技巧解決繁瑣後端程序處理的問題

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',則會插入新的一行數據。

不常規SQL技巧解決繁瑣後端程序處理的問題

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 新版本均支持。


分享到:


相關文章: