mysql - 如何在 MySQL 中向整数列添加正整数约束?

标签 mysql constraints

我们如何添加一个约束来强制列仅具有正值。

尝试了以下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/

相关文章:

mysql - 将一行作为一列添加到现有列

mysql - Linux bash MySQL 载入文件

ios - 自动调整 UITableView 的 header

MySQL查询获取不正确的数据

python - 如何使用 pymysql 作为驱动程序配置 Django?

php - 显示最后 4 个表条目 mysql php

r - 获取非负最小二乘 (nnls) 拟合系数的 p 值或置信区间

sql - 防止日期范围重叠的表级约束

mysql - 无法在mysql中添加约束

甲骨文10gr2 : enforce dates entered are between 9am and 5pm?