mysql delete auto_increment列时的注意问题
1. 说明
在对带有AUTO_INCREMENT列的表delete掉所有数据时:
(1)对于MyISAM表,在delete表中所有数据时没有任何风险,随意折腾;
(2)对于InnoDB表,在delete表中所有数据时,是可能有风险的。(delete 完不能重启mysql)
2. MyISAM表
MySQL [bosco]> CREATE TABLE `t7` (
-> `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
-> `name` varchar(20) NOT NULL DEFAULT '',
-> PRIMARY KEY (`id`)
-> ) ENGINE=MyISAM;
Query OK, 0 rows affected (0.05 sec) MySQL [bosco]> insert into t7(name) values('GZ'),('SH'),('BJ'),('SZ'),('HZ');
Query OK, 5 rows affected (0.03 sec)
Records: 5 Duplicates: 0 Warnings: 0 MySQL [bosco]> select * from t7;
+----+------+
| id | name |
+----+------+
| 1 | GZ |
| 2 | SH |
| 3 | BJ |
| 4 | SZ |
| 5 | HZ |
+----+------+
5 rows in set (0.00 sec) MySQL [bosco]> delete from t7;
Query OK, 5 rows affected (0.03 sec) MySQL [bosco]> show create table t7\G
*************************** 1. row ***************************
Table: t7
Create Table: CREATE TABLE `t7` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
1 row in set (0.00 sec) MySQL [bosco]> insert into t7(name) values('NJ');
Query OK, 1 row affected (0.07 sec) MySQL [bosco]> select * from t7;
+----+------+
| id | name |
+----+------+
| 6 | NJ |
+----+------+
1 row in set (0.00 sec) 如果在delete from t2后,重启了mysqld,AUTO_INCREMENT并不会被重置:
MySQL [bosco]> show create table t7\G
*************************** 1. row ***************************
Table: t7
Create Table: CREATE TABLE `t7` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
3. InnoDB表
MySQL [bosco]> show create table t2\G
*************************** 1. row ***************************
Table: t2
Create Table: CREATE TABLE `t2` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec) MySQL [bosco]> insert into t2(name) values('GZ'),('SH'),('BJ'),('SZ'),('HZ');
Query OK, 5 rows affected (0.04 sec)
Records: 5 Duplicates: 0 Warnings: 0 MySQL [bosco1]> select * from t2;
+----+------+
| id | name |
+----+------+
| 1 | GZ |
| 2 | SH |
| 3 | BJ |
| 4 | SZ |
| 5 | HZ |
+----+------+
5 rows in set (0.00 sec) MySQL [bosco]> delete from t2; ## 直接将t2表中的数据全部删除,使用的是delete而非truncate
Query OK, 5 rows affected (0.04 sec) MySQL [bosco]> insert into t2(name) values('NJ'); ## 再次插入数据时,自增id会自动为下一编号
Query OK, 1 row affected (0.02 sec) MySQL [bosco]> select * from t2;
+----+------+
| id | name |
+----+------+
| 6 | NJ |
+----+------+
1 row in set (0.00 sec) 但是,如果在delete from t2后,重启了mysqld,那么情况完全不一样了,这个重启会重置id。
MySQL [bosco]> insert into t2(name) values('FJ'); ## 再次插入数据时,自增id会被重置编号
Query OK, 1 row affected (0.02 sec) MySQL [bosco]> select * from t2;
+----+------+
| id | name |
+----+------+
| 1 | FJ | ## 再次插入新值时,id编号会重新从头开始
+----+------+
1 row in set (0.00 sec)
mysql delete auto_increment列时的注意问题的更多相关文章
- MySQL使用AUTO_INCREMENT列的表注意事项之update自增列篇
1)对于MyISAM表,如果用UPDATE更新自增列,如果列值与已有的值重复,则会出错:如果大于已有的最大值,则会自动更新表的AUTO_INCREMENT,操作是安全的. (2)对于innodb表,u ...
- 解决MySQL在修改列时因为外键依赖出错的问题
因为 favorite_food 中的 person_id 对 person 表中的 person_id 有外键依赖关系,所以在执行 ALTER TABLE person MODIFY person_ ...
- MySQL自增列(AUTO_INCREMENT)相关知识点总结
MySQL的自增列(AUTO_INCREMENT)和其它数据库的自增列对比,有很多特性和不同点(甚至不同存储引擎.不同版本也有一些不同的特性),让人感觉有点稍微复杂.下面我们从一些测试开始,来认识 ...
- 对MySQL DELETE语法的详细解析
以下的文章主要描述的是MySQL DELETE语法的详细解析,首先我们是从单表语法与多表语法的示例开始的,假如你对MySQL DELETE语法的相关内容十分感兴趣的话,你就可以浏览以下的文章对其有个更 ...
- (转)mysql自增列导致主键重复问题分析
mysql自增列导致主键重复问题分析... 原文:http://www.cnblogs.com/cchust/p/3914935.html 前几天开发童鞋反馈一个利用load data infile ...
- 定义/修改列时 NULL
mysql的文档说明: column_definition: col_name type [NOT NULL | NULL] [DEFAULT default_value] [ ...
- mysql中生成列与JSON类型的索引
MySQL中支持生成列,生成列的值是根据列定义中包含的表达式计算的. 一个简单的例子来认识生成列! CREATE TABLE triangle( sidea DOUBLE, sideb DOUBLE, ...
- mysql 约束条件 auto_increment 自动增长 清空表 自动增长情况
清空表情况: mysql> delete from t20; Query OK, rows affected (0.00 sec) mysql> show create table t20 ...
- MySQL DELETE语句和TRUNCATE TABLE语句的区别
MySQL DELETE语句和TRUNCATE TABLE语句的区别 2010-10-08 16:05 佚名 互联网 字号:T | T 在MySQL数据库中,DELETE语句和TRUNCATE TAB ...
随机推荐
- 使用spyder3调试python程序
Ctrl+F5 以Debug模式运行文件 在debug之前记得用%reset 指令清空一下ipython工作空间中的变量,以免影响debug中变量值的查看 无论你是否打断点,都会在第一行语句执行之前中 ...
- Html开发小结
html部分 1.html标签 标签不区分大小写. 如:<!doctype html>与<!DOCTYPE html > <div></div>与< ...
- ccna 闫辉单臂路由 和 acl access control list
ccna 闫辉单臂路由 和 acl access control list 一单臂路由 当前园区网设计很少用到 成本低 小型的.局域网可用 二ACL acc ...
- Shape,expand_dims,slice基本用法
import tensorflow as tf t = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]], [[5, 5, 5], ...
- 浅谈Android反调试 之 PTRACE_TRACEME
反调试原理: 关于Ptrace: http://www.cnblogs.com/tangr206/articles/3094358.html ptrace函数 原型为: #include & ...
- java面试题之BIO、NIO、AIO的应用场景
定义: 1.BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时,服务器就启动一个线程来处理,如果这个连接不处理任何事情会造成不必要的线程开销,可以通过线程池机制改善. 2.NI ...
- elementui table 分页 和 tabel 前加序列号
记录下来备忘 结构如下 Report.vue <template> <div> <home-header></home-header> <div ...
- mkdir(): No such file or directory
mkdir(): No such file or directory php创建目录时提示没有文件或目录, (1)先检查目录权限: (2)细看mkdir()的用法: 定义和用法: mkdir() 函数 ...
- 小程序-引用其他js文件
我也是小白菜,之所以有这个记录是因为我做项目时遇到了这个问题 流程: 1.需要建立一个js文件 content.js function myContent() { console.log(&quo ...
- 重复造轮子之RSA算法(一) 大素数生成
出于无聊, 打算从头实现一遍RSA算法 第一步, 大素数生成 Java的BigInteger里, 有个现成的方法 public static BigInteger probablePrime(int ...