/*视图*/
/*虚拟表,不保存视图,只保存一个简单的查询语句*/
/*视图中的数据来源于基表,可以通过视图对基表的数据进行增,删,改查,(在满足一定条件下)*/
/*表变量*/
declare @tab table
(
tid int primary key,
price money check(price>3000),
sid int default
)
--允许加约束
--表变量之间不可以有相互引用的关系
/*临时表*/
--1.局部临时表:
--只对当前连接有效,当连接断开的时候临时表消失
--局部临时表名称前加#
create table #emp
(
eid int primary key,
ename varchar(10),
esal money check(esal>300)
)
insert into #emp select 1001,'accp',5678
--临时表不可能创建外键,但可以有其他约束
--全局临时表
--对所有连接有效,创建表的连接断开临时表消失
--全局临时表前加两个##
、
/*首选表变量其次临时表,最后关系表*/
--全局临时表不可创建外键,但可以有其他类型的约束
/*视图*/
create table dept
(
did int primary key,
dname varchar(10)
)
create table emp
(
eid int primary key,
ename varchar(10),
did int references dept(did)
)
insert into dept select 1001,'财务部'
union select 1002,'人事部'
union select 1003,'行政部'
union select 1004,'技术部'
insert into emp select 2001,'rose',1001
union select 2002,'jack',1003
union select 2003,'will',1002
union select 2004,'gigi',1004
--drop table dept
/*创建视图*/
create view v as select * from emp
--v为视图名,as为必须
/*查询视图*/
select * from v
/*通过视图V向基表emp录入数据*/
insert into v values(2005,'mikel',1003)
/*通过视图向基表更新数据*/
update v set ename='helen' where eid=2005
/*通过视图删除基表的数据*/
delete from v where eid=2005
--drop view v
/*视图不包含主键列*/
create view v as select ename,did from emp
select * from v
--可以查询,可以删除,可以更新,不可以插入
/*当所创建的视图不包含基表所有非空列的时候,不能通过该视图进行数据录入*/
/*多表视图*/
/*重定义视图*/
alter view v
as select did from emp
create view v as select eid,ename,emp.did as edid,dept.did as did,dname
from emp,dept where emp.did=dept.did
--创建多表连接的时候,视图中的列名必须唯一
--如果没有where子句,则结果为两表的笛卡儿积
/*视图包含所有的列*/
delete from v
--不可删除数据,因为修改会影响多个基表
insert into v values(11,'aa',1001,1008)
--不能录入数据,因为修改会影响到多个基表
update v set ename='ee',dname='cc'
--更新,影响到一个基表时可以,多个基表则不允许
/*视图不包含基表的所有非空列*/
--可以查询,不可删除,插入,
--更新同上
/*where条件*/
alter view v as select * from dept where did>1003
--定义视图时指定的where条件对查询起作用
delete from v where did=1001
--对删除起作用
update v set dname='aa' where did=1001
--对更新起作用
insert into v values(1001,'dd')
--对插入不起作用,但是查询不到
/*虚拟表,不保存视图,只保存一个简单的查询语句*/
/*视图中的数据来源于基表,可以通过视图对基表的数据进行增,删,改查,(在满足一定条件下)*/
/*表变量*/
declare @tab table
(
tid int primary key,
price money check(price>3000),
sid int default
)
--允许加约束
--表变量之间不可以有相互引用的关系
/*临时表*/
--1.局部临时表:
--只对当前连接有效,当连接断开的时候临时表消失
--局部临时表名称前加#
create table #emp
(
eid int primary key,
ename varchar(10),
esal money check(esal>300)
)
insert into #emp select 1001,'accp',5678
--临时表不可能创建外键,但可以有其他约束
--全局临时表
--对所有连接有效,创建表的连接断开临时表消失
--全局临时表前加两个##
、
/*首选表变量其次临时表,最后关系表*/
--全局临时表不可创建外键,但可以有其他类型的约束
/*视图*/
create table dept
(
did int primary key,
dname varchar(10)
)
create table emp
(
eid int primary key,
ename varchar(10),
did int references dept(did)
)
insert into dept select 1001,'财务部'
union select 1002,'人事部'
union select 1003,'行政部'
union select 1004,'技术部'
insert into emp select 2001,'rose',1001
union select 2002,'jack',1003
union select 2003,'will',1002
union select 2004,'gigi',1004
--drop table dept
/*创建视图*/
create view v as select * from emp
--v为视图名,as为必须
/*查询视图*/
select * from v
/*通过视图V向基表emp录入数据*/
insert into v values(2005,'mikel',1003)
/*通过视图向基表更新数据*/
update v set ename='helen' where eid=2005
/*通过视图删除基表的数据*/
delete from v where eid=2005
--drop view v
/*视图不包含主键列*/
create view v as select ename,did from emp
select * from v
--可以查询,可以删除,可以更新,不可以插入
/*当所创建的视图不包含基表所有非空列的时候,不能通过该视图进行数据录入*/
/*多表视图*/
/*重定义视图*/
alter view v
as select did from emp
create view v as select eid,ename,emp.did as edid,dept.did as did,dname
from emp,dept where emp.did=dept.did
--创建多表连接的时候,视图中的列名必须唯一
--如果没有where子句,则结果为两表的笛卡儿积
/*视图包含所有的列*/
delete from v
--不可删除数据,因为修改会影响多个基表
insert into v values(11,'aa',1001,1008)
--不能录入数据,因为修改会影响到多个基表
update v set ename='ee',dname='cc'
--更新,影响到一个基表时可以,多个基表则不允许
/*视图不包含基表的所有非空列*/
--可以查询,不可删除,插入,
--更新同上
/*where条件*/
alter view v as select * from dept where did>1003
--定义视图时指定的where条件对查询起作用
delete from v where did=1001
--对删除起作用
update v set dname='aa' where did=1001
--对更新起作用
insert into v values(1001,'dd')
--对插入不起作用,但是查询不到