最近考试月,备考压力大,不能日更
主键:同一个表中用于区别其他记录的字段
外键:将多个表连接到一起的字段,实现方式为定义外键约束
ALTER TABLE 语句用于在已有的表中添加、删除或修改列
ALTER TABLE students
ADD CONSTRAINT fk_class_id
FOREIGN KEY (class_id)
REFERENCES classes (id);
其中外键约束fk_class_id可以任意,FOREIGN KEY(class_id)指定class_id为外键REFERENCES classes (id)指定该外键将关联到classes表的id列(即classes表的主键)
定义外键约束可以保证无法插入无效数据,但是会降低性能,所以大部分交互程序中不会设置外键约束,而是靠程序自身逻辑进行剔除(有漏洞可挖)所以在此情况下,class_id仅是一个普通的列,只是起到了外键的作用
若删除外键约束也是通过
ALTER TABLE students
DROP FOREIGN KEY fk_class_id;
并不是删除外键,而是类似解绑,如果要删除外键这一列,要用到 DROP COLUMN ...
多对多的关系是多个一对多靠中间表进行关联
索引:
将数据库内某一列或者多个列的值进行预排序的数据结构,类似图书馆查书,先查表,再查列,再查值
对某一列创建索引
ALTER TABLE students
ADD INDEX idx_score (score);//创建一个名为idx_score,使用列score的索引,索引名称是任意的。
如果索引有多列可以在括号中依次写上
ALTER TABLE students
ADD INDEX idx_name_score (name, score);
索引的效率取决于索引列的值是否散列,如果该列的值如果越互不相同,则索引效率越高,若对于一个列大量值相同情况,则对该列创建索引就没有太多意义
可以对一个表创建多个索引,索引的有点是提高了查询效率,
缺点是在插入,更新和删除记录时,要同时修改索引,所以,索引越多,插入,更新和删除记录的速度就越慢,例如图书馆查书,如果分得过于细致,也不利于简化查询
对于主键,关系书库会自动对其创建主键索引,用主键索引的效率最高,因为主键会保证绝对唯一
设计关系数据表时,某些唯一的列因为具有业务含义(例如身份证),不宜作为主键,但是因为业务要求必须有唯一约束时,可以添加唯一索引
例
ALTER TABLE students
ADD UNIQUE INDEX uni_name (name);//通过UNIQUE关键字添加了唯一索引
也可以对某一列添加一个唯一约束而不创建唯一索引
ALTER TABLE students
ADD CONSTRAINT uni_name UNIQUE (name);//name列无索引,但是具有唯一性保证
索引对于用户与应用而言在使用中没有太大区别,但是在数据结构上可以优化查询效率