【Mysql 學習】自動增長列

楊奇龍發表於2011-01-05

--對於innodb表,自動增長列必須是索引。如果是組合索引,也必須是前導列。
mysql> create table innodb_auto
    -> ( id1 int not null auto_increment,
    -> id2 int not null,
    -> val varchar(10),
    -> index(id2,id1)
    -> ) engine=innodb;
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
--但是對於myisam表,自動增長列可以是組合索引的其他列。這樣插入記錄後,自動增長列是按照組合索引的前面幾列進行排序後遞增的。如下實驗:
--建立一個myisam表
mysql> create table myisam_auto
    -> ( id1 int not null auto_increment,
    -> id2 int not null,
    -> val varchar(10),
    -> index(id2,id1)
    -> ) engine=myisam;
Query OK, 0 rows affected (0.11 sec)

mysql> insert into myisam_auto(id2,val) values(2,'2'),(3,'3'),(4,'4'),(5,'5'),(2,'2'),(3,'3'),(4,'4');
Query OK, 7 rows affected (0.00 sec)
Records: 7  Duplicates: 0  Warnings: 0

mysql> select * from myisam_auto;
+-----+-----+------+
| id1 | id2 | val  |
+-----+-----+------+
|   1 |   2 | 2    |
|   1 |   3 | 3    |
|   1 |   4 | 4    |
|   1 |   5 | 5    |
|   2 |   2 | 2    |
|   2 |   3 | 3    |
|   2 |   4 | 4    |
+-----+-----+------+
7 rows in set (0.00 sec)

mysql> insert into myisam_auto(id2,val) values(3,'3'),(4,'4');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from myisam_auto;
+-----+-----+------+
| id1 | id2 | val  |
+-----+-----+------+
|   1 |   2 | 2    |
|   1 |   3 | 3    |
|   1 |   4 | 4    |
|   1 |   5 | 5    |
|   2 |   2 | 2    |
|   2 |   3 | 3    |
|   2 |   4 | 4    |
|   3 |   3 | 3    |
|   3 |   4 | 4    |
+-----+-----+------+
9 rows in set (0.00 sec)
由以上實驗可以看出對於組合索引 id1,id2 插入一些資料,自動組合列是根據組合索引的第一列d2 進行排序後遞增的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-683336/,如需轉載,請註明出處,否則將追究法律責任。

相關文章