MySQL的一些基础总结,可能不是很到位,我也一知半懂,照着老师的文档来整理的,加上wordpress的转文章,语法也不对,遇到问题我在改吧

常用mysql命令:

1.show databases; 显示数据库
2.create database dome; 创建数据库
3.drop table 表名;
4.desc goods; 查看表结构
5.delete from goods where id=1;删除表中第一行数据
6.update news set content=replace(content,’ ‘,’’);清除news表中content字段中的空格
7.update 表名 set name=’李四’ where id=2;修改字段值
8.create table student(uid int,name varchar(20),age int)charset=utf8;

创建mysql数据表步骤:

1.use test; 使用数据库
2.show tables; 显示数据表
3.create table stu(number int,name varchar(20)); 创建表
4.insert into stu values(1,’张三’); 给表存数据,添加数据,增加
5.select * from schooll; 查询

基本查询

条件查询 where
聚合函数 count、max、min、avg、sum
分组查询 group by
分页查询 limit

1.查询多个字段

select 字段1,字段2,字段3 from 表名;
select * from 表名;

2.设置字段别名

select 字段1 AS 别名1,字段2 AS 别名2 from 表名;

3.去除重复记录

select distinct 字段 from 表名;

4.条件查询

语法:select 字段列表 from where 条件列表;

示例1:查询emp表中年龄为20,21,22,23,岁的员工信息
select * from emp where age between 19 and 24;

示例2:查询性别男,且年龄在20-40岁(含)以内的姓名为三个字的员工
select name,gender,age from emp where name like “___” and gender=”男” and age between 19 and 41;

5.分组查询

语法:SELECT 字段列表 FROM 表名 WHERE 条件 GROUP BY 分组字段名 HAVING 分组后过滤条件

示例:根据性别分组,统计男性员工,和女性员工的平均人数。
select gender,count(*) from emp group by gender;

6.聚合函数

语法:SELECT 聚合函数(字段列表) FROM 表名;

示例:统计员工表中,年龄小于60岁的,男性员工和女性员工的人数
select gender,count(*) from emp where age<60 group by gender;

7.排序查询

语法:SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;

示例:查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按照入职时间降序排序。
select name,age from emp where age<=35 order by age asc,entrydate desc;

示例:查询性别为男,且年龄在20-40岁(含)以内的前5个员工信息,对查询的结果按照年龄升序排序,年龄相同按照入职时间升序排序
select * from emp where gender=”男” and age between 19 and 41 order by age asc,entrydate desc limit 0,5;

8.分页查询

语法:SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数。

示例:查询emp表第二页员工数据,每页展示5条数据。(页码-1)*页展示记录数
select * from emp limit 5,5;

多表查询———–笛卡尔积

连接查询——内连接

内连接查询语法:
隐式内连接
SELECT 字段列表 FROM 表1,表2 WHERE 连接条件….

显式内连接
SELECT字段列表&nbsp;FROM表1&nbsp;[INNER] JOIN 表2&nbsp;ON 连接条件….

示例1:查询每一个员工姓名,及关联的部分的名称(隐式内连接实现)

示例2:查询每一个员工姓名,及关联的部分的名称(显式内连接实现)
INNER JOIN…ON….

连接查询——外连接

外连接查询语法:

左外连接

关键字:left join on / left outer join on

SELECT 字段列表 FROM 表1&nbsp;LEFT [OUTER] JOIN 表2 ON 条件….;

右外连接

关键字:right join on /right outer join on

SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件…;

3、连接查询——自连接(重要)

自己表中的字段关联自己表中的字段,将一张表当作两张表对待,可以减少表的建立。

自连接查询语法

SELECT 字段列表 FROM 表A 表名A JOIN 表A 别名B ON 条件….

就是表a join 表a,自己连接自己,所以必须起个别名做区别。

自连接查询,可以是内连接查询,也可以是外连接查询。

自连接必须对表起别名!!

4、联合查询 union,union all

union查询,就是把多次查询结果合并在一起,然后对重复的数据去重。

union all,会将全部的数据直接合并一起。

联合语法:

SELECT 字段列表 FROM 表A…

UINON[ALL]

SELECT 字段列表 FROM 表B

案例:将薪资低于2000的员工,和年龄大于50岁的员工全部查询出来。

5、子查询

SQL语句中嵌套SELECT语句,称为嵌套查询,又叫做子查询。

特点:

(1)一个查询的结果作为了另一个查询的条件

(2)有查询的嵌套,内部的查询被称为子查询

(3)子查询要使用括号

语法:SELECT * FROM t1 WHERE colum1=(SELECT colum2 FROM t2);

子查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT 的任何一个。

根据子查询的结果不同,可以分为4类。

  • 标量子查询(子查询结果为单个值)
  • 列子查询(子查询结果为一列)
  • 行子查询(子查询结果为一行)
  • 表子查询(子查询结果为多行多列。)

根据子查询的位置,分为:WHERE 之后、FROM 之后、SELECT之后。

标量子查询

子查询的返回结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询成为标量子查询

常用的操作符:= <> > >= < <=

列子查询

子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。

常用的操作符:INNOT IN ANYSOMEALL
案例:查询“销售部”和“市场部”的所有员工信息。

行子查询

子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。

常用的操作符:=、<>、IN、NOT IN

可以换成行子查询,将多个字段当成虚拟的字段来用。

