MySQL使用AUTO_INCREMENT列的表注意事项之update自增列篇_MySQL
1. 说明
(1)对于MyISAM表,如果用UPDATE更新自增列,如果列值与已有的值重复,则会出错;如果大于已有的最大值,则会自动更新表的AUTO_INCREMENT,操作是安全的。
(2)对于innodb表,update auto_increment字段,如果列值与已有的值重复,则会出错;如果大于已有的最大值,可能会引入一个坑,会造成编号重复错误,插入数据失败的情况,可见在update自增列值是要注意。
环境描述:RHEL 6.4 x86_64 + MySQL 5.6.19
blog地址:http://blog.csdn.net/hw_libo/article/details/40097125
下面实验证实:
2. MyISAM表
MySQL [bosco]> CREATE TABLE `t5` ( -> `id` int(10) unsigned NOT NULL AUTO_INCREMENT, -> PRIMARY KEY (`id`) -> ) ENGINE=MyISAM; Query OK, 0 rows affected (0.05 sec) MySQL [bosco]> insert into t5 values(null); Query OK, 1 row affected (0.07 sec) MySQL [bosco]> select * from t5; +----+ | id | +----+ | 1 | +----+ 1 row in set (0.00 sec) MySQL [bosco]> insert into t5 values(5),(9); Query OK, 2 rows affected (0.04 sec) Records: 2 Duplicates: 0 Warnings: 0 MySQL [bosco]> select * from t5; +----+ | id | +----+ | 1 | | 5 | | 9 | +----+ 3 rows in set (0.00 sec)
2.1 MyISAM表update自增列,由大改小
MySQL [bosco]> show create table t5\G *************************** 1. row *************************** Table: t5 Create Table: CREATE TABLE `t5` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 1 row in set (0.00 sec) MySQL [bosco]> update t5 set id=4 where id=9; ## 将自增列由大改小,没有问题 Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0 MySQL [bosco]> show create table t5\G *************************** 1. row *************************** Table: t5 Create Table: CREATE TABLE `t5` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 1 row in set (0.00 sec)
2.2 MyISAM表update自增列,由小改大
MySQL [bosco]> show create table t5\G *************************** 1. row *************************** Table: t5 Create Table: CREATE TABLE `t5` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 1 row in set (0.00 sec) MySQL [bosco]> update t5 set id=12 where id=5; ## 将自增列由小改大,而且大于当前的AUTO_INCREMENT,同样是没有问题 Query OK, 1 row affected (0.03 sec) Rows matched: 1 Changed: 1 Warnings: 0 MySQL [bosco]> show create table t5\G *************************** 1. row *************************** Table: t5 Create Table: CREATE TABLE `t5` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 1 row in set (0.00 sec) 这里自动修改最新的auto_increment变为13。
3. InnoDB表
MySQL [bosco]> CREATE TABLE `t6` ( -> `id` int(10) unsigned NOT NULL AUTO_INCREMENT, -> PRIMARY KEY (`id`) -> ) ENGINE=InnoDB; Query OK, 0 rows affected (0.06 sec) MySQL [bosco]> insert into t6 values(null); Query OK, 1 row affected (0.05 sec) MySQL [bosco]> insert into t6 values(5),(9); Query OK, 2 rows affected (0.01 sec) Records: 2 Duplicates: 0 Warnings: 0 MySQL [bosco]> select * from t6; +----+ | id | +----+ | 1 | | 5 | | 9 | +----+ 3 rows in set (0.00 sec)
3.1 InnoDB表update自增列,由大改小
MySQL [bosco]> show create table t6\G *************************** 1. row *************************** Table: t6 Create Table: CREATE TABLE `t6` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 1 row in set (0.00 sec) MySQL [bosco]> update t6 set id=4 where id=9; Query OK, 1 row affected (0.04 sec) Rows matched: 1 Changed: 1 Warnings: 0 MySQL [bosco]> show create table t6\G *************************** 1. row *************************** Table: t6 Create Table: CREATE TABLE `t6` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 1 row in set (0.00 sec)
3.2 InnoDB表update自增列,由小改大
MySQL [bosco]> select * from t6; +----+ | id | +----+ | 1 | | 4 | | 5 | +----+ 3 rows in set (0.00 sec) MySQL [bosco]> show create table t6\G *************************** 1. row *************************** Table: t6 Create Table: CREATE TABLE `t6` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 1 row in set (0.00 sec) MySQL [bosco]> update t6 set id=12 where id=5; ## 将自增列由小改大,而且大于当前的AUTO_INCREMENT,这就相当于挖了坑了 Query OK, 1 row affected (0.03 sec) Rows matched: 1 Changed: 1 Warnings: 0 MySQL [bosco]> select * from t6; +----+ | id | +----+ | 1 | | 4 | | 12 | +----+ 3 rows in set (0.01 sec) MySQL [bosco]> show create table t6\G *************************** 1. row *************************** Table: t6 Create Table: CREATE TABLE `t6` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 1 row in set (0.01 sec) 表中自增列最大值已经是12,这个update操作不会自动修改最新的auto_increment变为13,那么这就会有问题,以后增加到12后,就会出现冲突,导致数据插入失败: MySQL [bosco]> insert into t6 values(null),(null); Query OK, 2 rows affected (0.03 sec) Records: 2 Duplicates: 0 Warnings: 0 MySQL [bosco]> insert into t6 values(null); ## 错误出现了。 ERROR 1062 (23000): Duplicate entry '12' for key 'PRIMARY'
blog地址:http://blog.csdn.net/hw_libo/article/details/40097125
-- Bosco QQ:375612082
---- END ----
-------------------------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Dalam pembangunan C++, pengecualian penuding nol ialah ralat biasa, yang sering berlaku apabila penunjuk tidak dimulakan atau terus digunakan selepas dikeluarkan. Pengecualian penuding nol bukan sahaja menyebabkan ranap program, tetapi juga boleh menyebabkan kelemahan keselamatan, jadi perhatian khusus diperlukan. Artikel ini akan menerangkan cara untuk mengelakkan pengecualian penuding nol dalam kod C++. Memulakan pembolehubah penunjuk Penunjuk dalam C++ mesti dimulakan sebelum digunakan. Jika tidak dimulakan, penunjuk akan menunjuk ke alamat memori rawak, yang mungkin menyebabkan Pengecualian Penunjuk Null. Untuk memulakan penuding, arahkannya ke an

