2013-09-29 214 views
2

我有一个名为NumberInStock的列。但是,在数据库中,我想限制可以在1到100之间输入到此列中的值。我将在该列上使用哪些约束条件,并且会是SQL查询的正确语法?我走到这一步是:列的SQL约束条件

ALTER TABLE Inventory 
ALTER COLUMN NumberInStock 

现在应该做些什么之后摆放的约束,我会用什么约束

我使用MySQL,有一个1999年的ANSI/ISO标准。

+0

你必须告诉我们你正在使用哪个DBMS。 –

+0

刚刚添加什么DBMS我使用的职位 – Domecraft

+1

MySQL不**支持检查约束。即使它会接受来自接受问题的SQL,它会默默**忽略它! –

回答

3

通常这类型的问题,应使用CHECK约束如下 -

ALTER TABLE Inventory ADD CONSTRAINT chk1 CHECK(NumberInStock BETWEEN 1 AND 100); 

解决这本来在已经完成ORACLEMySQL的BUG reported有关检查约束的执行。

因此ü必须实现两个触发器即,一个用于INSERT,另一个用于该表UPDATE

+0

非常感谢!我知道MySQL很奇怪,但我意识到这是因为我正在使用针对Oracle的查询,而我从来没有意识到MySQL的语法会有所不同。 – Domecraft

+0

您可以简单地将MySQL看作是具有减少的ORACLE功能的DBMS。毕竟它在许多企业应用程序中被广泛使用,并且ORACLE和MySQL都来自ORACLE公司。 –

0

使用检查约束。

ALTER TABLE <TABLE NAME> 
ADD CONSTRAINT <CONSTRAINT NAME> CHECK(<PREDICATE> OR/AND/NOT <PREDICATE> ...) 
+0

谢谢你的回答。我试图在网上查找它,但我无法找到任何有关它。 – Domecraft

+2

在MySQL中,为解析语法正确性而解析了“CHECK”约束,然后**忽略**。不会检查价值! –