如何在MySQL中为现有列添加NOT NULL约束

我有一个名为“ 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);

出现语法错误..

253750 次浏览

只需使用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...查询中。

试试这个,你就知道改变和修改的区别了。

ALTER TABLE table_name CHANGE curr_column_name new_column_name new_column_datatype [constraints]


ALTER TABLE table_name MODIFY column_name new_column_datatype [constraints]
  • 您可以使用CHANGE来更改特定列的名称和数据类型。
  • 可以使用MODIFY来修改特定的列数据类型。不能使用此语句更改列的名称。

希望,我解释得很详细。

我想补充的是:

更新后,如

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

如果你得到

ERROR 1138 (22004): Invalid use of NULL value

确保首先更新表以使相关列中具有值(因此它不是NULL)。