Semasa ujian Mingchao, sila elakkan naik taraf sistem, tetapan semula kilang dan penggantian alat ganti untuk mengelakkan kehilangan maklumat dan log masuk permainan yang tidak normal. Peringatan khas: Tiada saluran rayuan semasa tempoh ujian, jadi sila kendalikannya dengan berhati-hati. Pengenalan kepada perkara yang memerlukan perhatian semasa ujian Mingchao: Jangan tingkatkan sistem, pulihkan tetapan kilang, ganti komponen peralatan, dsb. Nota: 1. Sila tingkatkan sistem dengan teliti semasa tempoh ujian untuk mengelakkan kehilangan maklumat. 2. Jika sistem dikemas kini, ia mungkin menyebabkan masalah tidak dapat log masuk ke permainan. 3. Pada peringkat ini, saluran rayuan masih belum dibuka Pemain dinasihatkan untuk memilih sama ada untuk menaik taraf mengikut budi bicara mereka sendiri. 4. Pada masa yang sama, satu akaun permainan hanya boleh digunakan dengan satu peranti Android dan satu PC. 5. Adalah disyorkan agar anda menunggu sehingga ujian selesai sebelum menaik taraf sistem telefon mudah alih atau memulihkan tetapan kilang atau menggantikan peranti.

Dengan kebangkitan platform video pendek, Douyin telah menjadi bahagian yang sangat diperlukan dalam kehidupan seharian ramai orang. Penyiaran langsung di Douyin dan berinteraksi dengan peminat adalah impian ramai pengguna. Jadi, bagaimanakah anda memulakan siaran langsung di Douyin buat kali pertama? 1. Bagaimana untuk memulakan siaran langsung di Douyin buat kali pertama? 1. Persediaan Untuk memulakan siaran langsung, anda perlu memastikan bahawa akaun Douyin anda telah melengkapkan pengesahan nama sebenar. Anda boleh menemui tutorial pengesahan nama sebenar dalam "Saya" -> "Tetapan" -> "Akaun dan Keselamatan" dalam APP Douyin. Selepas melengkapkan pengesahan nama sebenar, anda boleh memenuhi syarat siaran langsung dan memulakan siaran langsung pada platform Douyin. 2. Mohon kebenaran siaran langsung Selepas memenuhi syarat siaran langsung, anda perlu memohon kebenaran siaran langsung. Buka APP Douyin, klik "Saya" -> "Pusat Pencipta" -> "Terus

