【发布时间】:2014-06-26 07:05:27
【问题描述】:
我们能否在 mysql 中指定一个列为“非空”/“必需”。要求是确保该字段在任何记录插入时都不会保持空白。
【问题讨论】:
-
请使用
NOT NULL并参考dev.mysql.com/doc/refman/5.5/en/data-type-defaults.html
标签: mysql
我们能否在 mysql 中指定一个列为“非空”/“必需”。要求是确保该字段在任何记录插入时都不会保持空白。
【问题讨论】:
NOT NULL并参考dev.mysql.com/doc/refman/5.5/en/data-type-defaults.html
标签: mysql
我假设您也不希望表格中允许出现空白(空字符串,而不是 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 上执行相同操作。
【讨论】:
MySQL8现在有了值约束,可以让你在不使用触发器的情况下实现值约束
例如:
CREATE TABLE my_table (
myfield VARCHAR(255) NOT NULL
CONSTRAINT myfield_not_empty CHECK(
LENGTH(myfield) > 0
)
);
将确保myfield 中的值永远不会为空
【讨论】:
使用NOT NULL。
它使输入成为必需。
但是一个不为空的字段你需要明确的验证脚本。
例子:
create table example(
login_name varchar(16) not null
pass_word varchar(32) not null
);
【讨论】:
您可以按照@Ravinder 的回答将列定义为 NOT NULL
除此之外,您还可以为列设置默认值。如果我们以前面的答案为例,我们可以这样做:
create table example(
login_name varchar(16) = null
pass_word varchar(32) = null
);
如果这些列没有收到任何值,则默认插入 NULL。
【讨论】:
create table 声明。 = NULL 应该做什么?