- mysql约束与设计
DDL 操作数据库和表 drop alter create
DML 增删改数据库表的记录 insert update delete
DQL 查询表中记录 select
DCL 管理用户与授权(grant操作)
查询
查询表中所有行与列的数据
select * from 表名
查询指定列的数据
select 列名1,列名2,列名3,...from 表名
查询时指定列的别名
使用关键字as 好处:显示的时候指定新的名字,并不修改表的结构,方便多次查询
对指定的列进行别名操作:select 列名1 as 新名,列名2 as 新名,列名3 as 新名 ...from表名
对列和表同时进行别名草最:select 列名1 as 新名,列名2 as 新名,列名3 as 新名 ...from表名 as 新表名
select
s.age = 年龄
s.name = 姓名
from
students as s
关键字as类可以省略
去除重复查询
使用关键字:distinct 去掉重复记录
语法格式:select distinct 字段名 from 表名;
例如:
查询本班同学来自哪个地方
select distinct address from students;
查询的结果值可以参与数据运算
注意:能够参与数学运算的前提列的数据结构是Number
条件查询
查询的时候,有时候只想获取符合条件的结果值,并不是回去表中的所有记录
语法: select 字段列表 from 表名 where 条件表达式
结果值:符合条件记录的记录就会被返回,如果条件不符合,就不返回 (过滤)
运算符:
>、<、 >=、<= 、!=、 = <>(不等于)。,,没有' ==' | 在sql中,不等于有两种表示方法 |
---|---|
between...and | 表示具体的区间范围 [ ] |
in(具体范围) | 里面放的是一个个数值,如果多个,逗号隔开 |
like | 模糊查询,根据关键字 |
is nall | 查询某一列为null的值,注意在sql不能这样表达 |
is not null | 查询某列不为null的值 |
逻辑运算符
与或非
&& 、 ---> and
|| 、 --->or
!
在sql中建议使用单词来表示逻辑运算 and or
在进行模糊查询的时候(like),通配符有两种表示方式:% 和 _
% 匹配任意多个字符
_匹配单个字符
两者都需要注意书写的位置, 我们一般使用%作为通配符
排序
单列排序
通过order by语句来实现排序,只是将查询出来的结果值进行排序,并不影响查询的结果,不进行条件过滤,影响的是显示的方式
升序 asc
降序 desc
单列排序:根据表中的某个字段、某列进行排序
如:
-- 对查询出来的同学根据历史成绩降序排序
select * from student as s order by s.history desc;
select 字段列表 表名 where 条件 order by 字段 desc/asc;
组合排序
同时对表中的多个字段进行排序,如果前面的字段值相同,再根据后面的字段再次排序
select 字段列表 from 表名 where 条件列表 order by 字段1 desc/asc,字段名2 desc/asc;
聚合函数
求一个最大值 max
求一个最小值 min
求平均数 avg
求总和 sum
统计查询结果记录数 count
使用count统计记录数的时候,如果count中填写的是表中的某个字段,如果某个条件中该字段为null,则该记录会被过滤掉
ifnull(表达式1,表达式2)如果前面字段为null,后面的表达式2可以替换掉前面字段位null的表达式
分组查询 group by
select
字段列表
from
表名列表
where
分组之前的条件
group by
分组字段
having
分组之后的条件
limit
分页限定条件
概念 :使用group by 对查询的结果信息进行分组,相同的数据分成一组
例如:
将查询出来的结果内容,再按照其他条件进行分组
having 和where的区别
where语句:将查询的结果分组前符合条件返回数据,不符合条件的过滤掉,即先过滤,where后不可以使用聚合函数(先过滤再分组)
having语句:在分组之后过滤数据,即后分组,having后可以使用聚合函数(先分组再过滤)
分页查询
使用关键字limit (mysql中的方言操作)
作用:对查询的结果值进行分页展示,每次显示多少记录
语法:limit 分页限定条件
分页限定条件 --->起始值 展示的记录数 limit offset,length
备注:
>如果查询从第一条开始,起始值可以省略,如果查询最后几条,有几条显示几条,不会报分页错误。
数据库的备份与还原
- 图形化界面工具 Navicat为例
1.备份 转储sql文件 --->结构和数据--->存储到磁盘中
2.还原 创建同名数据库 运行sql文件导入数据 刷新后还原成功
-
Dos指令操作
1.备份 :mysqldump -u用户名 -p密码 数据库名 >存储位置
2.还原:登陆并创建同名数据库---> use 该数据库名--->source 跟备份路径
数据库表的约束
主键约束
唯一约束
非空约束
外键约束
默认约束
对表中的数据进行限定,保证数据的有效性、完整性和正确性。一旦添加了约束,不正确的数据将无法正确添加,所以约束一般在创建表设定字段的时候添加
主键约束
主键:一般是用来唯一标识数据库表中的某一条记录,不能为空
通常情况下 ,会给表添加一个id字段,用作唯一标识,设置为主键,主键一般是提供给数据库操作使用的(查询、修改、删除等),主键不能重复不能为空。
比如:一个人的身份证号、手机号,学生学号,员工工号
语法:使用关键字 primary key
-- 非法数据插入
INSERT INTO USER VALUES(6,'0007','656656','Alfred',110,'男',22);-- 无法插入
INSERT INTO USER VALUES(null,'0007','656656','Alfred',110,'男',22);-- 无法插入
INSERT INTO USER VALUES(7,'0007','656656','Alfred',110,'男',22);
-- 删除主键
alert TABLE USER DROP PRIMARY KEY; -- 删除主键
alert TABLE USER add PRIMARY KEY(id) -- 添加主键
主键自增
如果希望在添加表记录时,不设定表中主键值,系统会自动给主键添加自增值
语法: auto_incremment 表示主键自增
id int PRIMARY KEY auto_increment;
修改自增起始值 alter table user auto increment = 起始值;
唯一约束
字段唯一、不允许重复 ,
关键字 :unique
语法 :字段名 字段数据类型 unique
INSERT INTO role VALUES(NULL,'cto'); -- 可以插入 唯一
INSERT INTO role VALUES(NULL,'cto'); -- 不能插入 违反唯一性
备注:如果插入的是null,表明是没有数据的,不存在数据重复问题,可以重复插入
非空约束
记录中的字段不能为null
语法:字段名 字段类型 not null
默认约束
当没有给该字段赋值,系统会赋上一个指定的默认值
语法: 字段名 字段数据类型 default 默认值
备注:如果给表中的某个字段既添加了非空约束又添加了非空约束,那么该字段是不是主键呢?
一般情况下一张表只有一个主键
外键约束
- 一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)
- FOREIGN KEY 约束用于预防破坏表之间连接的行为。
- FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一
语法:FOREIGN KEY (字段名) REFERENCES 其他表表名(其他表字段名)