MySQL的一些基础总结,可能不是很到位,我也一知半懂,照着老师的文档来整理的,加上wordpress的转文章,语法也不对,遇到问题我在改吧
常用mysql命令:
- show databases; 显示数据库
- create database dome; 创建数据库
- drop table 表名;
- desc goods; 查看表结构
- delete from goods where id=1;删除表中第一行数据
- update
news
setcontent
=replace(content
,' ','');清除news表中content字段中的空格 - update 表名 set name='李四' where id=2;修改字段值
- create table student(uid int,name varchar(20),age int)charset=utf8;
创建mysql数据表步骤:
- use test; 使用数据库
- show tables; 显示数据表
- create table stu(number int,name varchar(20)); 创建表
- insert into stu values(1,'张三'); 给表存数据,添加数据,增加
- 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字段列表 FROM表1 [INNER] JOIN 表2 ON 连接条件….
示例1:查询每一个员工姓名,及关联的部分的名称(隐式内连接实现)
示例2:查询每一个员工姓名,及关联的部分的名称(显式内连接实现)
INNER JOIN…ON….
连接查询——外连接
外连接查询语法:
左外连接
关键字:left join on / left outer join on
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件….;
右外连接
关键字:right join on /right outer join on
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件…;
- 连接查询——自连接(重要)
自己表中的字段关联自己表中的字段,将一张表当作两张表对待,可以减少表的建立。
自连接查询语法
SELECT 字段列表 FROM 表A 表名A JOIN 表A 别名B ON 条件….
就是表a join 表a,自己连接自己,所以必须起个别名做区别
自连接查询,可以是内连接查询,也可以是外连接查询。
自连接必须对表起别名!!
- 联合查询 union,unionall
union查询,就是把多次查询结果合并在一起,然后对重复的数据去重。
union all,会将全部的数据直接合并一起。
联合语法:
SELECT 字段列表 FROM 表A…
UINON[ALL]
SELECT 字段列表 FROM 表B
案例:将薪资低于2000的员工,和年龄大于50岁的员工全部查询出来。
- 子查询
SQL语句中嵌套SELECT语句,称为嵌套查询,又叫做子查询。
特点:
(1)一个查询的结果作为了另一个查询的条件
(2)有查询的嵌套,内部的查询被称为子查询
(3)子查询要使用括号
语法:SELECT * FROM t1 WHERE colum1=(SELECT colum2 FROM t2);
子查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT
的任何一个。
根据子查询的结果不同,可以分为4类。
标量子查询(子查询结果为单个值)
列子查询(子查询结果为一列)
行子查询(子查询结果为一行)
表子查询(子查询结果为多行多列。)
根据子查询的位置,分为:WHERE 之后、FROM 之后、SELECT之后。
标量子查询
子查询的返回结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询成为标量子查询。
常用的操作符:= <> > >= < <=
列子查询
子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。
常用的操作符:IN 、NOT IN 、ANY 、SOME、ALL
案例:查询“销售部”和“市场部”的所有员工信息。
行子查询
子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
常用的操作符:=、<>、IN、NOT IN
可以换成行子查询,将多个字段当成虚拟的字段来用。
案例:
表子查询
子查询返回的结果是多行多列,这种子查询称为表子查询。
案例:---查询入职日期“2015-12-12”之后的员工信息,及其部分信息
视图基本操作
- 创建视图 语法:
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;
- 查看视图
语法:select * from 视图名称;
- 视图添加数据
语法:insert into 视图名称 values(值1,值2);
函数的基本操作
函数分为 字符串函数、数值函数、日期函数、流程控制函数。
- 字符串函数
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 后接函数就行了
- 数值函数
示例:向下取整1.5. 结果为1 select cell(1.5); 其他就不一一演示了,在select 后接函数就行了
- 日期函数 示例:返回当天日期 select curdate(); 其他就不一一演示了,在select 后接函数就行了
- 流程函数
- 总结 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分,等级为不及格
游标
使用游标的步骤 (1)声明 declare 游标名 cursor for select_statement (2)打开游标 使用open进行打开 open 游标名 (3)从游标中取值 使用fetch进行取值 fetch 游标名 into var1,var2[,...] --将取到的一行赋值给多个变量 (4)关闭游标 使用close关闭游标 close 游标名 (5)创建一个简单的游标 需求:从商品表中读取第一行数据
存储函数
课堂案例: 根据员工编号,查询名称。 创建储存函数 ! 调用存储函数
示例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 存储函数名;
触发器基本操作
监视地点(table)
监视事件(insert/update/delete)
触发时间(before/after)
触发事件(insert/update/delete)
语法:
delimiter $ -- 将Mysql的结束符号从 ; 改为 $,避免执行出现错误 CREATE TRIGGER Trigger_Name -- 触发器名,在一个数据库中触发器名是唯一的 before/after(insert/update/delete) -- 触发的时机(前/后) 和 监视的事件 on table_Name -- 触发器所在的表或者触发器监视的表 for each row -- 固定写法 叫做行触发器, 每一行受影响,触发事件都执行 begin begin和end之间写触发事件 end $ -- 结束标记
示例:
购买是的触发器
退货时的触发器
购买时的效果
#事务
示例步骤:
开启事务: Start transaction;
事务操作:
操作1:李四账户减少
操作2:张三账户增加
关闭事务:两个选择,选择提交事务同步数据,或者回滚事务清空日志(操作失败)
提交事务:同步数据表(操作成功),commit;
回滚事务:直接清空日志表(操作失败),rollback;