如何在MySQL数据库的表中的字段上添加“非空”约束?

时间:2015-09-01 08:17:32

标签: php mysql database null constraints

我正在使用MySQL数据库服务器**(服务器版本:5.5.40-0ubuntu0.14.04.1-log - (Ubuntu))**。

数据库中有一个标题为'users'的表格。表'users'中有一列标题为'full_name'

以下是对它的约束

Name : full_name
Type : `varchar(255)`
Collation : `latin1_swedish_ci`
Attributes :
Null : No
Default : None
Extra :     

我在这个专栏('full_name')面临的问题是,虽然我添加了一个 NOT NULL,但PHP代码值会在此列中插入约束。

我想避免在任何地方做那件事。那是空的/空白/空格字符/ NULL不应该插入此列。我想从数据库表本身做,而不是在PHP代码中进行修改。

有人可以帮我阻止在此专栏中插入此类值吗?

还有一件事是此表中存在的记录很少,字段'full_name'中包含 NULL 值。我认为在将 NOT NULL 约束添加到列'full_name'之前,这些值已经存在。我的另一个疑问是这些NULL值会影响列吗?

1 个答案:

答案 0 :(得分:2)

您可以添加如下检查约束:

full_name VARCHAR(45) CHECK (full_name <> '')

<强>更新

正如@vhu所指出的那样:

  

解析CHECK(),但作为CREATE语句的一部分被忽略。

因此,您必须在users表的 INSERT 之前添加 TRIGGER

此TRIGGER将在INSERT之前被称为 ,他将检查设置为a的值是否为空。如果是,则a将设置为NULL:

CREATE TRIGGER `test_BINS` BEFORE INSERT ON `test` FOR EACH ROW 
IF new.`a` = '' THEN SET new.`a` = NULL; END IF; END;

test是表格的名称,test_BIN是TRIGGER的名称,a是表test的一列的名称。

注意:此代码由MySQL Workbench生成。