亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解MySQL alter ignore 語法

 更新時間:2020年11月10日 17:11:56   作者:AsiaYe  
這篇文章主要介紹了MySQL alter ignore 語法的相關(guān)資料,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下

    今天上班的時候,業(yè)務(wù)方問了我這樣一個問題:我有一個表,需要添加一個唯一的字段,但是目前這個字段存在一些重復(fù)值,有沒有好的解決辦法。

    這個問題剛聽到的時候,說白了我是不會的,因為沒有遇到過這樣的需求,要在一個重復(fù)字段上設(shè)置唯一性,必然有數(shù)據(jù)丟失啊,因為一個字段不可能及時唯一的,又有重復(fù)值。于是我詳細(xì)詢問了一下他的需求,最終得知,這個過程中重復(fù)的數(shù)據(jù)只需要保存一條就可以了,可以容忍一部分?jǐn)?shù)據(jù)丟失,而重復(fù)的字段恰好是時間字段,這樣的話,只需要保證每個時間點都有一條記錄即可。

    聽到這里,我想到了下面幾個方法:

1.備份表數(shù)據(jù),使用distinct的方法過濾這個字段,然后使用連接查詢獲得其他的字段;

2.備份表數(shù)據(jù),然后使用查詢表記錄里面有重復(fù)值的部分,并進(jìn)行統(tǒng)計,然后隨機保留其中的一條記錄。

   除了這兩種方法,在低版本的mysql中還有一種方法,是使用alter ignore table的方法了,這個語法使用的比較少,我這里進(jìn)行了一個實驗進(jìn)行測試:

mysql--dba_admin@127.0.0.1:yeyztest 23:30:51>>show create table test\G
*************************** 1. row ***************************
    Table: test
Create Table: CREATE TABLE `test` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `age` int(11) DEFAULT NULL,
 `score` int(11) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql--dba_admin@127.0.0.1:test 23:38:39>>select * from test;
+----+------+-------+
| id | age | score |
+----+------+-------+
| 1 |  2 |   3 |
| 2 |  2 |   3 |
| 3 |  3 |   4 |
| 4 |  4 |   5 |
+----+------+-------+
4 rows in set (0.00 sec)

    創(chuàng)建一個表,然后插入重復(fù)記錄,然后對age字段進(jìn)行添加唯一索引的操作,我們可以看看結(jié)果:

mysql--dba_admin@127.0.0.1:test 23:38:43>>alter table test add unique key uni_key(age);
ERROR 1062 (23000): Duplicate entry '2' for key 'uni_key'

mysql--dba_admin@127.0.0.1:test 23:39:04>>alter ignore table test add unique key uni_key(age);
ERROR 1062 (23000): Duplicate entry '2' for key 'uni_key'


mysql--dba_admin@127.0.0.1:test 23:39:24>>select @@old_alter_table=1;
+---------------------+
| @@old_alter_table=1 |
+---------------------+
|          0 |
+---------------------+
1 row in set (0.00 sec)


mysql--dba_admin@127.0.0.1:test 23:40:22>>set old_alter_table=1;
Query OK, 0 rows affected (0.00 sec)

mysql--dba_admin@127.0.0.1:test 23:40:36>>alter ignore table test add unique key uni_key(age);
Query OK, 4 rows affected (0.04 sec)
Records: 4 Duplicates: 1 Warnings: 0

mysql--dba_admin@127.0.0.1:test 23:40:39>>select * from test;
+----+------+-------+
| id | age | score |
+----+------+-------+
| 1 |  2 |   3 |
| 3 |  3 |   4 |
| 4 |  4 |   5 |
+----+------+-------+
3 rows in set (0.00 sec)

    可以看到,我們首先使用了傳統(tǒng)的直接修改的方法。也就是alter table test的方法,發(fā)現(xiàn)有沖突的記錄,然后我們該用alter ignore的方法,錯誤依舊保留,經(jīng)過查詢是少了一個參數(shù),old_alter_table,要想成功實現(xiàn)去除重復(fù)記錄并且添加唯一索引,需要把這個參數(shù)設(shè)置為1,最終成功實現(xiàn)了結(jié)果。

    這里需要注意的是,我的這個測試的環(huán)境是MySQL5.5.19,在MySQL5.7環(huán)境中,這個測試時不成功的,這種語法被標(biāo)記為錯誤語法。所以這個方法只能在MySQL5.5版本中使用。有興趣的同學(xué)可以測一測是否可以在5.6版本上使用。

    再說明一點,alter ignore table的本質(zhì)是創(chuàng)建一張新表,然后新表的結(jié)構(gòu)上age字段是唯一的,再通過insert ignore的語法進(jìn)行插入,碰到重復(fù)的記錄,則直接刪除。所以,在使用這個語法的時候,請一定注意你的表的數(shù)據(jù)量,如果數(shù)據(jù)量比較大的情況,需要謹(jǐn)慎使用,因為他的執(zhí)行時間可能會很長。

    今天就到這里吧。

