Start-数据库系统(目录)

软件(MYSQL)


SQL语言

—DQL查询语法 (Data Query Language)

  • 基础查询——>详情

    • 列表查询
    • 列表别名

    使用语法:

    1
    2
    Select Querylist
    From Tablename; #非必要行,指定查询位置
  • 条件查询——>详情

    • 条件表达式
    • 逻辑表达式

    使用语法:

    1
    2
    3
    4
    5
    6
    Select 
    Querylist
    From
    Tablename
    Where
    conditional statement;
  • 排序查询——>详情

    使用语法:

    1
    2
    3
    4
    5
    6
    7
    8
    select 
    querylist
    from
    tablename
    where
    conditional statement #可无
    order by
    sortlist asc; #降序为 desc;默认(省略时)asc
  • 常见函数

    • 单行函数——>函数介绍

      用作数据处理,如 concat()length()ifnull(),输入单值,输出单值。

      • 字符函数
      • 数学函数
      • 日期函数
      • 流程控制函数
    • 分组函数及查询——>函数介绍

      又称为统计函数,用于数据统计,输入一组函数。

      • 分组函数
      • 分组查询

    使用语法:

    1
    2
    select 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)

    使用()将查询放于selectfromwherehavingexists之后,作为子查询

  • 分页查询

    可用作分段提交sql查询请求

    使用语法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select 
    querylist
    from
    tablename
    where
    conditional statement #可无
    order by
    sortlist asc #可无
    limit
    offset,size; #offset为开始条目(初始条目为0),size为条目数
  • 联合查询

    用于合并多条查询语句的查询结果(可用作合并来自不同表的查询结果,但理论上要求有一定联系)

    使用语法:

    1
    2
    3
    select * from talbe1 where conditiona statement1
    union #使用 union all时可包含重复项
    select * from talbe2 where conditiona statement2;
    • 联合查询要求多个查询语句的查询列数相同。
    • union 默认去重,union all时可包含重复项

以上所提到的关键字执行顺序如下:

fromjoinonwheregroup by分组函数

havingselectdistinctorder bylimit

  • 执行过程中生成虚拟表,并对虚拟表进行操作更新虚拟表(连接、分组等),直到select才从虚拟表中提取查询列

DML 数据管理

  • 插入 insert into

  • 修改 update

  • 删除 delete

    使用语法:详情


DDL 数据定义

通常在创建数据库、表格时,一般情况下会先对现有表进行删除(除非需要其中数据),再创建表

通常语法:

1
2
drop database if exists Database_Name ;#或者TableName
creat database Database_Name;#或Table创建语句
  • 库管理语言

    • 创建库

      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;
  • 表管理语言——>详情

    • 创建表

    • 修改表

    • 复制表

    • 删除表


TCL 事务管理

事务:一个或一组sql语句组成的一个执行单元。

存储引擎:用不同的技术存储数据库中的数据与文件(或内存)。

myisam,memory等引擎不支持事务

事务相关操作——>详情

  • 事务创建
  • 保存点 save point
  • 事务并发
    • 引发问题:脏读、不可重复读、幻读
    • 隔离级别:read uncommitted read committed repeatable read serializable

基本语法:

1
2
3
4
5
6
set autocommit = 0; #开始 事务
start transaction; #可省略
SQL_Statements1;
SQL_Statements2;
...
commit; #结束 可使用回滚语句:rollback;

事务的基本属性(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
2
3
4
5
6
delimiter $
create procedure PName(mode paramenter type)
begin
SQL_statements;
...
end $

存储过程中每条语句结尾需要添加 ;

可通过 delimiter 重新设置存储过程的结束标识

调用过程

1
call PName(parameters);

示例:

  • in 模式
1
2
3
4
5
6
7
8
9
10
11
use girls;
delimiter $ #定义结束标志
create procedure myp2(in beautyName varchar(20))
begin
select bo.*
from boys bo
right join beauty b on bo.id = b.boyfriend_id
where beautyName = b.name ;
end $

call myp2('赵敏');
  • out 模式
1
2
3
4
5
6
7
8
9
10
create procedure myp3(in beautyName varchar(20),out boyName varchar(20))
begin
select bo.boyName into boyName
from boys bo
inner join beauty b on bo.id = b.boyfriend_id
where beautyName = b.name;
end $

call myp3('小昭',@bName);#调用
select @bName;

删除过程

1
drop procedure PName;#一次只能删除一个

查看过程

1
show create procedure PName;

创建函数

函数与存储过程相似,但有且仅有一个返回值

1
2
3
4
5
6
create function funcName(paramenter type) returns return_type #声明
begin
SQL_statements;
...
return
end

错误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
      5
      if 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】