我需要构建一个MySQL表。
我有桌子:武器,盔甲,垃圾。
它们都有主键:idweapon, idarmor, idtrash
。
我需要构建一个包含每个项目的表,因此表格应如下所示:
iddatabase (pk)
idweapon(fk)
idarmor(fk)
idtrash(fk)
如何告诉数据库只能填充后面三个列中的一个?
答案 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;