我假设你不希望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永远不会为空
| 归档时间: |
|
| 查看次数: |
6578 次 |
| 最近记录: |