【问题标题】:MySql Constraint to have particular fields value greater than zero [duplicate]MySql约束具有大于零的特定字段值[重复]
【发布时间】:2011-08-11 11:45:59
【问题描述】:

我有以下 MySql 语法来创建一个带有约束的表来检查 P_Id 列的值是否大于零,但它仍然允许我添加小于 0 的值,例如 -1、-2 等。

CREATE TABLE Persons(
    P_Id int NOT NULL ,
    LastName varchar( 255 ) NOT NULL ,
    FirstName varchar( 255 ) ,
    Address varchar( 255 ) ,
    City varchar( 255 ) ,
    CHECK (
        P_Id >0
    )
)

我在上面的结构中有什么做错了 P_Id > 0 的价值吗??

【问题讨论】:

  • P_Id 应该是主键吗?如果是这样,您最好让 MySQL 使用 PRIMARY KEY (P_Id)AUTO_INCREMENT 作为 P_Id 上的选项来处理它。
  • 不,P_Id 不应该是主键。
  • UNSIGNED INT 对你有用吗?
  • 是的,UNSIGNED INT 有效,但我想使用约束

标签: mysql check-constraints


【解决方案1】:

检查约束在 mysql 中不起作用。你必须采取一些技巧来模仿它们。 看看这篇文章

http://forge.mysql.com/wiki/Triggers#Emulating_Check_Constraints

【讨论】:

  • 链接现在好像失效了。
【解决方案2】:

你可以添加一个派生的

tinyint NOT NULL

列被调用

id_check

用(例如)公式

(IF(id<1,NULL,1))

(许多其他变体可行)

请注意,列名不区分大小写,因此最好小写。

【讨论】:

  • 我现在更喜欢这样:`CHECK_id` tinyint unsigned NOT NULL AS (IF(id&gt;0,1,-1)),因为这会导致更清晰的错误消息。
猜你喜欢
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
  • 2011-01-31
  • 2018-05-09
  • 2017-07-17
  • 2023-03-27
相关资源
最近更新 更多