## mysql
#### 1.sql语句
##### 1.增
insert into 表 (字段,字段) values (val1,val2);
##### 2.删
delete from 表 where expresion;
##### 3.改
update 表 set 字段1=val1,字段2=val2 where expression;
##### 4.查
select 字段1,字段2 from 表;
#### 2.特殊关键字
##### 1. distinct 字段去重
select distinct 字段 from 表
##### 2.concat 连接字段
select concat(字段1,字段2) 别名 from 表
##### 3. as 或空格
起别名
##### 4. in关键字(数组)
select * from 表 where 字段 in (20,23,23,23);
##### 5. between and关键字(区间)
select * from 表 where 字段 between 1 and 20;
##### 6. is 关键字
select * from 表 where 字段 is null;
select * from 表 where 字段 is not null;
null不能用等号
##### 7.安全等<=>
select * from 表 where 字段 <=> null;
安全等判断类型和值
#### 3.模糊查询
##### 1. %通配符
##### 2. _代表一个字符
#### 4.转义
select * from 表 where 字段 like "$_sdad" escape"$"
#### 5.分组函数
sum,avg,min,max.count 会忽略null值
round()四舍五入保留小数
##### 1. groupe by 关键字
分组前条件where写在groupe by前 对表中的数据筛选
分组后条件having写在groupe by后 对处理后的数据筛选
#### 6.函数
##### 1.ifnull
##### 2.length
##### 3.substr
##### 4.instr
##### 5.replace
##### 6.concat
##### 7.datediff(date1,date2)
返回两个日期相差的天数
#### mysql 99 语法
#### 1. 内连接
select 字段 from 表1
inner join 表2 on 连接条件
#### 2. 左外连接 右外连接
主表和从表,匹配和不匹配的主表信息都会显示,只不过,没匹配上的主表那一行,此行的从表信息为空 left join right join
#### 子查询
##### 1. 列子查询
子查询结果为一列多行
##### 2. 行子查询
子查询结果为一行多列
##### 3. 表子查询
子查询结果为多行多列
##### 4.标量子查询
子查询结果只有一个标量
##### 5.exist
返回值为0或1 ,和where连用相当于true和false
### Mysql 事务
#### 1.事务是什么
事务是现实生活中的一组逻辑操作单元,这组操作要么全部成功,要么全部失败。
#### 2.事务的特性
##### ACID
原子性:不可再分割,要么都执行,要么都不执行
一致性:一个事务的执行会使数据从一个一致状态切换到另一个一致状态
隔离性:一个事务的执行不受其他事务的干扰
持久性:一个事务一旦提交,则会永久的改变数据库的数据
```mysql
set autocommit=0;
start transaction;
语句1;
语句2;
...
commit;(提交事务)
rollback;(回滚,撤销)
```
### Mysql变量
#### 1.用户变量
set @变量名=值;
#### 2.局部变量
declare @变量名 变量类型 default 值;
#### 3.赋值操作符:=或:=
##### ①声明并初始化
SET @变量名=值;
SET @变量名:=值;
SELECT @变量名:=值;
##### ②赋值(更新变量的值)
#方式一:
SET @变量名=值;
SET @变量名:=值;
SELECT @变量名:=值;
#方式二:
SELECT 字段 INTO @变量名
FROM 表;
##### ③使用(查看变量的值)
SELECT @变量名;
### 存储过程和函数
#### 存储过程的含义:
一组预先编译好的SQL语句的集合,理解成批处理语句
#### 存储过程的优点:
1、提高代码的重用性
2、简化操作
3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
#### 一、创建语法
```mysql
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
存储过程体(一组合法的SQL语句);
END
```
注意:在命令行中使用时 ';'是结束语句的标志,但是在存储过程体重,每一个语句必须以分号为结尾,所有就必须使用delimiter $来改变结束标志。
##### 传参:
in:该参数可以作为输入,也就是该参数需要调用方传入值
out:该参数可以作为输出,也就是该参数可以作为返回值
inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值
#### 二、调用语法
CALL 存储过程名(实参列表);
#### 三、删除存储过程
语法:drop procedure 存储过程名
DROP PROCEDURE p1;
DROP PROCEDURE p2,p3;#×
#### 四、查看存储过程的信息
DESC myp2;
SHOW CREATE PROCEDURE myp2;
### 函数
#### 含义:
一组预先编译好的SQL语句的集合,理解成批处理语句
#### 优点:
1、提高代码的重用性
2、简化操作
3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
#### 区别:
存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新
函数:有且仅有1 个返回,适合做处理数据后返回一个结果
#### 一、创建语法
CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN
函数体
END
##### 注意:
1.参数列表 包含两部分:
参数名 参数类型
2.函数体:肯定会有return语句,如果没有会报错
如果return语句没有放在函数体的最后也不报错,但不建议
return 值;
3.函数体中仅有一句话,则可以省略begin end
4.使用 delimiter语句设置结束标记
#### 二、调用语法
SELECT 函数名(参数列表)
#### 三、查看函数
SHOW CREATE FUNCTION myf3;
#### 四、删除函数
DROP FUNCTION myf3;
### 流程控制
顺序、分支、循环
#### 一、分支结构
##### 1. if函数
语法:if(条件,值1,值2)
功能:实现双分支
应用在begin end中或外面
##### 2. case结构
语法:
情况1:类似于switch
case 变量或表达式
when 值1 then 语句1;
when 值2 then 语句2;
...
else 语句n;
end
##### 3.if结构
语法:
if 条件1 then 语句1;
elseif 条件2 then 语句2;
....
else 语句n;
end if;
功能:类似于多重if
只能应用在begin end 中
#### 二、循环结构
##### 1.while
语法:
【标签:】while 循环条件 do
循环体;
end while【 标签】;
联想:
while(循环条件){
循环体;
}
##### 2.loop
语法:
【标签:】loop
循环体;
end loop 【标签】;
可以用来模拟简单的死循环
##### 3.repeat
语法:
【标签:】repeat
循环体;
until 结束循环的条件
end repeat 【标签】;
##### mysql中的continue和breack
leave语句相当于breack
iterate语句相当于continue