2016-03-11 36 views
0

我在Mysql數據庫中創建了一個新的新表。 我添加了一個新字段,名爲「rks」,默認爲空,數據類型爲varchar(20)。mysql「默認」列值NULL在執行PRIMARY KEY的alter table時正在被擦除

如果我執行alter table,修改這個字段,我可以看到默認列中的「NULL」被刪除爲空(萬一它是主鍵),但是如果萬一我降級它從主鍵,對這個變量進行修改,保留狀態「NULL」。

請注意:我使用「default null」,而使用alter table如下。

mysql> alter table FileTable modify column rks varchar(40) default NULL collate latin1_bin; 
Query OK, 0 rows affected (0.01 sec) 
Records: 0 Duplicates: 0 Warnings: 0 

進一步觀察:

  1. 如果字段是主鍵,和varchar類型,操作的方式改變 表中刪除NULL。
  2. 如果字段類型爲bigint,並且主鍵爲 ,則在alter table之後將NULL更改爲0。

我想知道,爲什麼會發生這種變化?

Newly created: 
+-------------------------+--------------+-------------------+------+-----+---------+ 
| Field     | Type   | Collation   | Null | Key | Default | 
+-------------------------+--------------+-------------------+------+-----+---------+ 
| rks      | varchar(20) | latin1_bin  | YES | PRI | NULL | 
+-------------------------+--------------+-------------------+------+-----+---------+ 

After alter table: 
+-------------------------+--------------+-------------------+------+-----+---------+ 
| Field     | Type   | Collation   | Null | Key | Default | 
+-------------------------+--------------+-------------------+------+-----+---------+ 
| rks      | varchar(40) | latin1_bin  | NO | PRI |   | 
+-------------------------+--------------+-------------------+------+-----+---------+ 

請參閱NULL被擦除時,如果該字段是整數類型,這將更改爲0

回答

1

我忽略默認被設置爲NULL與主鍵的列。這並不意味着這是它默認的價值。當列是主鍵的一部分時,它不能爲NULL,表格表中的「Null」列是決定行爲的因素。

mysql> drop table FileTable;create table FileTable(rks varchar(20) default NULL collate latin1_bin, pk int auto_increment, primary key(pk, rks)); 
Query OK, 0 rows affected (0.01 sec) 
Query OK, 0 rows affected (0.00 sec) 

mysql> show columns from FileTable; 
+-------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-------------+------+-----+---------+----------------+ 
| rks | varchar(20) | NO | PRI |   |    | 
| pk | int(11)  | NO | PRI | NULL | auto_increment | 
+-------+-------------+------+-----+---------+----------------+ 

在上表中,我添加了一個組合鍵,並且顯示列在pk列中的默認值爲NULL。這顯然是無稽之談,因爲它也是auto_increment。

我還發現這裏一些細節

Can a primary key default be NULL? Why is it described as such?

+0

感謝您的回答 – kingsmasher1