【发布时间】:2020-02-28 09:42:36
【问题描述】:
我的目标是防止在“地址”与“is_principal”具有相同“account_id”的情况下发生 INSERT(我只需要一个帐户的 is_principal 地址)。
有没有办法使用 UNIQUE 和 CHECK 创建 SQL 约束?
我试试这个:
ALTER TABLE address ADD CONSTRAINT fk_account_adresses2_idx UNIQUE(account_id, CHECK (is_principal >= 1));
错误:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CHECK (is_principal >= 1))' at line 1 (SQL: ALTER TABLE address ADD CONSTRAINT fk_compte_adresses2_idx UNIQUE(account_id, CHECK (is_principal >= 1));)
谢谢。
编辑:
插入应该工作的例子:
insert into `address` (`address`, `account_id`, `is_principal`) values (address 1, 1, 1);
insert into `address` (`address`, `account_id`, `is_principal`) values (address 2, 1, 0);
insert into `address` (`address`, `account_id`, `is_principal`) values (address 3, 1, 0);
插入应该失败的例子:
insert into `address` (`address`, `account_id`, `is_principal`) values (address 1, 1, 1);
insert into `address` (`address`, `account_id`, `is_principal`) values (address 2, 1, 1);
【问题讨论】:
-
我猜你需要单独的 UNIQUE 和 CHECK 约束。
-
我只想要一个帐户的 is_principal 地址 您是否希望允许任意数量的具有相同
account_id和is_principal的记录被视为 FALSE(NULL,零,空字符串)并且只有一个is_principal被视为 TRUE(非空字符串或非零数字)? -
没错@Akina
标签: mysql constraints unique ddl