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进行排序后递增的。

posted @ 2021-11-27 22:00  当时只道是寻常呀  阅读(68)  评论(0)    收藏  举报