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 ----
-------------------------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Dans le développement C++, l'exception de pointeur nul est une erreur courante, qui se produit souvent lorsque le pointeur n'est pas initialisé ou continue d'être utilisé après sa publication. Les exceptions de pointeur nul provoquent non seulement des plantages du programme, mais peuvent également entraîner des vulnérabilités de sécurité, une attention particulière est donc requise. Cet article explique comment éviter les exceptions de pointeur nul dans le code C++. Initialisation des variables de pointeur Les pointeurs en C++ doivent être initialisés avant utilisation. S'il n'est pas initialisé, le pointeur pointe vers une adresse mémoire aléatoire, ce qui peut provoquer une exception de pointeur nul. Pour initialiser un pointeur, pointez-le sur un

Pendant le test Mingchao, veuillez éviter les mises à niveau du système, les réinitialisations d'usine et le remplacement de pièces pour éviter que la perte d'informations ne provoque une connexion anormale au jeu. Rappel spécial : il n'y a pas de voie d'appel pendant la période de test, veuillez donc la manipuler avec prudence. Introduction aux précautions lors du test Mingchao : Ne pas mettre à niveau le système, restaurer les paramètres d'usine, remplacer les composants de l'équipement, etc. Notes : 1. Veuillez mettre à niveau le système avec soin pendant la période de test pour éviter la perte d'informations. 2. Si le système est mis à jour, cela peut entraîner un problème d'impossibilité de se connecter au jeu. 3. À ce stade, le canal d'appel n'a pas encore été ouvert. Il est conseillé aux joueurs de choisir s'ils souhaitent effectuer une mise à niveau, à leur propre discrétion. 4. Dans le même temps, un compte de jeu ne peut être utilisé qu’avec un seul appareil Android et un seul PC. 5. Il est recommandé d'attendre la fin du test avant de mettre à niveau le système de téléphonie mobile, de restaurer les paramètres d'usine ou de remplacer l'appareil.

Avec l'essor des plateformes de vidéos courtes, Douyin est devenu une partie intégrante de la vie quotidienne de nombreuses personnes. Diffuser en direct sur Douyin et interagir avec les fans sont le rêve de nombreux utilisateurs. Alors, comment démarrer une diffusion en direct sur Douyin pour la première fois ? 1. Comment démarrer une diffusion en direct sur Douyin pour la première fois ? 1. Préparation Pour démarrer la diffusion en direct, vous devez d'abord vous assurer que votre compte Douyin a terminé l'authentification par votre nom réel. Vous pouvez trouver le didacticiel d'authentification par nom réel dans « Moi » -> « Paramètres » -> « Compte et sécurité » dans l'application Douyin. Après avoir terminé l'authentification par nom réel, vous pouvez remplir les conditions de diffusion en direct et démarrer la diffusion en direct sur la plateforme Douyin. 2. Demandez une autorisation de diffusion en direct. Après avoir rempli les conditions de diffusion en direct, vous devez demander une autorisation de diffusion en direct. Ouvrez l'application Douyin, cliquez sur "Moi" -> "Creator Center" -> "Direct

Étapes et précautions d'utilisation de localStorage pour stocker des données Cet article présente principalement comment utiliser localStorage pour stocker des données et fournit des exemples de code pertinents. LocalStorage est un moyen de stocker des données dans le navigateur qui conserve les données locales sur l'ordinateur de l'utilisateur sans passer par un serveur. Voici les étapes et les éléments à prendre en compte lors de l'utilisation de localStorage pour stocker des données. Étape 1 : Vérifiez si le navigateur prend en charge LocalStorage

Méthodes et précautions pour installer pip dans un environnement hors ligne L'installation de pip devient un défi dans un environnement hors ligne où le réseau n'est pas fluide. Dans cet article, nous présenterons plusieurs méthodes d'installation de pip dans un environnement hors ligne et fournirons des exemples de code spécifiques. Méthode 1 : utilisez le package d'installation hors ligne. Dans un environnement où vous pouvez vous connecter à Internet, utilisez la commande suivante pour télécharger le package d'installation pip à partir de la source officielle : pipdownloadpip Cette commande téléchargera automatiquement pip et ses packages dépendants à partir de la source officielle. source et enregistrez-le dans le répertoire courant. Déplacez le package compressé téléchargé vers un emplacement distant

En tant que langage de programmation de haut niveau, Python présente les avantages d’être facile à apprendre, facile à utiliser et très efficace en développement, et devient de plus en plus populaire parmi les développeurs. Cependant, en raison de la manière dont son mécanisme de récupération de place est implémenté, Python est sujet aux fuites de mémoire lorsqu'il traite de grandes quantités de mémoire. Cet article présentera les éléments auxquels vous devez prêter attention lors du développement de Python sous trois aspects : les problèmes courants de fuite de mémoire, les causes des problèmes et les méthodes pour éviter les fuites de mémoire. 1. Problèmes courants de fuite de mémoire : les fuites de mémoire font référence à l'incapacité de libérer l'espace mémoire alloué par le programme pendant le fonctionnement.

Les étapes d'installation et les précautions de pip dans l'environnement Linux Titre : Les étapes d'installation et les précautions de pip dans l'environnement Linux Lors du développement de Python, nous avons souvent besoin d'utiliser des bibliothèques tierces pour augmenter les fonctionnalités du programme. En tant qu'outil de gestion de packages standard pour Python, pip peut facilement installer, mettre à niveau et gérer ces bibliothèques tierces. Cet article présentera les étapes à suivre pour installer pip dans un environnement Linux et fournira quelques précautions et des exemples de code spécifiques pour référence. 1. Installez pip pour vérifier la version Python

Notes et FAQ sur les instructions de requête par lots MyBatis Introduction MyBatis est un excellent framework de couche de persistance qui prend en charge des opérations de base de données flexibles et efficaces. Parmi eux, les requêtes par lots sont une exigence courante. En interrogeant plusieurs éléments de données en même temps, la surcharge de connexion à la base de données et d'exécution SQL peut être réduite et les performances du système peuvent être améliorées. Cet article présentera quelques précautions et problèmes courants liés aux instructions de requête par lots MyBatis, et fournira des exemples de code spécifiques. J'espère que cela pourra aider les développeurs. Choses à noter lors de l'utilisation de M
