MySQL约束与设计
DQL
排序查询
语法:order by 排序字段1 排序方式1,排序字段2 排序方式2...... 先按照字段1排序方式,如果第 1 个字段相等,则按第 2 个字段排序,依次类推 升序:ASC; 降序:DESC 不写排序方式,默认升序排列 select * from student order by age desc, math asc;
聚合函数 单独使用,不要跟其他的字段
语法:select 聚合函数 from 表 max( 列名) min( 列名) avg( 列名) count( 列名) sum( 列名) 它是对一列的值进行计算,然后返回一个结果值。聚合函数会忽略空值 NULL。 select count(id) as 总人数 from student
我们发现对于 NULL 的记录不会统计,建议如果统计个数则不要使用有可能为 null 的列,但如果需要把 NULL 也统计进去呢? 解决方案: 1.我们可以利用 IFNULL(列,默认值)函数,如果记录为 NULL,给个默认值,这样统计的数据就不会遗漏 2.选在不包含非空的列进行计算(一般都是主键) select count(ifnull(id,0)) from student;
分组查询
分组查询是指使用 GROUP BY 语句对查询信息进行分组,相同数据作为一组
语法:SELECT 字段 1, 字段 2... FROM 表名 GROUP BY 分组字段 [HAVING 条件]
GROUP BY 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。 分组的目的就是为了统计,一般分组会跟聚合函数一起使用 select sex, avg(math) from student3 group by sex; select 分组字段,聚合函数 from 表名 group by 分组字段;
where和having的区别
where在分组之前进行限定,如果不满足条件则不参与分组,having在分组之后进行限定,如果不满足结果,则不会被查询出来, where 后面不可以使用聚合函数,having 后面可以使用聚合函数 SELECT sex, COUNT(*) FROM student3 WHERE age > 25 GROUP BY sex having COUNT(*) >2
分页查询 limit是一个“方言”
limit语句 LIMIT 是限制的意思,所以 LIMIT 的作用就是限制查询记录的条数
LIMIT offset,length; offset :起始行数,从 0 开始计数,如果省略,默认就是 0 length : 返回的行数
开始的索引=(当前的页码-1)*每页显示的条数,最后一页有多少条显示多少钱
约束
概念:对表中的数据进行限定(实际是对表中的字段进行约束),从而保证数据的正确性 有效性和完整性。约束在创建表的时候添加比较合适。
约束的分类
主键约束:primary key
在创建表的时候给字段添加主键 字段名 字段类型 PRIMARY KEY
在已有表中添加主键 ALTER TABLE 表名 ADD PRIMARY KEY( 字段名);
主键自动增长 AUTO_INCREMENT 表示自动增长( 字段类型必须是整数类型)
非空约束 not null
某一列的值不能为 null
在创建表是添加约束: 列名 类型 not null
在使用的过程中添加/删除约束 :使用修改列的类型的语法 修改列的类型: alter table 表名 modify 列名 新的类型;
修改自增长的默认值起始值 默认地 AUTO_INCREMENT 的开始值是 1,如果希望修改起始值,请使用下列 SQL 语法 创建表时指定起始值:CREATE TABLE 表名( 列名 int primary key AUTO_INCREMENT ) AUTO_INCREMENT=起始值 创建好以后修改起始值:ALTER TABLE 表名 AUTO_INCREMENT= 起始值;
唯一约束 unique
表中某一列不能出现重复的值
语法
字段名 字段类型 UNIQUE
删除唯一约束:alter table 表名 draop index 列名
外键约束: foreign key 让表与表产生关系,从而保证数据的正确性
创建外键 在从表中创建外键约束,故先创建主表,再创建从表
在创建表时创建外键
语法:constraint 外键约束名称 foreign key(从表中的外键字段名) references 主表名(主键字段名)
在使用表时创建外键
语法:alter table 从表 add constraint 外键约束名称 foreign key(从表中的外键字段名) references 主表名(主键字段名)
删除外键
语法:alter table 从表名 drop foreign key 外键名称
外键的级联操作:在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作;
说明:外键的级联操作功能是需要在创建外键约束的同时去添加级联更新和级联删除; 语法: 级联更新:on update cascade 级联删除 : on delete cascade 例如: constraint 外键约束名 foreign key(外键约束的字段名) references 主表名(主键约束名) on update cascade on delete cascade
注意:创建外键约束的主表的字段名和从表的字段名 数据类型必须都是int 类型的 其他类型会报错!
数据库的设计
多表之间的关系
一对一:如人和身份证 分析:一个人只有一个身份证,一个身份证只能对应一个人
实现关系
可以在任意的以方添加唯一外键,指向另一方的主键,
一对多(多对一):最常见最重要的关系,如部门和员工,一个部门有多个员工,一个员工只能对应一个部门 主外键的关系
实现关系
在多的一方建立外键,指向一的一方的主键
多对多的关系: 如学生和课程:一个学生可以选择很多门课程,一个课程可以被很多学生选择
实现关系
多对多关系的实现需要借助第三张表,中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键,同时这两个字段,应该是联合主键的关系
级联操作:在修改或者删除主表的主键时,同时更新或删除副表的外键值,称为级联操作
on update cascade 级联更新,只能时创建表的时候创建级联关系,更新主表的主键,从表中外键列也自动同步更新
on delete cascade 级联删除
数据库设计的范式 (了解)
概念:好的数据库设计对数据的存储性能和后期的程序开发,都会产生重要的影响,建立科学的,规范的数据就需要满足一些规则来优化数据的设计和存储,这些规则就称为范式!共六种范式,我们只学习前三种
第一种范式(1NF):每一列都是不可分割的原子数据项,不能是集合 或者数组等非原子数据项。第一范式每一列不可再拆分,称为原子性。
第二范式(2NF):在满足1NF 基础上,消除非主属性对主码的部分函数依赖,即所有列都完全依赖于主键列。
第三范式(3NF):在2NF基础上,表中每一列直接依赖于主键,不允许存在通过其他列传递依赖主键的关系,
数据库的备份和还原
在服务器进行数据传输、数据存储和数据交换,就有可能产生数据故障。比如发生意外停机或存储介质损坏。 这时,如果没有采取数据备份和数据恢复手段与措施,就会导致数据的丢失,造成的损失是无法弥补与估量的。
备份和还原的语句
备份格式: DOS 下 mysqldump -u 用户名 -p 密码 数据库名称 >保存路径
还原格式:还原的时候需要先登录MySQL 登录数据库 创建数据库 使用数据库 source 文件路径
执行顺序from>where>select >group by>having>order by >limit |
|