MySQL进阶总结

MySQL进阶总结

数据类型

  • 整型
    种类:tinyint、smallint、mediumint、int/integer、bigint
    长度:1 2 3 4 8
如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值
如果不设置长度,会有默认的长度
长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用
  • 浮点型
    定点数:dec(M,D);decimal(M,D)
    浮点数:float(M,D) 4;double(M,D) 8
M代表整数部位+小数部位的个数,D代表小数部位
如果超出范围,则报out or range异常,并且插入临界值
M和D都可以省略,但对于定点数,M默认为10,D默认为0
如果精度要求较高,则优先考虑使用定点数
  • 字符型
    char、varchar
    binary和varbinary用于保存较短的二进制.
    enum用于保存枚举
    set用于保存集合
    较长的文本:text、blob(较大的二进制)
charvarchar的对比
				M代表最大字符数			区别
char(M)				可以省略				固定长度字符,空间耗费高,效率也高
varchar(M)			不可以省略			可变字符长度,节省空间耗费,效率低
  • 日期型
    date只保存日期;
    time 只保存时间;
    year只保存年;
    datetime保存日期+时间;
    timestamp保存日期+时间;
			字节		范围			时区等的影响
datetime	 8		1000——9999	       不受
timestamp	 4	    1970-2038

常见约束

用于限制表中的数据,为了保证表中的数据的准确和可靠性。

六大约束
	NOT NULL:非空,用于保证该字段的值不能为空
	DEFAULT:默认,用于保证该字段有默认值
	PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空
	UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空
	CHECK:检查约束【mysql中不支持】
	FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
  • 约束的添加分类
    列级约束:六大约束语法上都支持,但外键约束没有效果
    表级约束:除了非空、默认,其他的都支持

  • 主键和唯一的区别

		保证唯一性  是否允许为空    一个表中可以有多少个   是否允许组合
主键		√				×			至多有1个           √,但不推荐
唯一		√				√			可以有多个          √,但不推荐

事务控制语言

  • 事务的特性(ACID)
原子性:一个事务不可再分割,要么都执行要么都不执行
一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态
隔离性:一个事务的执行不受其他事务的干扰
持久性:一个事务一旦提交,则会永久的改变数据库的数据.
  • 分类
隐式(自动)事务:没有明显的开启和结束,本身就是一条事务可以自动提交,比如insert、update、delete

显式事务:事务具有明显的开启和结束的标记;前提:必须先设置自动提交功能为禁用
  • 具体步骤
步骤1:开启事务
set autocommit=0;
start transaction;可选的

步骤2:编写事务中的sql语句(select insert update delete)
语句1;
语句2;
...

步骤3:结束事务
commit;提交事务
rollback;回滚事务
  • 并发事务
    多个事务同时操作 同一个数据库的相同数据时发生并发

出现的情况:

1.脏读:一个事务读取了其他事务还没有提交的数据,读到的是其他事务“更新”的数据;
2.不可重复读:一个事务多次读取,结果不一样;
3.幻读:一个事务读取了其他事务还没有提交的数据,只是读到的是 其他事务“插入”的数据。
  • 通过设置隔离级别来解决并发问题
							脏读			不可重复读		幻读
read uncommitted:读未提交     ×                ×              ×        
read committed:读已提交      √                ×              ×
repeatable read:可重复读     √                √              ×
serializable:串行化          √                √              √

查看隔离级别
select @@tx_isolation;
设置隔离级别
set session|global transaction isolation level 隔离级别;

视图

虚拟表,和普通表一样使用。mysql5.1版本出现的新特性,是通过表动态生成的数据。
使用场景:多个地方用到同样的查询结果,该查询结果使用的sql语句较复杂

  • 视图的创建
    create view 视图名 as 查询语句;
  • 视图的好处
    重用sql语句
    简化复杂的sql操作,不必知道它的查询细节
    保护数据,提高安全性
  • 修改视图
    方式一:
    create or replace view 视图名 as 查询语句;
    方式二:
    alter view 视图名 as 查询语句;
  • 视图的删除
    drop view 视图1,视图2,…;
  • 视图和表的对比
		关键字		  是否占用物理空间			使用
视图	view		占用较小,只保存sql逻辑	一般用于查询
表	    table		保存实际的数据			  增删改查

存储过程函数

变量

变量由系统定义,不是用户定义,属于服务器层面
全局变量需要添加global关键字,会话变量需要添加session关键字,如果不写,默认会话级别

  • 查看系统变量
    show global |【session】variables;
    show global |【session】 variables like ‘%char%’;
  • 为某个系统变量赋值
    方式一:
    set global|【session】系统变量名=值;
    方式二:
    set @@global.|【session】系统变量名=值;

可以自定义用户变量和局部变量

  • 用户变量和局部变量的对比
			作用域					定义位置					语法
用户变量		当前会话					会话的任何地方			加@符号,不用指定类型
局部变量		定义它的BEGIN ENDBEGIN END的第一句话		一般不用加@,需要指定类型
存储过程

一组预先编译好的SQL语句的集合,理解成批处理语句
提高代码的重用性
简化操作
减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

  • 创建语法
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
	存储过程体(一组合法的SQL语句)
END

参数列表包含三部分:参数模式  参数名  参数类型
参数模式:
in:该参数可以作为输入,也就是该参数需要调用方传入值
out:该参数可以作为输出,也就是该参数可以作为返回值
inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值

如果存储过程体仅仅只有一句话,begin end可以省略
存储过程体中的每条sql语句的结尾要求必须加分号。
存储过程的结尾可以使用 delimiter 重新设置
语法:
delimiter 结束标记
案例:
delimiter $

  • 调用语法
CALL 存储过程名(实参列表);
  • 查看语法
show create procedure 存储过程名;
  • 删除语法
drop procedure 存储过程名;
函数

一组预先编译好的SQL语句的集合,理解成批处理语句
与存储过程的区别:
存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新;
函数:有且仅有1 个返回,适合做处理数据后返回一个结果。

  • 创建语法
CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN
	函数体
END


函数体:肯定会有return语句,如果没有会报错
  • 调用语法
SELECT 函数名(参数列表);
  • 查看函数
show create function 函数名;
  • 删除函数
drop function 函数名;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值