软件(MYSQL)
SQL语言
—DQL查询语法 (Data Query Language)
-
基础查询——>详情
- 列表查询
- 列表别名
使用语法:
1
2Select Querylist
From Tablename; #非必要行,指定查询位置 -
条件查询——>详情
- 条件表达式
- 逻辑表达式
使用语法:
1
2
3
4
5
6Select
Querylist
From
Tablename
Where
conditional statement; -
排序查询——>详情
使用语法:
1
2
3
4
5
6
7
8select
querylist
from
tablename
where
conditional statement #可无
order by
sortlist asc; #降序为 desc;默认(省略时)asc -
常见函数
-
单行函数——>函数介绍
用作数据处理,如
concat()
、length()
、ifnull()
,输入单值,输出单值。- 字符函数
- 数学函数
- 日期函数
- 流程控制函数
-
分组函数及查询——>函数介绍
又称为统计函数,用于数据统计,输入一组函数。
- 分组函数
- 分组查询
使用语法:
1
2select function(value)
from Tablename #此命令可无 -
-
链接查询——>具体说明(99版)
-
内连接(inner)
- 等值连接
- 非等值连接
- 自连接
-
外连接
- 左外连接(left)
- 右外连接(right)
- 全外连接(full)
-
交叉连接(cross)
使用语法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14##92版,仅支持内连接
select Table1.column1 ,Table2.column2
from Table1, Table2
where Connection_requirements #标明连接条件,否则出现笛卡尔连接(mXn行)
And conditions #使用AND追加筛选条件,多表连接条件,可无
group by cloumn3 #可无
order by column4 desc#可无
##99版,支持所有类型
select querylist
from Table1 ConnectType#ConnectType 为连接类型默认inner,见上文括号内容
join Table2
on Connection_requirements
where conditions #可无有92及99两个版本的连接版本语法,推荐使用99版本
Connection_requirements 可为等值、非等值判断,对应不同类型连接
-
-
子查询——>具体说明(99版)
- 标量子查询(1X1)
- 列子查询(nX1)
- 行子查询(1Xn)
- 表子查询(nXm)
使用
()
将查询放于select
,from
,where
,having
,exists
之后,作为子查询 -
分页查询
可用作分段提交sql查询请求
使用语法:
1
2
3
4
5
6
7
8
9
10select
querylist
from
tablename
where
conditional statement #可无
order by
sortlist asc #可无
limit
offset,size; #offset为开始条目(初始条目为0),size为条目数 -
联合查询
用于合并多条查询语句的查询结果(可用作合并来自不同表的查询结果,但理论上要求有一定联系)
使用语法:
1
2
3select * from talbe1 where conditiona statement1
union #使用 union all时可包含重复项
select * from talbe2 where conditiona statement2;- 联合查询要求多个查询语句的查询列数相同。
- union 默认去重,union all时可包含重复项
以上所提到的关键字执行顺序如下:
from
→join
→on
→where
→group by
→分组函数
→
having
→select
→distinct
→order by
→limit
- 执行过程中生成虚拟表,并对虚拟表进行操作更新虚拟表(连接、分组等),直到
select
才从虚拟表中提取查询列
DML 数据管理
-
插入
insert into
-
修改
update
-
删除
delete
使用语法:详情
DDL 数据定义
通常在创建数据库、表格时,一般情况下会先对现有表进行删除(除非需要其中数据),再创建表
通常语法:
1 | drop database if exists Database_Name ;#或者TableName |
-
库管理语言
-
创建库
1
create database [if not exists] DataBase_Name;
[]
内语句为可选语句,通过if not exists
判断可增加容错性 -
修改库
修改字符集语法:
1
alter database books character set gbk;
注意:通常情况下不修改库的信息。
-
删除库
1
drop database [if exists] DataBase_Name;
-
-
表管理语言——>详情
-
创建表
-
修改表
-
修改列名(
change
) -
修改列类型、约束(
modify
)——> 类型说明
——>约束说明(含标识列)
-
添加、删除列(
add
,drop
) -
修改表名(
rename to
)
-
-
复制表
-
删除表
-
TCL 事务管理
事务:一个或一组sql语句组成的一个执行单元。
存储引擎:用不同的技术存储数据库中的数据与文件(或内存)。
myisam,memory等引擎不支持事务
事务相关操作——>详情
- 事务创建
- 保存点
save point
- 事务并发
- 引发问题:脏读、不可重复读、幻读
- 隔离级别:
read uncommitted
read committed
repeatable read
serializable
基本语法:
1 | set autocommit = 0; #开始 事务 |
事务的基本属性(ACDI)
- 原子性 Atomicity:事务内容不可分割
- 一致性 Consistency:事务执行前后数据状态一致
- 隔离性 Isolation:事务的执行不被其他事务干扰(根据隔离级别)
- 持久性 Durability:事务一旦提交,永久改变库中数据
视图
可看作虚拟表,与普通表用法相同,具有临时性。仅保存sql逻辑,不保存查询结果。
视图操作——> 详情
- 创建
- 修改
- 删除
- 更新(视图数据)
变量
系统变量:由系统提供,属于服务器层面
使用
@@
标识系统变量
-
全局变量
global
基本语法:
1
2
3
4
5
6
7
8#查看系统变量
Show global variables; #global为全局
show global variables like '%char%'; #查找一定变量
select @@global.VariableName; #查看特定全局变量
#给变量赋值
set @@global.VariableName= value1;给全局变量赋值对所有会话(连接)有效,但不跨重启
-
会话变量
session
基本语法:
1
2
3
4
5
6
7
8
9#查看系统变量
Show [session] variables; #[session]为会话,可省略
show [session] variables like '%char%';
select @@[session.]VariableName; #查看特定变量
#给变量赋值
set @@VariableName= value1;
set session VariableName= value1;
自定义变量
-
用户变量:作用于当前会话
使用语法
1
2
3
4
5
6
7
8
9
10#声明(也可用作赋值)
set @VariableName := value1;
select @VariableName := value1;
#赋值
select column1 into @VariableName
from TableName;
#查看、使用
select @VariableName;使用
@
符号区分用户变量和列名,使用:=
对变量赋值select
为查询部分,在后续使用查询语法。示例:
1
2
3
4
5
6
7#用户变量
set @count := 1;
select count(*) into @count
from employees;
select @count; -
局部变量:仅作用于其定义的
begin
end
中使用语法:
1
2
3
4
5
6
7
8
9
10
11
12#声明
declare VariableName type [default value1];
#赋值
set VariableName := value1;
select @VariableName := value1;
select column1 into VariableName
from TableName;
#查看、使用
select VariableName;通常不需要使用
@
[]
中为非必要语句。局部变量必须声明类型,且需在begin
end
域内第一句。
存储过程与函数
存储过程:一组预先编译好的sql语句集合(批量处理语句)
与函数/方法类似,可简化操作、提高效率(较少编译次数及连接次数)
创建过程
-
参数列表
-
参数模式 [mode]
in
:该参数可作为输入out
:该参数可作为输出inout
:支持输入和返回 -
参数名 [paramenter]
-
参数类型 [type]
-
1 | delimiter $ |
存储过程中每条语句结尾需要添加
;
可通过
delimiter
重新设置存储过程的结束标识
调用过程
1 | call PName(parameters); |
示例:
in
模式
1 | use girls; |
out
模式
1 | create procedure myp3(in beautyName varchar(20),out boyName varchar(20)) |
删除过程
1 | drop procedure PName;#一次只能删除一个 |
查看过程
1 | show create procedure PName; |
创建函数
函数与存储过程相似,但有且仅有一个返回值
1 | create function funcName(paramenter type) returns return_type #声明 |
错误1418:log_bin_trust_function_creators 变量为0时,用户不得创建或修改存储函数,将该变量设置为1即可:
set global log_bin_trust_function_creators=TRUE;
删除函数
1 | drop function funcName;#一次只能删除一个 |
查看函数
1 | show create function funcName; |
流程控制结构
-
顺序结构
-
分支结构——>函数介绍(流程控制函数)
-
if(a,b,c)
-
if
结构语法:
1
2
3
4
5if condition1 then value1/statement1 ;
else if condition2 then value1/statement2;
...
else value1/statement2;
end if; -
case
结构示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14#建立存储过程,按成绩显示等级
delimiter $
create procedure grade(in score int)
begin
case
when score between 90 and 100 then select 'A';
when score between 80 and 90 then select 'B';
when score between 60 and 80 then select 'c';
else select 'D';
end case;
end $
delimiter ;
call grade(89);
-
-
循环结构
-
while
结构1
2
3
4[tap:] while Condition1 do
sql_statements;
...
end while [tap]; -
loop
结构1
2
3
4[tap:] loop
sql_statements;
...
end loop [tap]; -
repeat
结构1
2
3
4
5[tap:] repeat
sql_statements;
...
until end_Condition
end repeat [tap]; -
退出语句
iterate
:开始下次循环【countinue】leave
:结束当前所在循环【break】
-