gpt4 book ai didi

mysql - 在我的数据库中添加具有 "INSERT INTO"属性和默认值的新列时,如何在我的代码中保留相同的 "nullable"语句?

转载 作者:行者123 更新时间:2023-12-01 00:16:56 25 4
gpt4 key购买 nike

让我们考虑一个包含 2 列的“用户”MySQL 表:

  • 自增id
  • 全名
CREATE TABLE `user` ( `id` INT NOT NULL AUTO_INCREMENT, `fullname` TEXT NOT NULL, PRIMARY KEY (`id`));
INSERT INTO `user` VALUES (NULL, 'John Smith');
INSERT INTO `user` VALUES (NULL, 'James Miller');

我在我的应用程序中添加用户的任何地方,我都有这段代码:

INSERT INTO `user` VALUES (NULL, <name to insert>);

现在,如果我添加一个默认值为 0 的“is_admin” bool 值,如下所示:

ALTER TABLE `user` ADD COLUMN `is_admin` TINYINT NOT NULL DEFAULT 0;

如果我使用 VALUES (NULL, <name to insert>) 运行我的插入查询,我希望 MySQL 理解我希望新用户将 is_admin 设置为 0,但它不起作用:

Error Code: 1136. Column count doesn't match value count at row 1

我认为这是因为“NOT NULL”标志,所以我将“ADD COLUMN”语句从“NOT NULL”更改为“NULL”:

ALTER TABLE `user` ADD COLUMN `is_admin` TINYINT NULL DEFAULT 0;

现在很明显我希望它如何表现。我说了默认值应该是0,我什至没有设置它为强制性的。但我仍然遇到同样的错误。

我只需要更新我所有的 INSERT INTO用户事件:

INSERT INTO `user` VALUES (NULL, <name to insert>, 0);

INSERT INTO `user` VALUES (NULL, <name to insert>, default);

在这个例子中它看起来没什么大不了的,但是在一个有数十条 INSERT 语句的大型应用程序中,这是一个大问题,因为在每个版本中,您必须修改所有已更改表的所有插入语句,如果您错过一个,然后它就不再工作了。

我在 Oracle 工作多年,也许我错了,但我想我记得 Oracle 在未提供时使用默认值。

有什么方法可以对 MySQL 做同样的事情吗?

最佳答案

插入时总是列出列。所以:

INSERT INTO user (id, fullname)
VALUES (NULL, 'John Smith');

反过来,这又是矫枉过正。只是做:

INSERT INTO user (fullname)
VALUES ('John Smith');

这会将 is_admin(以及任何其他列)设置为其默认值。

关于mysql - 在我的数据库中添加具有 "INSERT INTO"属性和默认值的新列时,如何在我的代码中保留相同的 "nullable"语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57823641/

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