gpt4 book ai didi

mysql - 删除默认约束

转载 作者:行者123 更新时间:2023-11-29 03:42:56 24 4
gpt4 key购买 nike

我有一个 tableA,其中 desc tableA 命令的输出如下:

+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | | |
| city | varchar(50) | YES | | NULL | |
| state | char(2) | YES | | NULL | |
| country | varchar(30) | YES | | NULL | |
| notes | longtext | YES | | NULL | |
| type | varchar(50) | NO | | NULL | |
+---------+-------------+------+-----+---------+----------------+

现在有 3 列带有 NOT NULL 约束:

  1. 编号
  2. 姓名
  3. 输入

对于列 id 和 type,我需要删除默认约束。基本上我想要默认值:无。我不想使用解决方法,例如。将 varchar 的默认值设置为 ''。

NULL、NONE 和 '' 之间的区别从这个讨论中变得更加清楚 Default-values-for-varchar-and-int-mysql-data-types

我尝试使用命令:

alter table tableA alter column type drop default;

查询运行良好,但没有行受到影响。当我运行 describe 命令时,默认值没有显示任何变化。

如果我将默认值设置为 '' 我会遇到不同的问题 - 数据库允许在数据库中输入空字符串。对我来说,这等同于为列的值插入 NULL,我不想允许这样做。

在这种情况下我不能允许空字符串作为数据库中的数据,我需要一些关于如何处理默认值的指导。我想提一下,我计划在代码中进行验证,以检查传入数据是空字符串还是 NULL。但以防万一验证不起作用等,我想确保数据库可以拒绝添加此类数据。

非常感谢任何帮助。

最佳答案

如果该列可以为 null,则 default 或 null 是相同的。所以 Allowed Null,Default null 实际上是无关紧要的,除非在做 say 时

插入(姓名、城市、类型)值('Fred'、DEFAULT、'Caucasian')

Null 不是空字符串。鉴于您在表中允许 null 但在您的应用程序中将其解释为空字符串,您的设计中存在一个恼人的缺陷。

如果你不希望那里有空字符串,通常你会使用一个检查约束,据我所知,它仍然没有在 mysql 中实现。显然,这种缺失通常可以通过插入触发器来解决。因此,您将检查触发器中的值,然后使空字符串插入失败。

PS 它没有解决完整性问题,但是如果您确实想要一种方法在字符串为空时放入空值,那么您就不必区分空字符串和空值。

然后看看 nullif 函数。

关于mysql - 删除默认约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11042362/

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