Mysql (三) - 视图、字符集、校对集、触发器

本文详细介绍了MySQL中的视图概念,包括其作用、创建、修改和删除操作,以及视图与表的关系。接着讨论了字符集和校对集,阐述了它们的设置及可能引发的乱码和数据丢失问题。最后,讲解了触发器的原理,包括触发器的创建、删除语法,以及before和after的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 视图

视图 是由查询结果形成的虚拟表

视图的作用:
· 简化查询
· 可以进行权限控制,封闭表权限,开放视图权限
· 用于大数据分表

视图和表的关系
· 视图是表的查询结果,影响了结果
· 视图增删改也可以影响表
· 视图的增删改不一定影响表,视图的数据和表的数据一一对应时,可以修改,视图必须包含所有表中没有默认值的列
· 对于insert 语句注意,视图必须包含表中没有默认值的列

创建视图语法:create view 视图名 as select 语句;
修改视图: alter view 视图名 as select 语句;
删除视图: drop view 视图名;

视图的algorithm

algorithm = merge / temptable / undefined

merge : 当引用视图时,引用视图语句和定义视图语句合并
(merge 是一种规则,查询 where 和 创建视图 where 合并在一起,分析成 select 语句)
temptable : 当引用视图时,根据视图创建一个临时表
undefined : 未定义,让系统决定

create algorithm = temptable view vPersons2 as select * from Car;

2. 字符集

mysql 可以设置以下字符集(未指定,则继承上级):
- 服务器
- 数据库
- 表
- 列

显示所有字符集:SHOW CHARACTER SET;

如何设置字符集?
set character_set_client = gbk;
set character_set_connection = gbk;
set character_set_results= gbk;
简写为 set names gbk;

什么时候出乱码?
1. client 声明 和 事实 不符
2. result 和 client 不符

什么时候会丢失数据?
1、connection 和 服务端 比 client 范围小

3. 校对集

校对集:是排序规则,一个字符集可以有一个或多个排序规则。

显示所有校对集:SHOW COLLATION;

校对集 需和 字符集 对应

4. 触发器

触发器(trigger): 监视某种情况并触发某种操作

触发器创建语法四要素
· 监视地点 table
· 监视事件 insert / update / delete
· 触发时间 before / after
· 触发事件 insert / update / delete

创建语法:
create trigger triggerName
after / before insert /update /delete
on tableName
Begin
sql语句;
End;

删除语法:
drop trigger triggerName ;

注意点:
· 需先设置标示分界符 :delimiter $ (不要加分号)
· 对于insert ,新增的行用 new 表示,行中每一列 用 new. 列名表示
· 对于update ,更新后的行用 new 表示,更新前的行用old表示
· 本表进行修改不需要用 update 表名 直接用 set
(参考:http://www.chenyudong.com/archives/database-trigger-new-old-value-understand.html
· 对 new 赋值,只能用于 before

before 和 after 区别:
· before : 先完成触发再增删改
· after :先增删改再触发

create trigger tg1
before update on Car
for each row 
begin
set new.SaleNum = old.SaleNum  + old.StoreNum - new.StoreNum ;
End $

查看触发器: show triggers ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值