案例:

表子查询

子查询返回的结果是多行多列,这种子查询称为表子查询。

案例:---查询入职日期“2015-12-12”之后的员工信息,及其部分信息

视图基本操作

####1.创建视图
语法:create view 视图名 as select 包含字段 from 数据表 where 查询条件 with cascaded check option; //with cascaded check option是检查选项,添加或删除是有确认框提示

示例:创建emp表的视图emp_i,视图包含id和name字段
create view emp_i as select id,name from emp where id = 10;

2.查看视图

语法:select * from 视图名称;

3.视图添加数据

语法:insert into 视图名称 values(值1,值2);

函数的基本操作

函数分为 字符串函数、数值函数、日期函数、流程控制函数。

1.字符串函数

concat(s1,s2,s3) 字符串拼接函数
lower(str) 将字符串str全部转为小写
upper(str) 将字符全部转为大写
lpad(str,n,pad) 左填充,用字符串pad对str的左边进行填充,达到n个字符长度
rpad(str,n,pad) 右填充,用字符串pad对str的左边进行填充,达到n个字符长度
trim(str) 去掉字符串头部和尾部的空格
substring(str,start,len) 返回从字符串str从start位置起的len个长度的字符串

示例:将hello和world拼接在一起
select concat(‘hallo’,’world’);
其他就不一一演示了,在select 后接函数就行了

2.数值函数

示例:向下取整1.5. 结果为1
select cell(1.5);
其他就不一一演示了,在select 后接函数就行了

3.日期函数

示例:返回当天日期
select curdate();
其他就不一一演示了,在select 后接函数就行了

4.流程函数

5.总结

1、字符串函数
CONCAT、LOWER、UPPER、LPAD、RPAD、TRIM、SUBSTRING
2、数值函数
CEIL、FLOOR、MOD、RAND、ROUND
3、日期函数
CURDATE、 CURTIME、 NOW、 YEAR、 MONTH、 DAY、 DATE、 DATE_ADD、 DATEDIFF
4、流程控制函数
IF、 IFNULL、 CASE[…] WHEN…THEN…ELSE…END

储存过程基本操作

语法:
1.创建存储过程:
CREATE PROCEDURE 存储过程名称([参数列表])
BEGIN
–SQL语句
END;

2.调用存储过程:
CALL 名称([参数]);

查看存储过程
show create procedure 存储过程名称; —-查询某个存储过程的定义

3.删除存储过程
drop procedure 存储过程名称;

示例1:创建一个存储过程名称为addcount,能够获取stu表中的姓名和班级
delimiter//
create procedure ser()
begin
select name,class from student;
end;
//

调用:call ser();

示例2:定义存储过程,完成如下要求
1、根据传入参数score,判断当前分数对应的分数等级,并返回。
A.score>=85分,等级为优秀。
B.score>=60分且score<85分,等级为及格。
C.score<60分,等级为不及格。
![2022-06-01T14:14:49.png][4]

游标

使用游标的步骤
(1)声明
declare 游标名 cursor for select_statement
(2)打开游标
使用open进行打开
open 游标名
(3)从游标中取值
使用fetch进行取值
fetch 游标名 into var1,var2[,…] –将取到的一行赋值给多个变量
(4)关闭游标
使用close关闭游标
close 游标名
(5)创建一个简单的游标
需求:从商品表中读取第一行数据
![2022-06-01T14:18:45.png][5]
##存储函数
####课堂案例: 根据员工编号,查询名称。
创建储存函数
![2022-06-01T14:20:44.png][6]
调用存储函数
![2022-06-01T14:22:45.png][7]

示例2:
自定义存储函数名,实现传入两个number,返回二者之和。
delimiter //
create function num3(num int,numb int)
returns varchar(20)
begin
declare su varchar(20);
set su=num+numb;
return su;
end;

调用:select num3(1,2);
查看存储函数
SHOW CREATE FUNCTION 存储函数名;
修改存储函数
ALTER FUNCTION 存储函数名 [ 特征 … ]
删除存储函数
DROP FUNCTION 存储函数名;

触发器基本操作

  1. 监视地点(table)
  2. 监视事件(insert/update/delete)
  3. 触发时间(before/after)
  4. 触发事件(insert/update/delete)

语法:
delimiter $ – 将Mysql的结束符号从 ; 改为 $,避免执行出现错误
CREATE TRIGGER Trigger_Name – 触发器名,在一个数据库中触发器名是唯一的
before/after(insert/update/delete) – 触发的时机(前/后) 和 监视的事件
on table_Name – 触发器所在的表或者触发器监视的表
for each row – 固定写法 叫做行触发器, 每一行受影响,触发事件都执行
begin
begin和end之间写触发事件
end
$ – 结束标记

示例:

购买是的触发器
![2022-06-01T14:28:27.png][8]
退货时的触发器
![2022-06-01T14:28:35.png][9]

购买时的效果
![2022-06-01T14:29:48.png][10]

事务

示例步骤:
开启事务:
Start transaction;
事务操作:
操作1:李四账户减少
![2022-06-01T14:42:28.png][11]
操作2:张三账户增加
![2022-06-01T14:43:07.png][12]
关闭事务:两个选择,选择提交事务同步数据,或者回滚事务清空日志(操作失败)

提交事务:同步数据表(操作成功),commit;

回滚事务:直接清空日志表(操作失败),rollback;