如何避免在两个不同的表中有两个具有相同名称的字段取相同的值?
例如,我有表的客户:如何避免在两个不同的表中具有相同名称的两个字段在sql中取相同的值?
cust_id telephone country
1 03458902 UK
2 05868915 DE
而在另一方面,我有表卖家:
seller_id telephone country
1 07854264 GR
2 03458902 ES
在这个例子中,该电话号码是唯一的,所以应该不会与卖家和顾客是同一电话。 应该有插入命令的警告:
insert into seller values(2,'03458902','ES')
我知道应该有类似如下:
create trigger .... before insert on seller
但我不是很熟悉的名词。
我在MySQL中找到了一个例子。但是我不知道如何将它从MySQL代码更改SQL代码:
DROP TRIGGER IF EXISTS `unique_telephone_seller`;
DELIMITER //
CREATE TRIGGER `unique_telephone_seller` BEFORE INSERT ON `seller`
FOR EACH ROW BEGIN
DECLARE c INT;
SELECT COUNT(*) INTO c FROM customer WHERE telephone = NEW.telephone;
IF (c > 0) THEN
-- abort insert, because foo.username should be NOT NUL
SET NEW.telephone = NUL;
END IF;
END
后来编辑:
因为每个人都在怀疑我的问题,让我解释一下为什么我有2个表。 我必须建立一个电信数据库。客户可以预付和后付费的SIM卡。因此,我有一个客户名单(ID,姓名,地址等),一张预付费SIM卡(client_id,phone_no等)以及一张用于后付费SIM卡((client_id,phone_no等))的表格。
有两种类型的SIM卡,或者是同一类型的倍数,这就是为什么我将SIM卡分成2张表格(SIM卡有其他参数取决于类型)
因此,在插入表格之前不要有重复的phone_no要验证该号码是否在其他表
问候//克里斯蒂娜
我觉得你的数据模型有问题。为什么卖家不能成为客户? –
这只是一个例子。当然,卖家可以成为客户。但是,与客户和卖家解释它更简单。 – Cristina
同意@GordonLinoff。如果你的电话号码或其他什么都是唯一的,那么这是你的主键,不应该在两个表中。应该有一个表的电话号码和其他位(客户或卖家ID和国家)挂在那。 – LoztInSpace