1、主键:唯一标识一条记录,不能有重复的,不允许为空;用来保证数据完整性;主键只能有一个。
2、外键:表的外键是另一表的主键, 外键可以有重复的, 可以是空值;用来和其他表建立联系用的;一个表可以有多个外键。
3、索引:该字段没有重复值,但可以有一个空值;是提高查询排序的速度;一个表可以有多个唯一索引。
alter table 表名 add constraint 主键名 primary key(字段名1,字段名2,......字段名n);
外键(foreign key)是用于表达两个表数据之间的关系,将表中主键字段添加到另一个表中,再创建两个表之间的约束关系,这些字段就成为第二个表的外键。
外键的作用
合理的数据结构设计,表中的数据一定有一致性约束,使用外键,让数据库去约束数据的一致,不给任何人出错的机会。不用外键会怎样?不用也不会怎么样,如果不用外键,在程序中要写代码进行判断,手工操作数据时也必须处处小心。
外键约束
当对从表进行操作时,数据库会:
向从表插入新记录时,如果外键值在主表中不存在,阻止插入。
修改从表的记录时,如果外键的值在主表中不存在,阻止修改。
当对主表进行修改操作时,数据库会:
主表修改主键值时,旧值在从表里存在便阻止修改。
当对主表进行删除操作时,数据库会(三选一):
a)主表删除行时,其主键值在从表里存在便阻止删除。
b)主表删除行时,连带从表的相关行一起删除。
c)主表删除行时,把从表相关行的外键字段置为null。
创建外键
alter table 从表名
add constraint 外键名 foreign key (从表字段列表)
references 主表名 (主表字段列表)
[on delete cascade|set null];
删除外键
alter table 从表名 drop constraint 外键名;