MySQL 非空約束位置不同對自增列造成的影響
MySQL版本
select version();
+------------+
| version() |
+------------+
| 5.7.21-log |
+------------+
1 row in set (0.00 sec)
非空約束為null 並在自增列屬性前
- 即使自增列的非空約束定義可以為 null,但實際自增列為not null
create table test_auto_incre(id int null auto_increment,id2 int default null ,key idx_id(id));
show create table test_auto_incre;
CREATE TABLE test_auto_incre
(
id
int(11) NOT NULL AUTO_INCREMENT ,
id2
int(11) DEFAULT NULL,
KEY idx_id
( id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
insert into test_auto_incre(id2) values(12),(2312); select * from test_auto_incre; +----+------+ | id | id2 | +----+------+ | 1 | 12 | | 2 | 2312 | +----+------+ 2 rows in set (0.00 sec)
非空約束為null 並在自增列屬性後
- 自增列定義可以為null,實際自增列也可以為null;自增列失去作用!
create table test_auto_incre2(id int auto_increment null ,id2 int null,key idx_id(id));
Query OK, 0 rows affected (0.02 sec)
非空約束在自增列屬性後,不是MySQL的標準建表語句,但建該表沒有報錯和警告
show create table test_auto_incre2;
CREATE TABLE test_auto_incre2
(
id
int(11) AUTO_INCREMENT ,
id2
int(11) DEFAULT NULL,
KEY idx_id
( id
)
) ENGINE=InnoDB;
插入資料
insert into test_auto_incre2(id2) values(12),(2312);
select * from test_auto_incre2;
+------+------+
| id | id2 |
+------+------+
| NULL | 12 |
| NULL | 2312 |
+------+------+
2 rows in set (0.00 sec)
非空約束為not null 並在自增列屬性後
create table test_auto_incre2(id int auto_increment not null ,id2 int null,key idx_id(id));
show create table test_auto_incre2;
CREATE TABLE test_auto_incre2
(
id
int(11) NOT NULL AUTO_INCREMENT,
id2
int(11) DEFAULT NULL,
KEY idx_id
( id
)
) ENGINE=InnoDB A
插入資料
insert into test_auto_incre2(id2) values(12),(2312); select * from test_auto_incre2; +----+------+ | id | id2 | +----+------+ | 1 | 12 | | 2 | 2312 | +----+------+
MySQL標準建表語法
Linux公社的RSS地址 : https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址: https://www.linuxidc.com/Linux/2019-04/158338.htm