Skip to content

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字段列表 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 条件…;

  1. 连接查询——自连接(重要)

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

自连接查询语法

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

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

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

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

  1. 联合查询 union,unionall

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

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

联合语法:

SELECT 字段列表 FROM 表A…

UINON[ALL]

SELECT 字段列表 FROM 表B

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

  1. 子查询

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”之后的员工信息,及其部分信息

视图基本操作

  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;

  1. 查看视图

语法:select * from 视图名称;

  1. 视图添加数据

语法: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 后接函数就行了

  1. 数值函数

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

  1. 日期函数 示例:返回当天日期 select curdate(); 其他就不一一演示了,在select 后接函数就行了
  2. 流程函数
  3. 总结 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;