mysql字符集、校对集与触发器

1、字符集与校对集:

create table 表名(
列声明
)charset utf8;

set names gbk;

mysql字符集设置非常灵活:数据库默认字符集、表默认字符集、列字符集,如果某一个级别没有指定字符集、则继承上一级

客户(gbk)----->字符集转换器(gbk–>utf8–>utf8;gbk–>gbk–>utf8)------>服务器(utf8)----->字符集转换器(…)–查询结果—>客户(utf8)

  1. 告诉服务器,我给你发送的数据是什么编码的?character_set_client
  2. 告诉转换器,转换成什么编码? charset_set_connection
  3. 查询的结果用什么编码? chanset_set_results

使用方法,例,客户端:set character_set_client=gbk/utf8
如果以上3者都为字符集N,则可以简写为set names N

推论:什么时候会乱码?

  1. client声明与事实不符
  2. results与客户端页面不符的时候

什么时候将会丢失数据?
connection和服务器的字符集比client 小时

校对集:

指字符集的排序规则,一种字符集可以有多种排序规则
eps:以utf8为例,我们默认的utf8_general_ci,也可以按二进制来排序,utf8_bin
声明校对集:create table (…)charset utf8 collate utf8_general_ci;
注意:声明的校对集必须是字符集合法的校对集

2、触发器:trigger

作用:简史某种情况并触发某种操作
应用场景:电子商城,当一个订单(表)产生时,订单所购的商品的库存量(表)相应减少(监视某表的变化,当其发生某种变化时,触发另一个表的操作,即:多个sql语句是一个整体,一气呵成)
监视地点:表
监视事件:增删改
触发操作:增删改
出发时间:after/before
创建:

create trigger triggerName 
after/before insert/update on 表名 
for each row //sqlserver可选,mysql这一句固定
begin: 
sql 语句	#一句或多句 
end;

设置语句结束符:delimiter ( ( (为设置的结束符)

1.新增订单,库存单相应减少

eps:简单实例

create trigger tg1 
after insert on o 
for each row 
begin 
update g set num=num-3 where id=2;
end$

删除触发器:drop trigger 触发器名;

查看触发器:show triggers;

eps:改进,如何在触发器中引用行的值(增,用new.列名)
对于insert而言,新增的行用new来表示,航中的每一列的值,用new.列名来表示

create trigger tg2 
after insert on o 
for each row 
begin 
update g set num=num-new.much where id=new.gid;
end$

2.删除一个订单时,库存单相应增加(删,用old.列名)

create trigger tg3 
after delete on o 
for each row 
begin 
update g set num=num+old.much where id=old.gid;
end$

3.修改订单的数量时(只有much变,数量),库存单相应改变(改前,用old.列名;改后,用new.列名)

create trigger tg4 
after update on o 
for each row 
begin 
update g set num=num+old.much-new.much where id=new.gid;
end$

4.修改订单(gid和much都可能变)时,库存单相应改变(改前,用old.列名;改后,用new.列名)

create trigger tg5
after update on o 
for each row 
begin 
update g set num=num+old.much where id=old.gid;
update g set num=num-new.much where id=new.gid;
end$

5.after和before的区别

after是先完成数据的增删改,再触发,触发中的语句晚于增删改,无法影响前面的增删改操作
before是先完成触发,再增删改,触发的语句先于坚实的增删改发生,我们有机会判断,修改即将发生的操作

目的:触发事件先于监事事件发生,并判断监视事件的数据

create trigger tg6
before insert on o
for each row
begin
if new.much>5 then
   set new .much=5;
end if;
   update g set num=num-new.much where id=new.gid;
end$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值