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

时间:2013-12-13 09:32:41

标签: mysql constraints

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

是否有可能拒绝错误的条目?我尝试使用CHECK

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)
);

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

2 个答案:

答案 0 :(得分:4)

1)如果您将列定义为

,则严格按sql_mode
ProduktNr INT UNSIGNED NOT NULL,

然后尝试插入负值,您将收到错误

  

ERROR 1264(22003):第1行的'ProduktNr'列超出范围值

这是 SQLFiddle 演示。 取消注释插入语句,然后点击Build Schema

2)MySQL仍然缺乏对CHECK约束的支持。 The CHECK clause is parsed but ignored by all storage engines

3)旁注:不要将VARCHAR(237)列用作PRIMARY KEY,特别是如果您使用的是InnoDB引擎(表中的所有辅助索引也包含PK值)。

答案 1 :(得分:0)

我相信你可以在不命名约束的情况下添加支票。这似乎对我有用:

CREATE TABLE Produkt (
    Bezeichnung VARCHAR(237),
    ProduktNr INTEGER NOT NULL,
    Produktart VARCHAR(3) DEFAULT "XXX",
    PRIMARY KEY (Bezeichnung),
    CHECK(ProduktNr >= 0)
);

我还移动了主键的声明。我不是100%肯定你可以在一个领域同时宣布一个关键,但我确实放了我所知道的。