今天学习mysql,做几个表居然做了一个多小时。
设置外键的时候遇到1005错误。
1005 - Can’t create table ‘oschina.#sql-97c_2’ (errno: 150)
然后查了很久才发现两个字段的大小不匹配。名字都叫做sid,一个是UNSIGNED INT(10),另一个是INT(11)。两个字段的类型或者大小必须严格匹配。mysql的错误提示太鸡肋了吧。
梳理一下主键和外键的概念
主键是能确定一条记录的唯一标识,比如身份证号啊,社保号啊,学号啊。就是不能有重复的意思。并且主键除了标记一条记录不要有其他用途。
主键在物理层面上只有两个用途:
1. 惟一地标识一行。
2. 作为一个可以被外键有效引用的对象
外键就是联系另一张表的键,可以保证数据的唯一性。有了外键,当做一些涉及外键字段的增,删,更新操作之后,需要触发相关操作去检查,而不得不消耗资源。外键还会因为需要请求对其他表内部加锁而容易出现死锁情况。一般互联网应用都不推荐使用外键。