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

dop*_*ude 5 mysql

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

Qua*_*noi 8

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

通常,这就是CHECK约束.你做的事情

CREATE TABLE
        mytable
        (
        myfield NOT NULL VARCHAR(200),
        CHECK(myfield > '')
        )
Run Code Online (Sandbox Code Playgroud)

但是,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;
Run Code Online (Sandbox Code Playgroud)

BEFORE UPDATE如果您还想禁止更新空白值,请执行相同的操作.


小智 6

MySQL8现在有了值约束,可以让你在不使用触发器的情况下实现值限制

例如:

CREATE TABLE my_table (
    myfield VARCHAR(255) NOT NULL
        CONSTRAINT myfield_not_empty CHECK(
            LENGTH(myfield) > 0 
        )
);
Run Code Online (Sandbox Code Playgroud)

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