2011-06-10 95 views
101

我已经表的名称叫做“人”与下面的列名如何NOT NULL约束添加到现有列在MySQL5.1

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); 

我得到语法错误....

回答

164

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

+0

@ShaktiSingh'modify'列和'change'列有什么区别? – Pacerier 2012-07-06 08:57:46

+4

@你为什么写“INT(11)”而不只是“INT”? '11'的作用是什么? – 2013-05-13 11:40:58

+0

-1没有解释,其中11来自 – Celeritas 2013-07-13 00:31:39

10

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

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

您执行修改操作来更改,但反向是不可能的? – navy 2016-03-31 10:28:17

+0

奇怪的是,我得到一个错误(MySQL 5.6,Workbench 6.3)改变/修改列名为null_heart_rate_count,错误是#1138,无效的NULL值使用。我不得不放弃并添加列。 – 2017-08-11 17:03:24