實驗日期: 2019 年 09 月 24 日
實驗報告日期: 2019 年 09 月 28 日
一、 實驗目的
熟悉oracle環境;
熟練掌握和使用PL-SQL建立資料庫基本表,
使用PL/SQL developer操作資料庫,
熟練掌握SQL 建立關系,及增刪改資料,
二、 實驗環境
Windows10專業版
Oracle database 11g
PL/SQL Developer 13
三、 實驗內容
了解SQL PLUS的使用
使用PL/SQL developer的圖形界面,建立圖書管理資料庫orcl中的各個關系
在建立的關系中輸入有效資料
洗掉以上各關系
在PL/SQL developer用SQL代碼建立orcl資料庫中各關系
用SQL 代碼完成資料增、刪、改
四、 實驗步驟
- 以SYSTEM登錄資料庫
打開PL/SQL developer,以用戶:SYSTEM,密碼:orcl,登錄orcl資料庫,如圖1所示:

圖1 登錄資料庫
- 注冊用戶
打開Users檔案夾,新建用戶,用戶名:S512017****,密碼定為orcl,并賦予connect和dba權限,


圖2、3 注冊新用戶并賦予權限
- 重新以新用戶登錄資料庫

圖4 以新用戶登錄資料庫
- 建立資料庫表
打開tables檔案夾,建立以下各關系:
圖書分類(圖書分類號,類名)
書目(ISBN, 書名,作者,出版單位,單價,圖書分類號)
圖書(圖書編號,ISBN,是否借出,備注)
讀者 (借書證號,姓名,單位,性別,地址,聯系電話,身份證編號)
借閱 (借閱流水號,借書證號,圖書編號,借書日期,歸還日期,罰款分類號,備注)
罰款分類(罰款分類號,罰款名稱,罰金)
預約 (預約流水號,借書證號,ISBN,預約時間)
(1) 圖形界面下建立:

圖5 設定表名

圖6 設定表的屬性列

