文章目录
1、字符集与校对集:
create table 表名(
列声明
)charset utf8;
set names gbk;
mysql字符集设置非常灵活:数据库默认字符集、表默认字符集、列字符集,如果某一个级别没有指定字符集、则继承上一级
客户(gbk)----->字符集转换器(gbk–>utf8–>utf8;gbk–>gbk–>utf8)------>服务器(utf8)----->字符集转换器(…)–查询结果—>客户(utf8)
- 告诉服务器,我给你发送的数据是什么编码的?character_set_client
- 告诉转换器,转换成什么编码? charset_set_connection
- 查询的结果用什么编码? chanset_set_results
使用方法,例,客户端:set character_set_client=gbk/utf8
如果以上3者都为字符集N,则可以简写为set names N
推论:什么时候会乱码?
- client声明与事实不符
- 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$