Mariadb 检查引用其他表的约束
我有三张桌子Mariadb 检查引用其他表的约束,mariadb,Mariadb,我有三张桌子 Processor with columns Name and Socket. Motherboard with columns Name and Socket. Build with columns Processor[references Processor(Name)] and Motherboard[references Motherboard(Name)] 我需要确保进入构建的处理器和主板具有相同的插槽。 由于检查约束不能引用其他值,因此我正在寻找替代方案。 我知道您可
Processor with columns Name and Socket.
Motherboard with columns Name and Socket.
Build with columns Processor[references Processor(Name)] and Motherboard[references Motherboard(Name)]
我需要确保进入构建的处理器和主板具有相同的插槽。
由于检查约束不能引用其他值,因此我正在寻找替代方案。
我知道您可以使用UDF或触发器来实现这一点,但我是初学者,希望一些示例代码能够帮助我
谢谢。不需要触发器。可以使用外键约束执行此操作
下面是它的样子:
CREATE TABLE `Processor` (
`name` varchar(20) NOT NULL,
`socket` varchar(20) DEFAULT NULL,
PRIMARY KEY (`name`),
UNIQUE KEY `name` (`name`,`socket`)
);
CREATE TABLE `Motherboard` (
`name` varchar(20) NOT NULL,
`socket` varchar(20) DEFAULT NULL,
PRIMARY KEY (`name`),
UNIQUE KEY `name` (`name`,`socket`)
);
CREATE TABLE `Build` (
`Processor` varchar(20) DEFAULT NULL,
`Motherboard` varchar(20) DEFAULT NULL,
`Socket` varchar(20) DEFAULT NULL,
CONSTRAINT `build_ibfk_1` FOREIGN KEY (`Processor`, `Socket`)
REFERENCES `processor` (`name`, `socket`),
CONSTRAINT `build_ibfk_2` FOREIGN KEY (`Motherboard`, `Socket`)
REFERENCES `Motherboard` (`name`, `socket`)
);
这将强制执行您想要的业务规则。外键要求Build.Socket
引用处理器
和主板
中的插槽。
在Build
中的给定行上只能有一个Build.Socket
值。
因此,两个表中的套接字必须相同。请再次阅读我的问题。我请求帮助使用触发器实现约束。您使用的是什么版本的MySQL?我使用的是phpMyAdmin 4.9.1和MySQL版本10.4.8,这是一个MariaDB版本,而不是MySQL版本。您没有使用MySQL。这将不起作用。套接字不是主键。我有多个处理器和主板与同一个插座。你可以使外键引用任何唯一的键。您可以在两列
Name
和Socket
上创建一个唯一键。这将允许多个处理器具有相同的套接字,但前提是它们具有不同的名称。这就是多列唯一键的工作原理:只有当两列的值与另一行的值相同时,它们才是重复的。@BillKarwin啊,您的意思是复合键如何强制我对构建的约束?内置中添加的处理器和主板必须共享同一个套接字。在处理器表中,名称是唯一的(这是一个键),另外,组合名称+套接字也是唯一的。同样适用于桌面主板。在build表中,您也给出了套接字。这样做,处理器名+插槽被强制执行,主板+插槽也被强制执行