一 视图
1.视图的定义
视图是一个虚拟表,其内容由查询定义。
2.视图的优点
1)视点集中
2)简化操作
3)定制数据
4)分隔合并数据
5)安全性好
3.语法格式及限定条件
1)语法格式:create view 视图名 as select 语句;
2)限定条件:
像表一样,视图命名必须唯一
创建视图没有数量限制
创建视图必须有安全访问权限(由数据库管理员授予)
视图可以嵌套,即可以建立一个视图,该视图可以使用基于其他视图返回数据的查询
视图不可以建立索引,触发器
4.视图的应用
1)使用视图简化连接
create view jhlj as select c.cust_id,c.cust_name,c.cust_contact,oi.prod_id from customers as
c,orders as o,orderitems as oi where c.cust_id=o.cust_id and o.order_num=oi.order_num;
查看订购了 TNT2 客户信息
select * from jhlj where prod_id='TNT2';
2)使用视图重新格式化检索数据
create view gsh as select concat(trim(vend_name),'(',trim(vend_country),')') as vend_title from vendors;
3)使用视图过滤不需要的数据
create view glsj as select cust_id,cust_email from customers where cust_email is not null;
4)使用视图创建计算字段
create view jszd as select order_num,prod_id,quantity,item_price,quantity*item_price as price_count from orderitems;
5.更新视图
1)可以对视图使用 insert、update、delete 语句用以更新视图中的数据。但是更新视图中的数据,数据来源的底层表中的数据也会被更改。
create view order_test as select * from orders;
delete from order_test where order_num=20009;
select * from order_test;
select * from orders;
2)不是所有的视图都可以更新
分组(使用 group by 和 having ) 连接 子查询 联合 聚合函数 distinct 计算列
6.删除视图
drop view 视图名;
注:删除视图不会删除视图中数据来源的基本表
二 事务
1.相关概念
1)事务(transaction):一组 SQL 语句
2)回滚(rollback):撤销指定 SQL 语句的处理过程
3)提交(Commit):将还未保存的数据库语句写入数据库表
4)保存点 (Savepoint):事务集中的一个临时占位符,可进行回滚(与撤销整个事务不同)
2.事务的特性(ACID)
A.原子性:要么全部执行,要么全不执行
C.一致性:事务的相关操作,需要保持数据的一致
I.隔离性:事务与事务间互相隔离
D.持久性:事务一旦提交,数据立即生效
3.使用事务处理
1)创建测试用表
create table nmx ( n_id int not null auto_increment, n_name char(20)paimary key (n_id) )engine=InnoDB;
insert into nmx values()
2)开启事务
start transaction;
delete from nmx;
select * from nmx;
退出数据库,重新登录后
select * from nmx;
发现表中数据未被删除
3)使用 rollback 回滚
start transaction;
delete from nmx;
select * from nmx;
rollback;
select * from nmx;
注:rollback 只可以在一个事务中使用(在一个 START TRANSACTION 命令被声明之后)。事务处理是用来管理 insert,update 和 delete 语句的,不能对 select 语句回(无任何意义)。不能对 create 或 drop 操作回滚。并不是所有的数据库引擎都支持事务管理,show engines 可以查看哪些数据库引擎支持事务
4)使用 commit 操作
start transaction;
delete from nmx where n_id=‘1’;
commit;
退出数据库,重新登录后
select * from nmx;
发现表中数据已被删除
注:在一个 commit 和 rollback 语句执行之后,事务自动关闭(将来更改会隐式提交)。隐式提交和显式提交:DBMS 自动帮你执行 commit 操作被称为隐式提交,手动输入 commit 命令完成提交动作被称为显式提交
5)使用保存点
start transaction;
delete from nmx where n_id=3;
savepoint s1;
delete from nmx;
select * from nmx;
rollback to s1;
select * from nmx;
注:如果回滚至某保存点创建之前的状态,则该保存点不再生效
保存点必须在事务模式下使用(在 start transaction 后使用)
每个保存点都需要由唯一的名字来标识,
保存点越多,对回滚的管理就越灵活。
保存点在一个事务处理完成后自动释放(即执行一个 rollback 或者 commit 之后),也可以使用 release savepoint 显式释放保存点。
start transaction;
delete from nmx where n_id=3;
savepoint s1;
delete from nmx;
select * from nmx;
release savepoint s1;
rollback to s1;
这时会提示:SAVEPOINT s1 does not exist
此时可以直接回滚来恢复原来数据
6)修改默认提交
关闭自动提交:set autocommit=0
开启自动提交:set autocommit=1
三 全球化和本地化
1.基本概念
1)字符集(Character set):单词和符号的集合。
2)编码(Encoding):字符集成员的内部表示。
3)排序规则(Collation):规定字符如何比较的指令。
注:不同的排序规则不仅影响排序(使用 ORDER BY 对数据排序),也会影响搜索(如 where语句在查找 CAR 时是否能找到 car);在 MariaDB 中,执行常规的的数据库活动(select 、insert等)没有太多担心的必要。需要担心的是在服务器、数据库、表的层级上决定使用哪种字符集和排序规则。
2.使用字符集和排序规则
1)查看 MariaDB 支持的字符集和排序规则
查看支持的字符集: show character set;
查看排序规则: show collation;
2)查看当前 DBMS 正在使用的字符集和排序规则
查看正在使用的字符集:show variables like 'character%';
查看正在使用的排序规则:show variables like 'collation%';
注:在创建表时,可以同时指定该表使用的字符集和排序规则。
如果仅指定了字符集,没有指定排序规则,那么将会使用该字符集的默认排序规则。
如果字符集和排序规则都没有指定,则会使用数据库默认字符集和排序规则。
3)创建表时指定默认字符集,指定某字段使用的字符集
create table mx ( h_id int not null, h_name char(20) character set utf8 ) default character set latin1;
4)指定排序规则检索数据
select * from orderitems order by prod_id collate latin1_general_cs;
注:指定的排序规则必须是该表使用的字符集中的排序规则之一。