MySql---day07

本文详细探讨了MySQL中的变量类型,包括系统变量和自定义变量,并介绍了存储过程的概念。同时,文章涵盖了函数的使用以及流程控制语句的应用。通过温故知新和大练兵的实践环节,深化对MySQL数据库操作的理解。
摘要由CSDN通过智能技术生成

MySql—变量、存储、函数、流程控制

  • 变量
    • 系统变量
    • 自定义变量
  • 存储过程
  • 函数
  • 流程控制

温故知新

#事务
一、含义
事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行
二、特点(acid)
a:原子性:一个事务是不可在分割的整体,要么都不执行,要么都执行
c:一致性:一个事务可以是数据从一个一致状态切换到另一个一致的状态
i:隔离性:一个事务不受其他事务的干扰,多个事务相互隔离的
d:持久性:一个事务一旦提交了,则永久的持久化到本地

三、事务的使用步骤
了解:
隐式(自动)事务:
显式事务

使用事务:
1)开启事务
set autocommit =0;
start transaction;#可以省略

2)编写一组逻辑sql语句
注意:sql语句支持的是insert update delete

设置回滚点
savepoint 回滚点名;
3)结束事务
提交:commit;
回滚:rollback;
回滚到指定的地方:rollback to 回滚点名;
四、并发事务
1.事务的并发问题是如何发生的?
多个事务同时操作一个数据库的相同数据时
2.并发问题都有哪些?
脏读:一个事务读取了其他事务还没有提交的数据,读到的是其他事务“更新”的数据
不可重复读:一个事务多次读取,结果不一样
幻读:一个事务读取了其他事务还没有提交的数据,只是读到的是其他事务“插入”的数据
3.如何解决问题
通过设置隔离级别来解决并发问题
4.隔离级别

read uncommitted:读未提交
read committed:读已提交
repeatable read:可重复读
serializable:串行化

熟能生巧

#视图
#一、含义 
mysql5.1版本出现的新特性,本身是一个虚拟表,它的数据来自于表,通过执行时动态生成。
好处:
1.简化了sql语句
2.提高了sql的重用性
3.保护基表的数据,提高了安全性
#二、创建
create view 视图名
as
查询语句;
#三、修改
方式一:
create or replace view 视图名
as
查询语句;
方式二:
alter view 视图名
as
查询语句;
#四、删除
drop view 视图1,视图2....
#五、查看
desc 视图名;
show create view 视图名;
#六、使用
插入:insert
修改:update
删除:delete
查看:select
注意:视图一般用于查询的,而不是更新的,所以具备以下特点的视图都不允许更新
》包含分组函数、group by 、distinct、having 、union
》join
》常量视图
》where后的子查询用到了from 中的比表
》用到了不可更新的视图
#七、视图和表的对比
	   关键字   是否占用物理空间            使用
视图    view      占用较小,只保存sql逻辑    一般用于查询
表      table     保存实际的数据            增删改查

#####
#常见约束
一、常见的约束
not null:非空,该字段的值必填
unique:唯一,该字段的值不可重复
default:默认,该字段的值不用手动插入有默认值
check:检查,mysql不支持
primary key:主键,该字段的值不可重复并且非空(相当于 unique + not null)
foreign key :外键,该字段的值引用了另外的表的字段

主键和唯一
  区别:一个表至多有一个主键,但可以有多个唯一
  主键不允许为空,唯一可以为空
  相同点:
  都具有唯一性
  都支持组合键,但不推荐
  
外键:
》用于限制两个表的关系,从表的字段值(外键列)引用了主表的某字段值(references列)
》外键列和主表的被引用列要求类型一致,意义一样,名称无要求
》主表的被引用列要求是一个key(一般就是主键)
》插入数据,先插入主表
删除数据,先删除从表
(#alter table 表名 drop foreign key fk_stuinfo_major[这是被删除的表中外键的名字];#删除外键

#alter table stuinfo add constraint fk_stu_major foreign key(major) references major(id);#添加外键
)
可以通过以下两种方式来删除主表的记录
#方式一:级联删除 
alter table stuinfo add constraint fk_stu_major foreign key(majorid) on delete cascade;#先添加这样的外键

delete from major where id=3;#此时直接删除主表的信息也可以

#方式二:级联置空
alter table stuinfo add constraint fk_stu_major foreign key(majorid) on delete set null;#先添加这样的外键

delete from major where id=2;#id被置空

二、创建表时添加约束
create table 表名(
    字段名 字段类型 not null,#非空
    字段名 字段类型 primary key,#主键
    字段名 字段类型  unique,#唯一
    字段名 字段类型 default 值,#默认
    constraint 约束名 foreign key(字段名) references 主表 (被引用列)
);

注意:
				支持类型               可以起约束名
列级约束         除了外键                 不可以
表级约束         除了非空和默认            可以,但对主键无效

列级约束可以在一个字段上追加多个,中间用空格隔开,没有顺序要求
表级约束也可以加多个,就在那个字段名最下面一条条加就可以
 
 三、修改表时添加或删除约束
 1.非空
 添加非空
 alter table 表名 modify column 字段名 字段类型 not null;
 删除非空
 alter table 表名 modify column 字段名 字段类型;
 
 2.默认
 添加默认
 alter table 表名 modify column 字段名 字段类型 default 值;
 删除默认
 alter table 表名 modify column 字段名 字段类型;
 
 3.主键
 添加主键
 alter table 表名 add 【constraint 约束名】primary key(字段名);
 删除主键
 alter table 表名 drop primary key;
 
 4.唯一
 添加唯一
 alter table 表名 add 【constraint 约束名】 unique(字段名);
 删除唯一
 alter table 表名 drop index 索引名;
 
 5.外键
 添加外键
 alter table 表名 add 【constraint 约束名】foreign key(字段名) references 主表(别引用列);
 删除外键
 alter table 表名 drop foreign key 约束名;
 
 
 #四、自增长列
 特点:
 1.不用手动插入值,可以自动提供序列值,默认从1开始,步长为1
 auto_increment_increment
 如果要更改七十至:手动插入值
 如果要更改步长:更改系统变量
 set auto_increment_increment = 值;
 2.一个表至多有一个自增长列
 3.自增长列只能支持数值型
 4.自增长列必须为一个key【这条只适用于mysql】
 
 创建表时设置自增长列
create table 表(
    字段名 字段类型 约束 auto_increment

);
 修改表时设置自增长列
 alter table 表 modify column 字段名 字段类型 约束 auto_increment
 
 删除自增长列
 alter table 表 modify column 字段名 字段类型 约束
 

变量

#变量

/*
系统变量:
		全局变量
		回话变量
自定义变量:
		用户变量
		局部变量
*/

#一、系统变量
/*

说明:变量由系统提供的,不是用户定义,属于服务器层面
注意:
如果是全局级别,则需要加global,如果是回话级别,则需要加session,如果不写,则默认session

使用语法:
1.查看所有的系统变量
show global|session variables;
2.查看满足条件的部分系统变量
show global|[session] variables like '%char%';
3.查看指定的某个系统变量的值
select @@gloable|[session].系统变量名;
4.为某个系统变量赋值
#方式一:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值