1. 程式人生 > 其它 >mysql儲存引擎:InnoDB

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進行排序後遞增的。