Mysql外键篇

06. June 2017 DataBase 0

外键作用:保持数据一致性,完整性。外键只能引用外表中的列的值或使用空值。

table2表:

CREATE TABLE `table2` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(45) DEFAULT NULL,
 `age` varchar(45) DEFAULT NULL,
 `score` varchar(45) DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `index2` (`age`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

table1表:

CREATE TABLE `table1` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(45) DEFAULT NULL,
 `age` varchar(45) DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `age_idx` (`age`),
 CONSTRAINT `age` FOREIGN KEY (`age`) REFERENCES `table2` (`age`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

注意:要设置外键的字段必须添加索引,在执行插入时检测外键的值是否存在关联参考指定列中

table1中的age取值必须在table2 age中存在才可插入成功。也就必须先在table2中添加数据。

MySQL要求外键和所参考的列必须添加索引,测试非主键也可以成功。

外键就是在table1 age中插入数据时,检测值是否存在table2 age中,若存在则插入成功,若不存在,则插入失败。

疑问:记录下此刻我的疑问:主键设置最好唯一,最好不适用多个主键,并且是那种无意义的列,很明显是自增ID呢,若表中还有身份证这列可以判断唯一一个人的信息。另外一个工作表table1,两个表通过身份证号码关联,外键肯定是身份证号码,然后参考table1中的身份证号码,既然id是主键,不建议使用多个主键,身份证号码不是主键,为什么外键要建议使用主键呢?反正我在MySQL中外键可以不是主键运行正常,外键和参考列必须加索引这个道理我很理解,外键和参考列要求是索引这个就有点迷惑了。