🏝?專欄:Mysql_貓咪-9527的博客-CSDN博客
🌅主頁:貓咪-9527-CSDN博客?“欲窮千里目,更上一層樓。會當凌絕頂,一覽眾山小。”
目錄
實驗四索引與視圖?
1.實驗數據如下
student 表(學生表)
course 表(課程表)
teacher 表(教師表)
score 表(成績表)
2. 插入數據
student 表中的數據
course 表中的數據
teacher 表中的數據
score 表中的數據
4-1 創建唯一索引 idx_snme 并按姓名升序排列
1.修改黎明為張偉(4.2刪除索引后記得改回來)
2.不建立唯一索引,建立普通索引
3.刪除一條姓名為黎明的數據(4.2記得添加回來)
4-2 刪除索引 idx_snme
1.接4-1方法1?
?2.接4-1方法2
3.接4-2方法三?
4-3 創建聯合索引 idx_sname_dept 在 sname 和 dept 字段上
4-4 在 course 表的 cname 字段上創建唯一索引 uk_cname
4-5 在 course 表的 cname 字段上創建前綴長度為4個字符的前綴索引pf_cname
4-6 在 course 表的 cname 字段上創建全文索引
4-7 創建計算機系學生的視圖 student_cs
4-8 創建包含“學號”和“平均成績”的視圖 v_grade_avg
4-9 查詢視圖 v_grade_avg 中,平均成績大于 90 分的學生信息
4-10 創建信息系學生的視圖 v_information,并保證修改和插入操作時只有信息系的學生
4-11 修改視圖 vinformation,使得修改和插入操作時只包含“學號”“姓名”“專業”字段
4-12 使用 INSERT 語句向視圖 vinformation 中插入一條數據
實驗四索引與視圖?
實驗目的:
通過實驗進一步理解索引、視圖的使用方法。
1.實驗數據如下
student 表(學生表)
CREATE TABLE student (sno CHAR(5) PRIMARY KEY,snme VARCHAR(20) NOT NULL, sdept VARCHAR(20) NOT NULL, sclass CHAR(2) NOT NULL, ssex CHAR(1), birthday DATE, totalcredit DECIMAL(4,1)
);
course 表(課程表)
CREATE TABLE course (cno CHAR(3) PRIMARY KEY,cname VARCHAR(50), ctime DECIMAL(3,0), credit DECIMAL(3,1)
);
teacher 表(教師表)
CREATE TABLE teacher (tno CHAR(6) PRIMARY KEY, tname VARCHAR(20), tsex CHAR(1), tdept VARCHAR(20)
);
score 表(成績表)
CREATE TABLE score (sno CHAR(5), cno CHAR(3), tno CHAR(6), grade DECIMAL(5,1), PRIMARY KEY (sno, cno, tno), CONSTRAINT fk_sno FOREIGN KEY(sno) REFERENCES student(sno),CONSTRAINT fk_cno FOREIGN KEY(cno) REFERENCES course(cno),CONSTRAINT fk_tno FOREIGN KEY(tno) REFERENCES teacher(tno)
);
2. 插入數據
student 表中的數據
INSERT INTO student VALUES('96001', '馬小燕', '計算機', '01', '女', '2000/01/02', 0);
INSERT INTO student VALUES('96002', '黎明', '計算機', '01', '男', '2000/03/05', 0);
INSERT INTO student VALUES('96003', '劉東明', '數學', '01', '男', '2000/10/05', 0);
INSERT INTO student VALUES('96004', '趙志勇', '信息', '02', '男', '2000/08/08', 0);
INSERT INTO student VALUES('97001', '馬蓉', '數學', '02', '女', '2001/03/04', 0);
INSERT INTO student VALUES('97002', '李成功', '計算機', '01', '男', '2001/09/10', 0);
INSERT INTO student VALUES('97003', '黎明', '信息', '03', '女', '2002/02/08', 0);
INSERT INTO student VALUES('97004', '李麗', '計算機', '02', '女', '2002/01/05', 0);
INSERT INTO student VALUES('96005', '司馬志明', '計算機', '02', '男', '2001/11/23', 0);
course 表中的數據
INSERT INTO course VALUES('001', '數學分析', 64, 4);
INSERT INTO course VALUES('002', '普通物理', 64, 4);
INSERT INTO course VALUES('003', '微機原理', 56, 3.5);
INSERT INTO course VALUES('004', '數據結構', 64, 4);
INSERT INTO course VALUES('005', '操作系統', 56, 3.5);
INSERT INTO course VALUES('006', '數據庫原理', 56, 3.5);
INSERT INTO course VALUES('007', '編譯原理', 48, 3);
INSERT INTO course VALUES('008', '程序設計', 32, 2);
teacher 表中的數據
INSERT INTO teacher VALUES('052501', '王成剛', '男', '計算機');
INSERT INTO teacher VALUES('052502', '李正科', '男', '計算機');
INSERT INTO teacher VALUES('052503', '嚴敏', '女', '數學');
INSERT INTO teacher VALUES('052504', '趙高', '男', '數學');
INSERT INTO teacher VALUES('052505', '劉玉蘭', '女', '計算機');
INSERT INTO teacher VALUES('052506', '王成剛', '男', '信息');
INSERT INTO teacher VALUES('052507', '馬悅', '女', '計算機');
score 表中的數據
INSERT INTO score VALUES('96001', '001', '052503', 77.5);
INSERT INTO score VALUES('96001', '003', '052501', 89);
INSERT INTO score VALUES('96001', '004', '052502', 86);
INSERT INTO score VALUES('96001', '005', '052505', 82);
INSERT INTO score VALUES('96002', '001', '052504', 88);
INSERT INTO score VALUES('96002', '003', '052502', 92.5);
INSERT INTO score VALUES('96002', '006', '052507', 90);
INSERT INTO score VALUES('96005', '004', '052502', 92);
INSERT INTO score VALUES('96005', '005', '052505', 90);
INSERT INTO score VALUES('96005', '006', '052505', 89);
INSERT INTO score VALUES('96005', '007', '052507', 78);
INSERT INTO score VALUES('96003', '001', '052504', 69);
INSERT INTO score VALUES('97001', '001', '052504', 96);
INSERT INTO score VALUES('97001', '008', '052505', 95);
INSERT INTO score VALUES('96004', '001', '052503', 87);
INSERT INTO score VALUES('96003', '003', '052501', 91);
INSERT INTO score VALUES('97002', '003', '052502', 91);
INSERT INTO score VALUES('97002', '004', '052505', NULL);
INSERT INTO score VALUES('97002', '006', '052507', 92);
INSERT INTO score VALUES('97004', '005', '052502', 90);
INSERT INTO score VALUES('97004', '006', '052501', 85);
?注:把上面的實驗數據添加上再開始實驗。
4-1 創建唯一索引 idx_snme
并按姓名升序排列
數據有沖突,建議一下三種方法:(三種方法任選一種)?
1.修改黎明為張偉(4.2刪除索引后記得改回來)
update student set snme='張偉' where snme='黎明' and sdept='信息';
create unique index idx_snme on student(snme);
?
2.不建立唯一索引,建立普通索引
create index idx_snme on student(snme);
3.刪除一條姓名為黎明的數據(4.2記得添加回來)
delete from student where snme='黎明' and sdept='信息';
create unique index idx_snme on student(snme);
4-2 刪除索引 idx_snme
1.接4-1方法1?
drop index idx_snme on student;
update student set snme='黎明' where snme='張偉' and sdept='信息';
?2.接4-1方法2
drop index idx_snme on student;
3.接4-2方法三?
drop index idx_snme on student;
INSERT INTO student VALUES('97003', '黎明', '信息', '03', '女', '2002/02/08', 0);
4-3 創建聯合索引 idx_sname_dept
在 sname
和 dept
字段上
create index idx_snme_dept on student(snme,sdept);
4-4 在 course
表的 cname
字段上創建唯一索引 uk_cname
create unique index uk_cname on course(cname);
4-5 在 course
表的 cname
字段上創建前綴長度為4個字符的前綴索引pf_cname
create index pf_cname on course(cname(4));
4-6 在 course
表的 cname
字段上創建全文索引
create fulltext index ft_cname on course(cname);
4-7 創建計算機系學生的視圖 student_cs
create view student_cs as select *from student where sdept='計算機';
4-8 創建包含“學號”和“平均成績”的視圖 v_grade_avg
create view v_garde_avg as select sno 學號,avg(grade)平均成績 from score group by sno;
4-9 查詢視圖 v_grade_avg
中,平均成績大于 90 分的學生信息
select *from v_garde_avg where 平均成績>90;
4-10 創建信息系學生的視圖 v_information
,并保證修改和插入操作時只有信息系的學生
create view v_information as select *from student where sdept='信息'
with check option;
4-11 修改視圖 vinformation
,使得修改和插入操作時只包含“學號”“姓名”“專業”字段
當視圖被創建后限制信息無法修改,只能刪除視圖后重新創建?
方法一:?
drop view v_information;
create view v_information as
select sno 學號,snme 姓名, sdept 專業 from student where sdept='信息'
with check option;
方法二:
create or replace view v_information as select sno,sname,sdept
from student where sdept='信息' with check option;
4-12 使用 INSERT
語句向視圖 vinformation
中插入一條數據
insert into student(sno,snme,sdept,sclass) values('98001','王立紅','信息',02);