Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建mysql表将整数限制为正值_Mysql_Constraints - Fatal编程技术网

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

创建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",

我尝试创建一个带有整数属性的表,该属性应限制为正数。我知道有一个未签名的选项,但那是错误的。因为它允许添加-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)
);

但我仍然可以加-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吗?