尽管触发器有很多优点,但是在实际的项目开发中,特别是OOP思想的深入,触发器的弊端也逐渐突显,主要:
SQL Server 包括两种常规类型的触发器:数据操作语言 (DML) 触发器和数据定义语言 (DDL) 触发器。 当INSERT、UPDATE 或 DELETE 语句修改指定表或视图中的数据时,可以使用 DML 触发器。 DDL 触发器激发存储过程以响应各种 DDL 语句,这些语句主要以CREATE、ALTER 和 DROP 开头。 DDL 触发器可用于管理任务.
语法
------------------------------------------------------
CREATE TRIGGER trigger_name
ON {table_name | view_name}
{FOR | After | Instead of} [insert, update,delete]
AS
sql_statement
-------------------------------------------------------
关键词 trigger
-------------------------------------------------------
create trigger 触发器名称 //创建触发器
after insert on table1 //触发器类型,什么时候启动触发器
for each row //受影响的行
begin //开始
insert into table2(table2_id) values(new.table1_id);// 触发器要执行的业务
end;
创建一张虚拟的表:少执行SQL语句,因为在和java连接的时候,每执行一条语句就会连接JDBC接口,消耗资源。
普通员工无法查看薪资,管理成可以查看,
SQL语句举例:
if( type = "employee" ){
String sql = "select id, name from employee";
}
if (tyepe = "manager"){
String sql = " select * from employee";
}
String sql = " select * from employee";
最笨的办法是创建两张表,区别是一张有薪资 一张没有薪资字段。维护数据的时候,必须同时维护两张表。
查询数据
用于结合合计函数,根据一个或者多个列对结果集进行分组(其后面如果要添加条件不能使用where,而是having)
select * column_naem,function(column_name) from table_name GROUP BY column_name
对分组后的数据进行筛选
查询每个部分的工资大于1200的员工平均工资,且平均工资大于2200
select deptno,AVG(sal) from emp where sal>1200【分组之前的条件查询】 group by deptno HAVING AVG(sal)>2200;
根据指定的列对结果集进行排序
select column_name,column_name from table_name order by column_name ASC|DESC;(asc升序,desc降序)
select column_name[column_name] from table1[table2] where
column_name operator (select column_name[column_name] from table1[table2][where])
select * from customers where id in (select id from customers where salary>4500)
select column_name(s) from table1 union select column_name(s) from table2