以上就是詳解MySQL alter ignore 語法的詳細(xì)內(nèi)容,更多關(guān)于MySQL alter ignore 語法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • IDEA連接mysql又報錯!Server returns invalid timezone. Go to tab and set serverTimezone  prope的問題

    IDEA連接mysql又報錯!Server returns invalid timezone. Go to tab an

    這篇文章主要介紹了IDEA連接mysql又報錯!Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' prope問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2020-05-05
  • MySQL數(shù)據(jù)庫多表聯(lián)合查詢代碼示例

    MySQL數(shù)據(jù)庫多表聯(lián)合查詢代碼示例

    所謂聯(lián)合就是把多個表的記錄往一起合并,一起進(jìn)行查詢,也叫多表查詢,這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫多表聯(lián)合查詢的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • SQL函數(shù)實現(xiàn)Group_concat用法

    SQL函數(shù)實現(xiàn)Group_concat用法

    GROUP_CONCAT用于將每個分組內(nèi)的值連接成一個字符串,并通過指定的分隔符進(jìn)行分隔,本文主要介紹了SQL函數(shù)實現(xiàn)Group_concat用法,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • MYSQL 根據(jù)唯一索引鍵更新死鎖問題解析

    MYSQL 根據(jù)唯一索引鍵更新死鎖問題解析

    這篇文章主要介紹了MYSQL 根據(jù)唯一索引鍵更新死鎖問題解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-10-10
  • SQL實現(xiàn)LeetCode(197.上升溫度)

    SQL實現(xiàn)LeetCode(197.上升溫度)

    這篇文章主要介紹了SQL實現(xiàn)LeetCode(197.上升溫度),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • MySQL 數(shù)據(jù)庫優(yōu)化的具體方法說明

    MySQL 數(shù)據(jù)庫優(yōu)化的具體方法說明

    以下的文章主要講述的是實現(xiàn)MySQL數(shù)據(jù)庫簡單實用優(yōu)化的具體方法,以及在實際操作中有哪些具體操作步驟是值得我們大家注意的。
    2010-05-05
  • MYSQL導(dǎo)入導(dǎo)出sql文件簡析

    MYSQL導(dǎo)入導(dǎo)出sql文件簡析

    這篇文章主要介紹了MYSQL導(dǎo)入導(dǎo)出.sql文件的相關(guān)資料,內(nèi)容包括MYSQL的命令行模式的設(shè)置、命令行進(jìn)入MYSQL的方法、數(shù)據(jù)庫導(dǎo)出數(shù)據(jù)庫文件、從外部文件導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 解決mysql 組合AND和OR帶來的問題

    解決mysql 組合AND和OR帶來的問題

    這篇文章主要介紹了解決mysql 組合AND和OR帶來的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • 利用MySQL空間函數(shù)實現(xiàn)位置打卡的完整步驟

    利用MySQL空間函數(shù)實現(xiàn)位置打卡的完整步驟

    這篇文章主要給大家介紹了關(guān)于如何利用MySQL空間函數(shù)實現(xiàn)位置打卡的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • MySQL數(shù)據(jù)庫線上修改表結(jié)構(gòu)的方法

    MySQL數(shù)據(jù)庫線上修改表結(jié)構(gòu)的方法

    MySQL有一個把鎖,叫做MDL元數(shù)據(jù)鎖,當(dāng)對表修改的時候,會自動給表加上這把鎖,也就是不需要自己顯式使用,這篇文章主要介紹了MySQL數(shù)據(jù)庫線上修改表結(jié)構(gòu)的方法,需要的朋友可以參考下
    2022-09-09

最新評論