Langkah dan langkah berjaga-jaga untuk menggunakan localStorage untuk menyimpan data Artikel ini memperkenalkan terutamanya cara menggunakan localStorage untuk menyimpan data dan menyediakan contoh kod yang berkaitan. LocalStorage ialah cara menyimpan data dalam penyemak imbas yang menyimpan data setempat ke komputer pengguna tanpa melalui pelayan. Berikut ialah langkah dan perkara yang perlu diberi perhatian apabila menggunakan localStorage untuk menyimpan data. Langkah 1: Semak sama ada penyemak imbas menyokong LocalStorage

Kaedah dan langkah berjaga-jaga untuk memasang pip dalam persekitaran luar talian Memasang pip menjadi cabaran dalam persekitaran luar talian di mana rangkaian tidak lancar. Dalam artikel ini, kami akan memperkenalkan beberapa kaedah memasang pip dalam persekitaran luar talian dan memberikan contoh kod khusus. Kaedah 1: Gunakan pakej pemasangan luar talian Dalam persekitaran yang boleh menyambung ke Internet, gunakan arahan berikut untuk memuat turun pakej pemasangan pip daripada sumber rasmi: pipdownloadpip Perintah ini akan memuat turun pip dan pakej bergantungnya secara automatik daripada sumber rasmi dan simpan dalam direktori semasa. Alihkan pakej termampat yang dimuat turun ke lokasi terpencil

Sebagai bahasa pengaturcaraan peringkat tinggi, Python mempunyai kelebihan kerana mudah dipelajari, mudah digunakan dan sangat cekap dalam pembangunan, dan menjadi semakin popular di kalangan pembangun. Walau bagaimanapun, disebabkan oleh cara mekanisme pengumpulan sampahnya dilaksanakan, Python terdedah kepada kebocoran memori apabila berurusan dengan jumlah memori yang besar. Artikel ini akan memperkenalkan perkara yang perlu anda perhatikan semasa pembangunan Python daripada tiga aspek: masalah kebocoran memori biasa, punca masalah dan kaedah untuk mengelakkan kebocoran memori. 1. Masalah kebocoran memori biasa: Kebocoran memori merujuk kepada ketidakupayaan untuk melepaskan ruang memori yang diperuntukkan oleh program semasa operasi.

Langkah-langkah pemasangan dan langkah berjaga-jaga pip dalam persekitaran Linux Tajuk: Langkah-langkah pemasangan dan langkah berjaga-jaga pip dalam persekitaran Linux Semasa membangunkan Python, kita selalunya perlu menggunakan perpustakaan pihak ketiga untuk meningkatkan kefungsian program. Sebagai alat pengurusan pakej standard untuk Python, pip boleh memasang, menaik taraf dan mengurus perpustakaan pihak ketiga ini dengan mudah. Artikel ini akan memperkenalkan langkah-langkah untuk memasang pip dalam persekitaran Linux, dan menyediakan beberapa langkah berjaga-jaga dan contoh kod khusus untuk rujukan. 1. Pasang pip untuk menyemak versi Python

Nota dan Soalan Lazim tentang pernyataan pertanyaan kumpulan MyBatis Pengenalan MyBatis ialah rangka kerja lapisan kegigihan yang sangat baik yang menyokong operasi pangkalan data yang fleksibel dan cekap. Antaranya, pertanyaan kelompok adalah keperluan biasa Dengan menanyakan beberapa keping data pada satu masa, overhed sambungan pangkalan data dan pelaksanaan SQL boleh dikurangkan, dan prestasi sistem boleh dipertingkatkan. Artikel ini akan memperkenalkan beberapa langkah berjaga-jaga dan masalah biasa dengan pernyataan pertanyaan kelompok MyBatis, dan memberikan contoh kod khusus. Harap ini dapat memberikan sedikit bantuan kepada pembangun. Perkara yang perlu diperhatikan apabila menggunakan M
