day42_MySql

  • 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 其他表表名(其他表字段名)

posted @ 2021-01-04 19:42  随风十万里  阅读(58)  评论(0编辑  收藏  举报