如何在MySQL中的现有列中添加非空约束

mym*_*and 150 mysql constraints

我有一个名为"Person"的表名,后面有列名

P_Id(int),
LastName(varchar),
FirstName (varchar).
Run Code Online (Sandbox Code Playgroud)

我忘了给NOT NULLConstraint P_Id.

现在我尝试使用以下查询将NOT NULLConstraint 添加到名为的现有列中P_Id,

1. ALTER TABLE  Person MODIFY  (P_Id NOT  NULL);
2. ALTER TABLE Person ADD CONSTRAINT NOT  NULL NOT NULL (P_Id);
Run Code Online (Sandbox Code Playgroud)

我收到语法错误....

Sha*_*ngh 241

只需使用ALTER TABLE... MODIFY...查询并添加NOT NULL到现有列定义中即可.例如:

ALTER TABLE Person MODIFY P_Id INT(11) NOT NULL;
Run Code Online (Sandbox Code Playgroud)

需要注意的是:在使用查询时,需要再次指定完整列定义MODIFY.例如,如果您的列具有DEFAULT值或列注释,则需要在MODIFY语句中将其与数据类型一起指定NOT NULL,否则它将丢失.防范此类错误的最安全做法是从SHOW CREATE TABLE YourTable查询输出中复制列定义,将其修改为包含NOT NULL约束,然后将其粘贴到ALTER TABLE... MODIFY...查询中.

  • @Positive为什么你写'INT(11)`而不只是'INT`?什么是'11`的影响? (4认同)
  • 11只是一个例子,它设置了P_Id的长度.我不确定是否有必要再次添加它,即使您甚至可能不想更改它. (2认同)
  • @Pacerier和`change`你修改了列的名字 (2认同)

Mar*_*kar 16

试试这个,你会知道改变和修改之间的区别,

ALTER TABLE table_name CHANGE curr_column_name new_column_name new_column_datatype [constrints]

ALTER TABLE table_name MODIFY column_name new_column_datatype [constraints]

  • 您执行MODIFY操作以进行更改但无法进行反向操作.
  • 您可以使用更改特定列的名称和数据类型CHANGE.
  • 您可以使用修改特定的列数据类型MODIFY.您无法使用此语句更改列的名称.

希望,我详细解释了.

  • 您执行MODIFY操作更改但无法反向? (4认同)
  • @WilliamT.Mallard 我遇到了同样的错误。就我而言,这是因为该列的一行中已经包含 NULL 值。将值更改为 NULL 以外的值后,查询成功执行。 (2认同)

Dav*_*mas 8

想补充:

更新后,如

ALTER TABLE table_name modify column_name tinyint(4) NOT NULL;
Run Code Online (Sandbox Code Playgroud)

如果你得到

ERROR 1138 (22004): Invalid use of NULL value
Run Code Online (Sandbox Code Playgroud)

确保首先更新表以在相关列中包含值(因此它不为空)