Mysql外键篇
外键作用:保持数据一致性,完整性。外键只能引用外表中的列的值或使用空值。
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中外键可以不是主键运行正常,外键和参考列必须加索引这个道理我很理解,外键和参考列要求是索引这个就有点迷惑了。