在MySQL上只填充一列

时间:2017-09-16 23:14:39

标签: mysql vb.net triggers

我需要构建一个MySQL表。 我有桌子:武器,盔甲,垃圾。 它们都有主键:idweapon, idarmor, idtrash

我需要构建一个包含每个项目的表,因此表格应如下所示:

iddatabase (pk) 
idweapon(fk)
idarmor(fk)
idtrash(fk)

如何告诉数据库只能填充后面三个列中的一个?

2 个答案:

答案 0 :(得分:2)

假设您为每个密钥使用整数(它们都是相同的类型),请尝试这样的模式:

iddatabase(pk)
iditem
itemtype

答案 1 :(得分:1)

"如何告诉数据库只能填充后面三个列中的一个?"对我来说,你只想要三列中的一列能够保存一个值而另外两列必须是NULL。

如果是这样,触发器可以实现此目的:

DELIMITER //
CREATE TRIGGER myTrigger
BEFORE INSERT ON your_table
FOR EACH ROW
BEGIN

    IF  NOT((NEW.idweapon IS NOT NULL AND NEW.idarmor IS NULL AND NEW.idtrash IS NULL) OR
           (NEW.idarmor IS NOT NULL AND NEW.idweapon IS NULL AND NEW.idtrash IS NULL) OR
           (NEW.idtrash IS NOT NULL AND NEW.idweapon IS NULL AND NEW.idarmor IS NULL)) THEN
               SIGNAL SQLSTATE '45000'   
               SET MESSAGE_TEXT = 'Only one column should have a value';
    END IF;

END;