W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
如前面的課程所討論的,MariaDB在某些情況下允許重復記錄和表。 由于不同的數(shù)據(jù)或對象類型,或作為操作對象的唯一壽命或存儲的結果,這些重復中的一些事實上不是重復的。 這些副本通常也沒有問題。
在某些情況下,重復確實會導致問題,并且它們常常由于隱式動作或MariaDB命令的寬松策略而出現(xiàn)。 有多種方法可以控制此問題,查找重復項,刪除重復項,并防止重復創(chuàng)建。
有四個關鍵方法來管理重復 -
使用JOIN關聯(lián),并用臨時表刪除他們。
使用INSERT ... ON DUPLICATE KEY UPDATE在發(fā)現(xiàn)重復時更新。
使用DISTINCT修剪SELECT語句的結果并刪除重復的。
使用INSERT IGNORE停止插入重復項。
只需像內部聯(lián)接那樣執(zhí)行半連接,然后刪除使用臨時表找到的重復。
當INSERT ... ON DUPLICATE KEY UPDATE發(fā)現(xiàn)重復的唯一或主鍵時,它執(zhí)行更新。 發(fā)現(xiàn)多個唯一鍵時,它只更新第一個。 因此,不要在具有多個唯一索引的表上使用它。
查看以下示例,該示例顯示在插入到填充字段時在包含索引值的表中發(fā)生的情況 -
INSERT INTO add_dupl VALUES (1,'Apple'); ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
注意 - 如果沒有找到任何鍵,INSERT ... ON DUPLICATE KEY UPDATE語句的執(zhí)行方式與正常的insert語句相似。
DISTINCT子句從結果中刪除重復項。 DISTINCT子句的一般語法如下 -
SELECT DISTINCT fields FROM table [WHERE conditions];
注 - 帶有DISTINCT子句的語句的結果 -
當使用一個表達式時,它為它返回唯一的值。
當使用多個表達式時,它返回唯一的組合。
它不會忽略NULL值; 因此,結果還包含NULL作為唯一值。
使用單個表達式的DISTINCT子句查看以下語句 -
SELECT DISTINCT product_id FROM products WHERE product_name = 'DustBlaster 5000';
使用多個表達式查看以下示例 -
SELECT DISTINCT product_name, product_id FROM products WHERE product_id < 30
INSERT IGNORE語句指示MariaDB在發(fā)現(xiàn)重復記錄時取消插入。 查看下面給出的使用示例 -
mysql> INSERT IGNORE INTO customer_tbl (LN, FN) VALUES( 'Lex', 'Luther');
另外,注意重復的邏輯。 某些表基于表數(shù)據(jù)的性質需要重復。 滿足您在管理重復記錄的策略中的需要。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: