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


164

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

我收到语法错误...。

Answers:


261

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


4
@Positive为什么你写INT(11)而不是仅仅写INT?的作用是11什么?
苏珊·杜彭(SuzanneDupéron)

2
11只是一个示例,它设置P_Id的长度。我不确定是否有必要再次添加它,即使您可能甚至不想更改它。
杰拉德(Gerard)2013年

2
@Pacerier与change您一起修改列的名称-Javier
P

1
MODIFYOracle也支持@Victor 。PostgreSQL不支持,CHANGE而是提供了一条ALTER [COLUMN]语句。
Deathless先生,2015年

1
自我注意:结构化查询语言不是标准查询语言...
Dmitry

20

尝试一下,您将了解更改和修改之间的区别,

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。您不能使用此语句更改列的名称。

希望我已经详细解释了。


5
您执行MODIFY操作以进行更改,但不能反向吗?
Navrattan Yadav

1
奇怪的是,我在更改/修改我名为null_heart_rate_count的列时遇到错误(MySQL 5.6,Workbench 6.3),错误为#1138,无效使用NULL值。我必须删除并添加该列。
威廉·T·马拉德

@NavrattanYadav我认为他的意思是说重命名,而不是反向
shaahiin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.