1.视图
定义:视图是虚拟的表,本身并不包含数据,只是包含使用时动态检索数据的查询,只是用来查看存储在别处的数据的一种设施
- 创建与查看视图
mysql> create view prodcusters as select cust_name,cust_contact,prod_id
from customers,orders,orderitems where customers.cust_id=orders.cust_id
and orders.order_num=orderitems.order_num;#创建视图
mysql> select cust_name,cust_contact from prodcusters where prod_id='TNT2';#使用视图
操作 | 示例 |
---|---|
创建视图 | create view viewname as …(select语句) |
显示视图 | show create view prodcusters; |
显示列信息 | show columns from prodcusters; |
删除视图 | drop view prodcusters; |
- 如果mysql不能正确的确定被更新的基数据,则不允许更新,即当视图的mysql构成中含有group by,having 等子句时
2.存储过程
- 使用create procedure procedure_name() begin … end;创建一个存储过程
- 对于存储过程在命令行上创建时要记得使用
delimiter //
将分隔符设置为;
等。 - 在mysql中的变量名要使用
@
符号开始。 - 在使用参数时使用IN/OUT指定是传入还是传出参数
- mysql中的注释是以–开头的
3.使用游标
设计游标的原因:对检索结果只能成批处理提出的一种优化方法,可用于对检索结果有选择的处理,其本质是存储在mysqsl服务器上的数据库查询,注意mysql中的游标只能用于存储过程(和函数)。
声明游标的具体示例:
create procedure processorders()
BEGIN
declare ordernums cursor
for //创建名字为ordernums的游标
select order_num from orders;
END;
操作 | 示例 |
---|---|
打开游标 | open ordernums;(会在此时执行查询语句) |
关闭游标 | close ordernumbers; |
使用游标数据 | … fetch ordernums into o;(o为事前声明的变量) |
- 注意declare语句的发布存在特定的次序,用declare语句定义的局部变量必须在定义任意游标和句柄之前,而句柄必须在游标之后定义。
4.触发器
触发器指当某个表发生改动时自动处理或者执行一条sql语句,在mysql中只有以下几条命令可以使用触发器,即在执行以下命令时直接自动执行一条MySQL语句:(其他语句不支持触发器)
- delete
- insert
- update
操作 | 示例 |
---|---|
创建触发器 | create trigger tri_name; |
删除触发器 | drop trigger tri_name; |
insert触发器 | create trigger tname after insert on orders for each row select NEW.order_num; |
5.事务管理处理
保证成批的mysql语句被执行,属性是ACID,需要注意的是几个事务处理的术语:
- transaction , 指一组SQL语句
- rollback , 指撤销指定SQL语句的过程
- commit 将结果写入表中
- savepoint , 常用于事务回退
6.附上几个面试题(心碎。。。)
1.一定注意,条理清晰,组织得当,不要瞎说,要和面试官交谈,问题答案不重要,不要直接告诉答案,要思考为什么。。。欸,没注重和面试官沟通,有些没必要说的都说了。。。
2.static 变量线程安全吗?
不安全,存储位置可见。
3.类里面的静态变量,围绕存储区,初始化讲
独属于类,生命周期,初始化方式,静态成员函数
4.谈一谈对Linux系统的了解
5.read/write系统调用读写文件的过程
通过struct file获取文件的读写指针,然后借由vfs层的接口,调用文件系统层的相关read,write函数实现文件读写。。
6.reactor反应堆模型
为事件源设置事件管理器,让reactor管理器监听fd,当读写事件来临时调用对应的事件源事件管理器的回调函数即可。
7.为什么选择线程池(项目)。。。
8.用时创建线程与线程池的区别(减少申请起源与释放资源的时间,提高了效率)
9.wait与sleep的区别与联系
wait调用时会被阻塞挂起,可以被中断。而sleep则是原子操作,不可以被中断。