在MySQL中给外键赋值分为两种情况:
第一种情况是在创建表的时候声明外键约束:
CREATE TABLE `table1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`related_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `related_id_index` (`related_id`),
CONSTRAINT `fk_related_id` FOREIGN KEY (`related_id`) REFERENCES `table2` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
在上述代码中,我们创建了一张名为table1的表,其中关键字CONSTRAINTx声明了外键约束,fk_x则是设置的外键名。这样子,在table1表的related_id外键就会参照table2表的id字段来进行关联了。
第二种情况是在表创建好之后,通过ALTER TABLE语句来给表添加外键约束:
ALTER TABLE `table1`
ADD CONSTRAINT `fk_related_id` FOREIGN KEY (`related_id`) REFERENCES `table2` (`id`);
这里我们通过ALTER TABLE语句给table1表添加了外键约束,同样的`fk_related_id`是设置的外键名字。
无论是在创建表的时候还是之后通过ALTER TABLE语句来添加外键约束,在添加外键约束之后,我们需要给关联字段related_id赋值,如果值在table2表中不存在,则会报错。
给外键赋值,可以直接通过INSERT语句来实现:
INSERT INTO `table1` (`id`, `name`, `related_id`)
VALUES (NULL, 'test', 1);
这里我们给table1表的id和name字段赋值,将related_id字段赋值为1,表示此数据与table2表中id为1的数据关联。当然,如果在table2表中找不到id为1的数据,则会报错。