gpt4 book ai didi

mysql "Default"列值 NULL 在执行 PRIMARY KEY 的 alter table 时被删除

转载 作者:太空宇宙 更新时间:2023-11-04 10:39:15 24 4
gpt4 key购买 nike

我在 Mysql 数据库中创建了一个全新的表。我添加了一个名为“rks”的新字段,默认为 NULL,数据类型为 varchar(20)。

如果我执行 alter table 来修改这个字段,我可以看到默认列中的“NULL”被删除为空白(如果它是主键),但是如果我将它从主键降级,对该变量进行更改,保留状态“NULL”。

请注意:我在使用 alter table 时使用“default null”,如下所示。

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 类型,则执行 alter表删除 NULL。
  2. 如果字段是 bigint 类型,并且是主要的key,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。

最佳答案

我会忽略在具有主键的列中将默认值设置为 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?

关于mysql "Default"列值 NULL 在执行 PRIMARY KEY 的 alter table 时被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35943420/

24 4 0