Mysql列约束为"不为空" /"必需"

时间:2014-06-26 07:05:27

标签: mysql

我们可以将mysql中的列指定为“not empty”/“required”。要求是确保在任何记录插入时字段永远不会为空。

4 个答案:

答案 0 :(得分:7)

我假设您不希望在表格中允许空白(空字符串,而不是NULL)值。

通常,这是CHECK约束的内容。你做了像

这样的事情
CREATE TABLE
        mytable
        (
        myfield NOT NULL VARCHAR(200),
        CHECK(myfield > '')
        )

但是,MySQL解析约束但不强制执行约束。您仍然可以插入空值。

要解决此问题,请创建BEFORE INSERT触发器并在尝试插入空值时发出信号:

CREATE TRIGGER
        tr_mytable_bi
BEFORE INSERT
ON      mytable
FOR EACH ROW
BEGIN
        IF NEW.myfield = '' THEN
                SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = 'Blank value on mytable.myfield';
        END IF;
END;

如果您想禁止更新空白值,请在BEFORE UPDATE上执行相同操作。

答案 1 :(得分:3)

使用NOT NULL

它会使输入必需 但是一个非空的字段你需要明确的验证脚本。

示例:

create table example(
  login_name varchar(16) not null
  pass_word varchar(32) not null
);

请参阅Wiki on Null (SQL)

答案 2 :(得分:2)

MySQL8 现在有值约束,允许你在不使用触发器的情况下实现值限制

例如:

CREATE TABLE my_table (
    myfield VARCHAR(255) NOT NULL
        CONSTRAINT myfield_not_empty CHECK(
            LENGTH(myfield) > 0 
        )
);

将确保 myfield 中的值永远不会为空

答案 3 :(得分:-1)

您可以将列定义为NOT NULL,由@Ravinder

回答

除此之外,您还可以为列设置默认值。如果我们以前面的答案为例,我们可以按如下方式进行:

create table example( login_name varchar(16) = null pass_word varchar(32) = null );

如果没有收到这些列的值,则默认情况下将插入NULL。