mysql存储引擎:InnoDB
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引。
1.自动增长列
InnoDB 表的自动增长列可以手工插入,但是插入的值如果是空或者 0,则实际插入的将是自动增长后的值。新建表demo
1 CREATE TABLE demo (id smallint not null auto_increment PRIMARY KEY,name varchar(10)) ENGINE = INNODB; 2 insert into demo values (1,"林黛玉"),(0,"贾宝玉"),(null,"薛宝钗"); 3 select * from demo;
+----+--------+
| id | name |
+----+--------+
| 1 | 林黛玉 |
| 2 | 贾宝玉 |
| 3 | 薛宝钗 |
+----+--------+
可以通过alter table table_name auto_increment=n; 强制设置自动增长列的初始值,默认从1开始,但是该强制的默认值是保留在内存中的,如果该值在使用之前数据库重新启动,那么这个强制的默认值就会丢失,就需要在数据库启动以后重新设置。
***注意:n只能大于已有的auto_increment的整数值,小于的值无效.。show table status like 'table_name' 可以看到auto_increment这一列是表现有的值。
1 alter table test AUTO_INCREMENT = 1000; 2 insert into demo values (null,"贾探春"),(0,"贾元春");
+------+--------+
| id | name |
+------+--------+
| 1 | 林黛玉 |
| 2 | 贾宝玉 |
| 3 | 薛宝钗 |
| 1000 | 贾探春 |
| 1001 | 贾元春 |
+------+--------+
也可以使用LAST_INSERT_ID()查询当前线程最后插入记录使用的值。如果一次插入了多条记录,那么返回的是第一条记录使用的自动增长值。(如上所述命令,设置自动增长列为1000,插入了两条数据,则select last_insert_id(); 返回第一条记录使用的自动增长值,即为1000)
1.1.对于InnoDB表,自动增长列必须是索引。如果是组合索引,也必须是组合索引的第一列。对于 MyISAM 表,自动增长列可以是组合索引的其他列,这样插入记录后,自动增长列是按照组合索引的前面几列进行排序后递增的。
1.2 创建一个myisam类型的表auto_demo,自动增长列d1作为组合索引的第二列,对该表插入数据
1 create table auto_demo(d1 smallint not null auto_increment,d2 smallint not null,name varchar(10),index(d2,d1))engine=myisam; 2 insert into auto_demo(d2,name) values(2,'2'),(3,'3'),(4, '4'),(2,'2'), (3,'3'), (4,'4');

通过上面数据:可以发现自动增长列是按照组合索引第一列d2进行排序后递增的。

浙公网安备 33010602011771号