主键
主键:
能够通过主键唯一区分出不同的记录,不能使用业务相关的字段作为主键,所以一般把这个字段命名为id
这张表中,如果用name作为主键,就没法存储同名同学,因为主键不能重复。
联合主键:尽量不用
通过多个字段唯一标识记录,两个或更多的字段设置为主键,这种主键称为联合主键。
外键
在students表中,通过class_id的字段,可以把数据与另一张表关联起来,这种列称为外键
外键约束
将class_id作为外键约束,那么就可以保证无法插入无效的数据(如果classes表不存在id=99的记录,students表就无法插入class_id=99的记录)。
外键约束会降低数据库的性能,大部分互联网应用程序为了追求速度,并不设置外键约束,而是仅靠应用程序自身来保证逻辑的正确性。
定义外键约束:
不定义的话,class_id仅仅是一个普通的列,只是它起到了外键的作用
ALTER TABLE students
ADD CONSTRAINT fk_class_id
FOREIGN KEY (class_id)
REFERENCES classes (id);
索引
作用:索引是关系数据库中对某一列或多个列的值进行预排序的数据结构。可以直接定位到符合条件的记录,加快查询速度(对用户和应用程序的使用没有区别,有索引时数据库系统就会自动使用索引来提高效率)。
效率:该列的值越互不相同,那么索引效率越高。主键索引效率最高,因为主键绝对唯一。
唯一索引:通过UNIQUE关键字我们就添加了一个唯一索引,保证某列的值具有唯一性。