📄 谢妮娜.txt
字号:
1,给一个表创建视图,该试图不包含约束为not null的列,怎么给该视图插入数据?对于not null约束的列,可以给个常量作为该列的默认值。
create or replace trigger shooping_tri
instead of insert
on shooping_view for each row
declare
shu int;
begin
select count(*) into shu from shooping where id =:new.id;
if shu=0 then
insert into shooping values(:new.id,:new.gid,:new.count,100);
end if;
end;
========================================================================================
2,创建一个序列
create sequence seq_x
increment by 1
start with 1
order;
========================================================================================
3,用scott用户登陆,建一张表,至少包含id,name,sex,date列,插入1000000条数据,为了防止表名重复,建议大家用自己的名字做表名。用练习2创建的序列给该表的id加值,列id为该表的主键
给name列创建B树索引,按该列查询
给sex列创建位图索引,按该列查询
给date列创建函数索引,按该列查询
把查询的结果也写到你的答案里
***************************************************************表结构
SQL> desc xnn_tab;
Name Type Nullable Default Comments
-------- ------------ -------- ------- --------
ID INTEGER
NAME VARCHAR2(20) Y
SEX CHAR(6) Y
BRITHDAY DATE Y
***************************************************************数据行总数
SQL> select count(*) from xnn_tab;
COUNT(*)
----------
1000000
****************************************************************建立索引
------ 给name列创建B树索引
SQL> create index idx_name on xnn_tab(name);
Index created
-------对name列进行查询:
SQL> select id,name from xnn_tab where not name ='wangjian';
ID NAME
--------------------------------------- --------------------
7 xiaohong
8 zhangjun
9 wanggang
10 hangqiang
11 jiangyun
12 huangjie
13 xueshan
14 shuhua
15 yujie
16 shubiao
10 rows selected
------ 给sex列创建位图索引
SQL> create bitmap index idx_sex on xnn_tab(sex);
Index created
-------对sex列进行查询:
SQL> select id,name from xnn_tab where sex='male';
ID NAME
--------------------------------------- --------------------
8 zhangjun
9 wanggang
13 xueshan
14 shuhua
16 shubiao
------ 给brithday列创建函数索引
create index idx_date on xnn_tab(to_char(brithday,'yyyy-mm-dd'));
Index created
-------对brithday列进行查询:
SQL> select id,name,brithday from xnn_tab where to_char(brithday,'yyyy-mm-dd')>'1984-12-30';
ID NAME BRITHDAY
--------------------------------------- -------------------- -----------
16 shubiao 1986-10-17
14 shuhua 1987-4-15
============================================================================================
4,根据练习3的三种查询结果,创建三个视图,然后对这三个视图做相应的查询
-------------------------------------------------------------------创建视图一并查询
create view xnn1_view
as
select id,name from xnn_tab where not NAME ='wangjian';
SQL> /
View created
查询:
SQL> select * from xnn2_view;
ID NAME
--------------------------------------- --------------------
7 xiaohong
8 zhangjun
9 wanggang
10 hangqiang
11 jiangyun
12 huangjie
13 xueshan
14 shuhua
15 yujie
16 shubiao
10 rows selected
------------------------------------------------------------------创建视图二并查询
SQL> create view xnn_3
2 as
3 select id,name from xnn_tab where sex='male';
View created
查询:
SQL> select * from xnn_3;
ID NAME
--------------------------------------- --------------------
8 zhangjun
9 wanggang
13 xueshan
14 shuhua
16 shubiao
--------------------------------------------------------------------创建视图三并查询
SQL> create view xnn4_view
2 as
3 select id,name,brithday from xnn_tab where to_char(brithday,'yyyy-mm-dd')>'1984-12-30';
View created
查询:
SQL> select * from xnn4_view;
ID NAME BRITHDAY
--------------------------------------- -------------------- -----------
16 shubiao 1986-10-17
14 shuhua 1987-4-15
===============================================================================
5,看书的索引那章,把创建索引的要求写下来(如:不同索引的差别,那些列应该创建索引,创建什么索引等等)
******************不同索引的差别?*****************
答:按索引数据的组织形式可以将索引分为三大类:
第一类:B树索引
第二类:位图索引
第三类:函数索引
三种索引的差别概述如下:
㈠B树索引
是最常用的一种索引,在创建索引时默认创建的是B树索引。B树索引按照B树结构组织并存放索引数据,它具有如下几个特点:①无论查询条件是哪种类型或算法,都具有基本相同的查询速度;
②无论对于大型表或小型表,效率相同;
③能够适应多种查询条件。
㈡位图索引
是通过为索引列的每个值建立一个位图,利用位图进行按位的逻辑运算来实现操作的。在基数很小的列上创建位图索引非常有效,在数据行很多的情况下,查询效率要高于在该列上创建B树索引。
㈢
函数索引
在对表进行查询操作时常常需要通过查询某列的函数或者表达式,创建函数索引即在索引中存储经常访问的、计算密集的函数或表达式。可以说,函数索引是B树索引或者位图索引的一种特殊形式,它既可以采用B树索引,也可以采用位图索引。
*******************那些列应该创建索引?**************
答:需要创建索引的列一般情况有如下几种:
①大部分列值不重复的列;
②列值包含很多个NULL值,且经常需要查询所有的非NULL值纪录的列;
③在经常要进行连接查询的多个表中,用于连接的列
④连接查询中使用到的外键列。
为列创建索引主要是为了提高对表进行查询操作的效率,而另一方面由于对表增、删、改的同时也需要修改索引,所以创建索引后,也会相应降低对表增、删、改的效率。因此,是否要为一个表的某列创建索引,必须综合考虑平时对表的该列进行增、删、改、查的操作频率。如果查询频率远远高于增、删、改的频率时,则需要为此列创建索引。反之,则不需要。
********************创建什么索引?****************
答:当需要为表的某列创建索引时,应该考虑该列的具体情况而选择索引种类:
①需要创建位图索引的列:
基数小的列(基数只达到纪录数的1%或大部分值重复100次以上)则对改列创建位图索引;常被具有逻辑查询条件的WHERE语句引用的列也应当建立位图索引;需要进行与NULL值相关的查询的列应当建立位图索引;需要节省存储空间是时候,也可以选择建立位图索引;
②需要创建B树索引的列:
具有高基数的列,特别是有主键约束和唯一性约束的列只能使用B数索引;经常使用"<"和">"等比较运算符进行查询的列,应当建立B树索引。
③需要创建函数索引的列:
如果对该列进行的查询操作一般不直接查询该列的数据,而是查询包含该列数据的函数或表达式时,则应该考虑为该列创建函数索引。需要注意的是:像SUM、AVG、MAX、MIN等为不同的行返回的不是单独的答案的函数,不能包含在函数索引的表达式中。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -