表的设计
一个数据库里通常有很多表,但每张表的特点是不一样的。
设计表时需要考虑到几个问题:
1、表的规模:该表的最终的存储规模
2、访问频率:每个表的访问频率不同
3、数据类型:选取适合的数据类型可以节省存储空间、加快传输效率、加快数据备份的速度
主键和索引INDEX
主键Primary Key
主键的作用:快速定位,保证唯一性
设计时需注意两点:
1、每一个表都应设立主键
2、主键字段一般用整数或短字符串
索引Index
为了加快查询的速度,可以建立索引
1、索引里存储字段和行指针
2、索引里按顺序存储
添加索引
自动添加:右键点击表 -> 改变表 -> 索引列 -> 在栏位中选中索引字段 -> 保存
索引类型
在建立索引时,可以额外指定类型
1、普通类型:默认的索引类型
2、唯一索引Unique:索引里的值不允许重复
3、主索引Primary:主键也是一种索引
4、全文索引FulText:为长文本建立的索引
注意:在执行增删改操作时,除了要修改主表,还要同步修改索引,因此索引不应无节制的添加。
表的关联
关联查询
当表student和表exam存在关联性时,可以进行如下查询:
SELECT `name`,`chinese`,`english`,`math`
FROM exam,student
WHERE exam.`id`=studednt.`id`
关联查询时,通常指定表的别名(Alias):
SELECT a.`name`,b.chinese,b.english,b.math
FROM student a,exam b
WHERE a.id=b.id
其中,表student别名a,表student别名b
多表关联查询
在多表关联查询时,有以下几种方式:
1、内连接 INNER JOIN
2、外连接
(1)左外连接LEFT OUTER JOIN
(2)右外连接RIGHT OUTER JOIN
3、全连接、交叉连接、直接连接…
内连接INNER JOIN
示例:
SELECT*
FROM student a INNER JOIN exam b
//ON表示连接条件
ON a.id=b.id
WHERE a.sex=0
内连接等效于WHERE查询,所以上述代码也可以写成如下形式:
SELECT*
FROM student a,exam b
WHERE a.id=b.id AND a.sex=0
添加一个请假记录表leave_event
关联查询:
SELECT a.`name`,b.*
FROM student a INNER JOIN leave_event b
ON a.id=b.`stuId`
其中,INNER JOIN可以简写为JOIN
外连接OUTER JOIN
示例:
SELECT*
FROM student a LEFT OUTER JOIN exam b
ON a.id=b.id
WHERE a.sex=0;
其中的连接方式为LEFT OUT JOIN,即a左b右
注意:
1、通常简写为LEFT JOIN 或RIGHT JOIN
2、以左表为基准表
a LEFT JOIN b:a是基准表(左表)
a RIGHT JOIN b:b是基准表(左表)
3、日常开发还是以内连接为主
外键FOREIGN KEY
外键是一种约束条件,用于维护系统的完整性
例如:
有student表示学生信息
有exam表示学生成绩,以学号字段进行关联
现在在学生表里删除一条学生记录,需要考虑什么?
显然,如果不考虑外部约束、盲目删除student表的数据,会导致整个系统的数据不完整。
级联删除
在外键约束时,设置删除选项(Casecade)
然后在删除表中的一行数据时,MySQL会自动删除在其他表中以删除元素为外键的数据