表的设计 一个数据库里通常有很多表,但每张表的特点是不一样的。 设计表时需要考虑到几个问题: 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会自动删除在其他表中以删除元素为外键的数据