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

时间:2011-06-10 10:42:59

标签: mysql constraints

我的表名称为“Person”,其中包含以下列名称

P_Id(int),
LastName(varchar),
FirstName (varchar).

我忘了将NOT NULL约束给P_Id

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

1. ALTER TABLE  Person MODIFY  (P_Id NOT  NULL);
2. ALTER TABLE Person ADD CONSTRAINT NOT  NULL NOT NULL (P_Id);

我收到语法错误....

3 个答案:

答案 0 :(得分:226)

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

ALTER TABLE Person MODIFY P_Id INT(11) NOT NULL;

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

答案 1 :(得分:15)

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

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修改特定的列数据类型。您无法使用此语句更改列的名称。

希望,我详细解释过。

答案 2 :(得分:5)

想补充:

更新后,如

ALTER TABLE table_name modify column_name tinyint(4) NOT NULL;

如果你得到

ERROR 1138 (22004): Invalid use of NULL value

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