MySQL---基础02
# MySQL 数据库
# 1、简单修改
语法:
update 表名
set 列 = 新值,列 = 值,…
where 筛选条件;
1 |
|
修改多表记录
语法:
SQL99 语法
update 表 1 别名
inner/left/right join 表 2 别名
on 连接条件
set 列 = 新值,列 = 值,…
where 筛选条件;
SQL92 语法
update 表 1 别名,表 2 别名
set 列 = 新值,列 = 值,…
where 连接条件
and 筛选条件;
1 |
|
# 2、删除
语法
方式一:
1. 单表的删除
delete from 表名 where 筛选条件
2. 多表的删除
SQL92
delete 别名 (删除表 1 写表 1 别名,删除表 2 写表 2 别名,删除两个表就写两个表的别名)
from 表 1 别名,表 2 别名
where 连接条件
and 筛选条件;
SQL99 语法
delete 别名 (删除表 1 写表 1 别名,删除表 2 写表 2 别名,删除两个表就写两个表的别名)
from 表 1 别名
inner/left/right join 表 2 别名
on 连接条件
where 筛选条件;
方式二:
truncate table 表名;
-
注意:
-
delete 与 truncate 的区别:
-
1.delete 可以加 where 条件,truncate 不能加
-
2.truncate 删除效率较高
-
3. 假如要删除表中有自增长列,如果用 delete 删除后,再插入数据,自增长列的值从断点开始,而 truncate 删除后,再插入数据,自增长列的值从 1 开始
-
-
-
4.truncate 删除没有返回值,delete 删除有返回值
-
5.truncate 删除不能回滚,delete 删除可以回滚
# 3、模糊查询
like:
与通配符进行使用
"%": 任意多个字符
“_”(下划线): 任意单个字符
between……and….:
可以提高语句简洁度
包含临界值等价于大于等于 / 小于等于
两个临界值不能颠倒
in :
含义:判断某字段的值是否属于 in 列表中的某一项
特点:
使用 in 提高语句简洁度
in 列表的值类型必须统一或兼容
is null / is not null
=/<> 不能用于判断 null 值
1 |
|
# 4、排序查询
语法:
select 查询列表
from 表
[where 筛选条件]
order by 排序列表 [asc | desc]
特点:
1.asc:默认按升序排列可以不写
2.desc:按降序排列
3.order by 子句中可以支持单个字段,多个字段,表达式,函数,别名
4.order by 子句一般是放在查询语句的最后面,但是 limit 子句除外
1 |
|
# 5、练习
1 |
|
# 6、分页查询
1 |
|
# 7、变量
# 7.1、系统变量
-
变量由系统定义,不是用户定义,属于服务器层面
-
全局变量:针对整个服务器
-
语法:
- show global variables
- 会话变量:针对客户端的一次连接
-
语法:
- show session variables
-
查看满足条件的部分系统变量
- 语法:
- show global variables like ‘%char%’;
-
查看指定的某个系统变量的值
- 语法:
- select @@系统变量名
- select @@global/session. 系统变量名–查看指定的全局 / 会话的某个系统变量的值
-
为某个系统变量赋值
- set global/session 系统变量名 = 值
- set @@ **global/session.** 系统变量名 = 值
# 7.2、自定义变量
-
用户变量
-
作用域:针对当前会话 (连接) 有效,同于会话变量的作用域
-
1)声明并初始化
- set @用户变量名 = 值;
- set @用户变量名:= 值;
- select @用户变量名: = 值;
-
2)赋值 (更新用户变量的值)
- 方式一:
- set @用户变量名 = 值;
- set @用户变量名:= 值;
- select @用户变量名: = 值;
- 方式二:
- select 字段 into 变量名
- from 表;
- 方式一:
-
3) 使用
- select @用户变量名;
-
局部变量
- 作用域:仅仅在定义的 begin end 中有效
- 应用:在 begin end 中的第一句话
-
1)声明
- declare 变量名 类型;
- declare 变量名 类型 default 值;
-
2)赋值
- 方式一:
- set 局部变量名 = 值;
- set 局部变量名:= 值;
- select @局部变量名: = 值;
- 方式一:
-
方式二:
- select 字段 into 局部变量名
- from 表;
-
3)使用:
- select 局部变量名;
# 8、存储过程
# 8.1、存储过程
-
含义:一组预先编译好的 SQL 语句的集合,理解成皮处理语句
-
1. 提高代码重用性
-
2. 简化操作
-
3. 减少编译次数并且减少了和数据库服务器的连接次数,提高了效率
-
-
二,创建语法
- create procedure 存储过程名 (参数列表)
- begin
- 存储过程体 (一组合法的 SQL 语句)
- end
-
注意:
- 1. 参数列表包含三部分:参数模式,参数名,参数类型
- eg: in stuname varchar(20)
- 2. 参数类型:
- in: 该参数可以作为输入,也就是说需要调用方传入值
- out:该参数可以作为输出,可以作为返回值
- inout:该参数既可以输入也可以作为输出,既需要传入值又需要返回值
- 3. 如果存储过程体仅仅只有一句话,begin end 可以省略
- 4. 存储过程体中每条 SQL 语句结尾必须加分号,存储过程的结尾可以使用 DELIMITER 重新设置
- 语法:DELIMITER 结束标记
- 1. 参数列表包含三部分:参数模式,参数名,参数类型
-
三,调用语法
-
call 存储过程名 (实参列表);
1 |
|
# 9、视图
定义:
一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存了 SQL 逻辑,不保存查询结果
应用场景:
1)多个地方用到相同的查询结果
2)该查询结果使用 SQL 语句较复杂
一,创建视图:
语法:
create view 视图名 as 查询语句;
1 |
|
# 10、TCL: 事务控制语言
-
事务:
- 一个或一组 sql 语句组成一个执行单元,这个执行单元要么全部执行要么全部不执行。如果单元中的某条 SQL 语句执行失败或产生错误,整个单元将会回滚,所有受到影响的数据将返回到事务开始以前的状态;如果单元中的所有 SQL 语句均执行成功,则事务被顺利执行。
-
存储引擎:
- 1. 在 MySQL 中的数据用各种不同的技术存储在文件或内存中
- 2. 通过 show engines 来查看 mysql 支持的存储引擎
- 3. 在 MySQL 中用到最多的存储引擎有:innodb,myisam,memory 等,其中 innodb 支持事务,而 myisam,memory 等不支持事务
-
事务的 ACID 属性:
- 1. 原子性 (Atomicity)
- 是指事务是一个不可分割的工作单位,事务中的操作要么都发生要么都不发生
- 2. 一致性 (Consistency)
- 事务必须是数据库从一个一致性的状态变换到另一个一致性的状态
- 3. 隔离性 (Isolation)
- 是指一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能相互干扰。
- 4. 持久性 (Durability)
- 指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响
- 事务的创建:
- 隐式事务:事务没有明显的开启和结束的标记。如:insert,update 语句。
- 显示事务:事务具有明显的开启和结束标记,前提必须先设置自动提交功能为禁用 (set autocommit = 0)
- 1. 原子性 (Atomicity)
-
步骤:
-
1. 开启事务
-
set autocommit = 0; start transaction;(可选的)
-
2. 编写事务中的 SQL 语句 (select insert update delete)
- 语句 1;
- 语句 2;
- 语句 3;
- …
-
3. 结束事务
- commit; 提交事务
- rollback; 回滚事务
- delete 和 truncate 在事务使用时的区别
- delete 支持回滚,truncate 不支持回滚
# 11、错误解决方案
MySQL 错误:Can’t create table‘…’ (errno:150)解决方案
- (1)、检查 sc 表的外键字段的类型以及大小是否和 s 表 c 表完全一致
- (2)、试图引用的其中一个外键没有建立起索引,或者不是一个 primary key , 如果其中一个不是 primary key 的放,你必须为它创建一个索引。
- (3)、一个或两个表是 MyISAM 引擎的表,若想要使用外键约束,必须是 InnoDB 引擎