我们如何添加一个约束来强制列仅具有正值。
尝试了以下mysql语句,但不起作用
create table test ( test_column integer CONSTRAINT blah > 0);
最佳答案
您可以使用关键字unsigned
来表示整数不允许有“符号”(即 - 它只能是正数):
CREATE TABLE test (
test_column int(11) unsigned
);
您可以阅读有关数字数据类型(有符号和无符号)的更多信息 here .
就防止插入负值的实际约束而言,MySQL 有一个 CHECK
但是,根据文档,可以在 CREATE TABLE 语句中使用的子句:
The CHECK clause is parsed but ignored by all storage engines.
作为引用,以下是您将如何使用它(虽然它执行得绝对好,但它什么也不做 - 正如手册所述):
CREATE TABLE test (
test_column int(11) unsigned CHECK (test_column > 0)
);
更新(完全拒绝负值)
我从您的一些评论中注意到,您希望完全拒绝具有负值的查询,而不是将其设置为 0
(因为进入 unsigned
列的正常交易会做)。一般来说,没有任何约束可以做到这一点(至少据我所知),但是,如果您打开严格模式(使用 STRICT_TRANS_TABLES
),则任何将负值插入无符号列的查询都会失败错误(以及任何其他数据插入错误,例如无效的 enum
值)。
您可以通过在插入命令之前运行以下命令来测试它:
SET @@SESSION.sql_mode = 'STRICT_TRANS_TABLES';
如果它适合您,您可以使用 sql-mode="STRICT_TRANS_TABLES"
更新 MySQL 配置或使用 SET @@GLOBAL.sql_mode = 'STRICT_TRANS_TABLES';
(我不确定 SET 命令是否会影响全局 mysql 配置,所以更新实际的配置文件可能会更好)。
关于mysql - 如何在 MySQL 中向整数列添加正整数约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35149498/