创建mysql表将整数限制为正值

Chr*_*ris 1 mysql constraints

我尝试创建一个具有 INTEGER 属性的表,该属性应限制为正数。我知道有一个 UNSIGNED 选项,但这样做是错误的。因为它允许添加 -10 作为值。它只会从中获得 10。

是否可以拒绝错误输入?我尝试使用检查

DROP TABLE Produkt;
CREATE TABLE Produkt (
    Bezeichnung VARCHAR(237) PRIMARY KEY,
    ProduktNr INTEGER NOT NULL,
    Produktart VARCHAR(3) DEFAULT "XXX",
    CONSTRAINT onlyPositive CHECK(ProduktNr >= 0)
);
Run Code Online (Sandbox Code Playgroud)

但我仍然可以添加 -10 作为值......我做错了什么?

pet*_*erm 5

1) 在严格的sql_mode 中,如果您将列定义为

ProduktNr INT UNSIGNED NOT NULL,
Run Code Online (Sandbox Code Playgroud)

然后尝试插入一个负值,你会得到一个错误

错误 1264 (22003):第 1 行“ProduktNr”列的值超出范围

这是SQLFiddle演示。取消注释插入语句并单击Build Schema

2) MySQL 仍然缺乏对CHECK约束的支持。CHECK 子句被解析但被所有存储引擎忽略

3)附带说明:不要将VARCHAR(237)列用作PRIMARY KEY,特别是如果您使用的是 InnoDB 引擎(表中的所有二级索引也包括 PK 值)。