创建mysql表将整数限制为正值
我尝试创建一个带有整数属性的表,该属性应限制为正数。我知道有一个未签名的选项,但那是错误的。因为它允许添加-10作为一个值。这只会使它变成10 是否有可能拒绝错误的输入?我试着用支票创建mysql表将整数限制为正值,mysql,constraints,Mysql,Constraints,我尝试创建一个带有整数属性的表,该属性应限制为正数。我知道有一个未签名的选项,但那是错误的。因为它允许添加-10作为一个值。这只会使它变成10 是否有可能拒绝错误的输入?我试着用支票 DROP TABLE Produkt; CREATE TABLE Produkt ( Bezeichnung VARCHAR(237) PRIMARY KEY, ProduktNr INTEGER NOT NULL, Produktart VARCHAR(3) DEFAULT "XXX",
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作为一个值。。。我做错了什么?我相信您可以只添加支票而不命名约束。这似乎对我有用:
CREATE TABLE Produkt (
Bezeichnung VARCHAR(237),
ProduktNr INTEGER NOT NULL,
Produktart VARCHAR(3) DEFAULT "XXX",
PRIMARY KEY (Bezeichnung),
CHECK(ProduktNr >= 0)
);
我还移动了主键的声明。我不能100%确定您是否可以在声明字段的同时声明一个键,但我确实输入了我知道的内容。我相信您可以添加检查而不命名约束。这似乎对我有用:
CREATE TABLE Produkt (
Bezeichnung VARCHAR(237),
ProduktNr INTEGER NOT NULL,
Produktart VARCHAR(3) DEFAULT "XXX",
PRIMARY KEY (Bezeichnung),
CHECK(ProduktNr >= 0)
);
我还移动了主键的声明。我不能100%确定您是否可以在声明字段的同时声明一个键,但我确实将我所知道的内容放入了一个严格的定义中。1)如果您将列定义为
ProduktNr INT UNSIGNED NOT NULL,
然后尝试插入一个负值,您将得到一个错误
错误1264(22003):第1行“ProduktNr”列的值超出范围
这里是演示。取消对insert语句的注释,然后单击buildschema
2) MySQL仍然缺乏对CHECK
约束的支持
3) 另请注意:如果您将列定义为
ProduktNr INT UNSIGNED NOT NULL,
然后尝试插入一个负值,您将得到一个错误
错误1264(22003):第1行“ProduktNr”列的值超出范围
这里是演示。取消对insert语句的注释,然后单击buildschema
2) MySQL仍然缺乏对CHECK
约束的支持
3) 另请注意:不要将
VARCHAR(237)
列用作主键
,尤其是在使用InnoDB引擎的情况下(表中的所有辅助索引也包括PK值).检查此答案以了解有符号和无符号。无符号的答案不能包含负数。无符号的答案不能包含负数,但它不会阻止您添加负数。。。它们将被转换为正数。请检查此答案以了解有符号和无符号。无符号的不能包含负数。无符号的不能包含负数,但它不会阻止您添加负数。。。它们将被转换为阳性。嗨。如果您以后想更改命名约束,命名约束只会有助于跟踪。没有别的了。系统仍然无法阻止您添加负数。再见。如果您以后想更改命名约束,命名约束只会有助于跟踪。没有别的了。系统仍然无法阻止您添加负数。看看你到底为什么要实施一个功能检查,然后忽略它D感谢sql_模式。这正是我想要的。我可以使用unsigned-on-double数据类型吗?你到底为什么要执行功能检查,然后忽略它呢D感谢sql_模式。这正是我想要的。我可以在双精度数据类型上使用unsigned吗?