gpt4 book ai didi

mysql - 默认值在数据库内部如何工作?

转载 作者:搜寻专家 更新时间:2023-10-30 22:07:41 24 4
gpt4 key购买 nike

默认值在数据库内部是如何工作的?

如果我修改一张表:

alter table foo
add column aws_region varchar(32) default 'us-east-1';

它会更新所有行吗?或者如果值不存在,默认值只是一个值查找?

最佳答案

测试这个很容易。如果您将一列添加到具有一行或多行的表中,它会将新列设置为默认列。

mysql> create table foo (id int primary key);

mysql> insert into foo values (123);

mysql> alter table foo
-> add column aws_region varchar(32) default 'us-east-1';

mysql> select * from foo;
+-----+------------+
| id | aws_region |
+-----+------------+
| 123 | us-east-1 |
+-----+------------+

如果更改列的定义,现有行不会更改。每行中的值是在您创建行时设置的,而不是在您查询它时设置的。

mysql> alter table foo 
-> modify column aws_region varchar(32) default 'us-west-2';

mysql> select * from foo;
+-----+------------+
| id | aws_region |
+-----+------------+
| 123 | us-east-1 |
+-----+------------+

默认值更改后插入的新行使用新的默认值。旧行仍然具有旧值。

mysql> insert into foo (id) values (456);

mysql> select * from foo;
+-----+------------+
| id | aws_region |
+-----+------------+
| 123 | us-east-1 |
| 456 | us-west-2 |
+-----+------------+

这意味着在插入行时将默认值复制到行中。一次只有默认值,因此如果该行包含指向默认值的指针,然后我们更改了默认值,则使用默认值的旧行似乎会追溯更改,因为它们现在指向新的默认值。

正如我上面所展示的,他们不会那样做。旧行仍然包含在创建行时有效的默认值。默认值已复制到行中。

关于mysql - 默认值在数据库内部如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44854543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com