圖7 設定表的主鍵
圖書分類表建立完成,其余各表的建立同理可建,如下(第一張為表名的設定(Name),接著是模式的設定(Columns),鍵的設定(Keys),約定條件的設定(Check),如果沒有則是不需要定義相關項):
書目:
圖書:
讀者:
借閱:
罰款分類:
預約:
(2) 由SQL陳述句建立:
圖書分類:
create table 圖書分類(
圖書分類號 varchar2(3) primary key,
類名 varchar2(10) not null
);
書目:
create table 書目(
ISBN varchar2(20) primary key,
書名 varchar2(20) not null,
作者 varchar2(20) not null,
出版單位 varchar2(30),
單價 number(10,2),
圖書分類號 varchar2(3),
foreign key(圖書分類號) references 圖書分類(圖書分類號)
);
圖書:
create table 圖書(
圖書編號 varchar2(7) primary key,
ISBN varchar2(20),
是否借出 varchar2(2),
備注 varchar2(60),
foreign key(ISBN) references 書目(ISBN),
check (是否借出 = '是' or 是否借出 = '否')
);
讀者:
create table 讀者(
借書證號 varchar2(8) primary key,
姓名 varchar2(10) not null,
單位 varchar2(30),
性別 varchar2(2),
地址 varchar2(30),
聯系電話 char(11),
身份證編號 varchar2(18),
check (性別 in ('男','女')),
check (regexp_like(聯系電話,'[0-9]{11}')),
check (regexp_like(身份證編號,'[0-9]{15}')
or regexp_like(身份證編號,'[0-9]{17}[0-9,X]'))
);
借閱:
create table 借閱(
借閱流水號 number primary key,
借書證號 varchar2(8) not null,
圖書編號 varchar2(8) not null,
借書日期 date not null,
歸還日期 date,
罰款分類號 number,
備注 varchar2(60),
foreign key(借書證號) references 讀者(借書證號),
foreign key(圖書編號) references 圖書(圖書編號)
);
罰款分類:
create table 罰款分類(
罰款分類號 number primary key,
罰款名稱 varchar2(8) not null,
罰金 number not null
);
預約:
create table 預約(
預約流水號 number primary key,
借書證號 varchar2(8),
ISBN varchar2(20),
預約時間 date not null,
foreign key(借書證號) references 讀者(借書證號),
foreign key(ISBN) references 書目(ISBN)
);
- 各關系輸入資料如下:
圖書分類(圖書分類號,類名)
圖書分類號 | 類名 |
100 | 文學 |
200 | 科技 |
300 | 哲學 |
書目(ISBN, 書名,作者,出版單位,單價,圖書分類號)
ISBN | 書名 | 作者 | 出版單位 | 單價 | 圖書分類號 |
7040195836 | 資料庫系統概論 | 王珊 | 高等教育出版社 | 39.00 | 200 |
9787508040110 | 紅樓夢 | 曹雪芹 | 人民出版社 | 20.00 | 100 |
9787506336239 | 紅樓夢 | 曹雪芹 | 作家出版社 | 34.30 | 100 |
9787010073750 | 心學之路 | 張立文 | 人民出版社 | 33.80 | 300 |
圖書(圖書編號,ISBN,是否借出,備注)
圖書編號 | ISBN | 是否借出 | 備注 |
2001231 | 7040195836 | 否 |
|
2001232 | 7040195836 | 是 |
|
1005050 | 9787506336239 | 否 |
|
1005063 | 9787508040110 | 是 |
|
3007071 | 9787010073750 | 是 |
|
讀者 (借書證號,姓名,單位,性別,地址,聯系電話,身份證編號)
借書證號 | 姓名 | 單位 | 性別 | 地址 | 聯系電話 | 身份證編號 |
20051001 | 王菲 | 四川綿陽西科大計算機學院 | 女 | … | … | .. |
20062001 | 張江 | 四川綿陽中心醫院 | 男 | … | … | .. |
20061234 | 郭敬明 | 四川江油305 | 男 | .. | .. | .. |
20071235 | 李曉明 | 四川成都工商銀行 | 男 | .. | .. | .. |
20081237 | 趙鑫 | 四川廣元廣元中學 | 女 | .. | .. | .. |
借閱 (借閱流水號,借書證號,圖書編號,借書日期,歸還日期,罰款分類號,備注)
借閱流水號 | 借書證號 | 圖書編號 | 借書日期 | 歸還日期 | 罰款分類號 | 備注 |
1 | 20081237 | 3007071 | 2010/09/19 | 2010/09/20 |
|
|
2 | 20071235 | 1005063 | 2010/10/20 | 2011/02/20 | 1 |
|
3 | 20071235 | 2001232 | 2011/09/01 |
|
|
|
4 | 20061234 | 1005063 | 2011/9/20 |
|
|
|
5 | 20051001 | 3007071 | 2011/9/10 |
|
|
|
6 | 20071235 | 1005050 | 2011/10/20 | 2012/02/20 | 1 |
|
罰款分類(罰款分類號,罰款名稱,罰金)
罰款分類號 | 罰款名稱 | 罰金 |
1 | 延期 | 10 |
2 | 損壞 | 20 |
3 | 丟失 | 50 |
預約 (預約流水號,借書證號,ISBN,預約時間)
預約流水號 | 借書證號 | ISBN | 預約時間 |
1 | 20081237 | 9787508040110 | 2011/09/11 |
(1) 對于各表內容的圖形化插入:
如“圖書分類”表的編輯:首先右鍵點擊表格選擇“Edit data”,如下圖:
在所給視窗中編輯資料,如下:
接著點選綠勾、綠鎖并點擊commit按鈕,則提交成功
其余各表的資料插入如下:
書目:
圖書:
讀者:
借閱:
罰款分類:
預約:
(2) SQL陳述句插入:
/*圖書分類*/
insert into 圖書分類 values('100','文學');
insert into 圖書分類 values('200','科技');
insert into 圖書分類 values('300','哲學');
/*書目*/
insert into 書目(ISBN,書名,作者,出版單位,單價,圖書分類號) values ('7040195836','資料庫系統概論','王珊','高等教育出版社',39.00,'200');
insert into 書目(ISBN,書名,作者,出版單位,單價,圖書分類號) values ('9787508040110','紅樓夢','曹雪芹','人民出版社',20.00,'100');
insert into 書目(ISBN,書名,作者,出版單位,單價,圖書分類號) values ('9787506336239','紅樓夢','曹雪芹','作家出版社',34.30,'100');
insert into 書目(ISBN,書名,作者,出版單位,單價,圖書分類號) values ('9787010073750','心學之路','張立文','人民出版社',33.80,'300');
/*圖書*/
insert into 圖書(圖書編號,ISBN,是否借出) values('2001231','7040195836','否');
insert into 圖書(圖書編號,ISBN,是否借出) values('2001232','7040195836','是');
insert into 圖書(圖書編號,ISBN,是否借出) values('1005050','9787506336239','否');
insert into 圖書(圖書編號,ISBN,是否借出) values('1005063','9787508040110','是');
insert into 圖書(圖書編號,ISBN,是否借出) values('3007071','9787010073750','是');
/*讀者*/
insert into 讀者 values('20051001','王菲','四川綿陽西科大計算機學院','女','','','');
insert into 讀者 values('20062001','張江','四川綿陽中心醫院','男','','','');
insert into 讀者 values('20061234','郭敬明','四川江油305','男','','','');
insert into 讀者 values('20071235','李曉明','四川成都工商銀行','男','','','');
insert into 讀者 values('20081237','趙鑫','四川廣元廣元中學','女','','','');
/*罰款分類*/
insert into 罰款分類(罰款分類號,罰款名稱,罰金) values(1,'延期',10);
insert into 罰款分類(罰款分類號,罰款名稱,罰金) values(2,'損壞',20);
insert into 罰款分類(罰款分類號,罰款名稱,罰金) values(3,'丟失',50);
/*借閱*/
insert into 借閱(借閱流水號,借書證號,圖書編號,借書日期,歸還日期) values(1,'20081237','3007071',to_date('2010/09/19','yyyy/mm/dd'),to_date('2019/09/20','yyyy/mm/dd'));
insert into 借閱(借閱流水號,借書證號,圖書編號,借書日期,歸還日期,罰款分類號,備注) values(2,'20071235','1005063',to_date('2010/10/20','yyyy/mm/dd'),to_date('2011/02/20','yyyy/mm/dd'),1,'');
insert into 借閱(借閱流水號,借書證號,圖書編號,借書日期) values(3,'20071235','2001232',to_date('2011/09/01','yyyy/mm/dd'));
insert into 借閱(借閱流水號,借書證號,圖書編號,借書日期) values(4,'20061234','1005063',to_date('2011/9/20','yyyy/mm/dd'));
insert into 借閱(借閱流水號,借書證號,圖書編號,借書日期) values(5,'20051001','3007071',to_date('2011/9/10','yyyy/mm/dd'));
insert into 借閱(借閱流水號,借書證號,圖書編號,借書日期,歸還日期,罰款分類號,備注) values(6,'20071235','1005050',to_date('2011/10/20','yyyy/mm/dd'),to_date('2012/02/20','yyyy/mm/dd'),1,'');
/*預約*/
insert into 預約(預約流水號,借書證號,ISBN,預約時間) values(1,'20081237','9787508040110',to_date('2011/09/11','yyyy/mm/dd'));
另外,對于plsqldev時間格式的設定如下:
圖8 設定日期型格式
- 使用SQL陳述句練習表的創建、洗掉、修改操作,
新建一個“實驗”表,進行表的創建、洗掉、修改的操作:
創建表:
create table 實驗(
實驗編號 varchar2(5) primary key,
實驗名稱 varchar2(30) not null
);
select * from 實驗;
修改:
alter table 實驗
modify 實驗名稱 varchar2(40);
select * from 實驗;
(此處“實驗名稱”變數型別變為varchar2(40))
alter table 實驗
add 實驗難度 varchar2(2);
select * from 實驗;
洗掉:
alter table 實驗
drop column 實驗名稱;
select * from 實驗;
drop table 實驗;
(此處將表進行了洗掉)
- 使用SQL陳述句練習表中資料的增加、洗掉、修改操作,
以上題所建實驗(實驗編號(primary key),實驗名稱(not null),實驗難度)表進行操作,
create table 實驗(
實驗編號 varchar2(5) primary key,
實驗名稱 varchar2(30) not null,
實驗難度 varchar2(2)
);
資料插入:
insert into 實驗 values('19001','建立資料庫','中');
insert into 實驗(實驗名稱,實驗編號) values('刪庫跑路','19002');
結果查看:
資料修改:
update 實驗 set 實驗編號 = '19003'
where 實驗名稱 = '刪庫跑路';
資料洗掉:
delete from 實驗
where 實驗名稱 = '建立資料庫';
另外,在本實驗中之程序中也有許多對于資料表模式、資料表資料內容的新增、更改、查詢和洗掉操作,進行了大量的練習,
- 試根據下面的完整性約束要求,用SQL對上面已經建立好的資料庫表進行完整性約束定義,
讀者關系中屬性 聯系電話 取值為11位數字
身份證編號 取值為18位,并且滿足身份證編號規則
圖書關系中屬性 是否借出 取值為:‘是’或‘否’
借閱關系中屬性 借書日期 取值不為空
完整性約束如下:
讀者關系中:
電話號碼約束:使第一位為1其余10位為數字,
check (regexp_like(聯系電話,'^1[0-9]{10}$'))
身份證約束:(第一個約束條件使身份證第1位不為0,第7到10位使身份證資訊中的出生年份為1900到2099,第11到12位組合為月份01到12月份,且分別分出了31和30天的月份,再使2月份的天數為29天,最后一位約定可以為x和X;第二個約束條件使出生年份不超過2019年)
check (regexp_like(idc,'^[1-9]\d{5}(19|20)\d{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2]\d|30|31)|(04|06|09|11)(0[1-9]|[1-2]\d|30)|02(0[1-9]|[1-2]\d))\d{3}(\d|x|X)$')
and regexp_like(idc,'^\d{6}((19\d{10})|(20(0|1)\d{9}))$'))
圖書關系中:
check (是否借出 = '是' or 是否借出 = '否')
借閱關系中:
借書日期 date not null
實驗心得與體會
本次實驗是第一次實驗課,在實驗之前我們需要準備好軟體平臺,Oracle database的安裝需要顧及到相應支持的軟體,如.Net Framework 3.5,以及相應注冊表的修改(使資料庫兼容在Windows10上),再按照自己的需求進行軟體的安裝,在軟體使用的程序中,我們至少需要簡單了解相關服務項控制的是什么,才能更加方便的使用,為了創建資料庫以及使用SQL陳述句的便捷性,和與實驗室環境搭配,我們也使用的pl/sql development軟體,用圖形界面的方法方便我們對資料庫的相關操作,
實驗中圖形化界面的使用弄懂了之后,編輯起來是很快,但是總會有一些報錯,由于宏觀操作資料,并不能很直觀的知道到底是哪里出了問題,在之后的SQL陳述句創建資料庫創建表的程序中,相當于重復著之前的行為,這時候再微觀的構建資料庫中便能更加直觀的發現自己之前的錯誤,加深了自己的印象,自己也發現有沒有理解透徹的知識點,回頭翻書再仔細咀嚼一番,掌握的也更扎實了,
在資料庫構建的時候,主鍵和外鍵的設定在我看來顯得尤為重要,再加上完整性約束,三者在資料庫健壯性中顯得格外突出,我在實驗中便經過了很多相關的坎,從未設定約束和外鍵,到完善約束條件,其中感悟心得挺多的:當你資料插入報錯時,有可能是違反唯一性原則,反復插入了相同主鍵的資料;有可能是插入的資料外鍵指向的主鍵指定的表中找不到,不存在或者之前插入的值并沒有commit,
這次構建資料庫發生了許多低級的錯誤,給我的警示是,做事要仔細小心,不要冒失冒進,一味的求快可能效率會更低,踏踏實實走好每一步才行,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/36937.html
標籤:Oracle
上一篇:Oracle11g 干凈卸載
