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引擎