數據庫實驗一 數據定義與數據操縱

一、實驗目的
(1)熟悉oracle環境
(2)熟練掌握和使用PL-SQL建立數據庫基本表
(3)使用PL/SQL developer操作數據庫
(4)熟練掌握SQL 建立關係,及增刪改數據
二、實驗環境
PLSQL Developer 12
Oracle Database 11 home
三、實驗步驟、出現的問題及解決方案
實驗步驟:
1、以SYSTEM登錄數據庫,打開PL/SQL developer,以用戶:SYSTEM,登錄orcl數據庫。
在這裏插入圖片描述
2、註冊用戶S512017****
(1)打開Users文件夾,新建用戶,用戶名:S512017****。
在這裏插入圖片描述
(2)在角色權限中選擇:CONNECT和DBA
在這裏插入圖片描述
3、重新以新用戶S512017**** 登錄數據庫
在這裏插入圖片描述
4、修改日期格式
在這裏插入圖片描述
5、創建表
(1)創建圖書分類表
CREATE TABLE 圖書分類
(
圖書分類號 VARCHAR(100) PRIMARY KEY,
類名 VARCHAR(100) NOT NULL
);
(2)創建書目表
CREATE TABLE 書目
(
ISBN VARCHAR(100) PRIMARY KEY,
書名 VARCHAR(100) NOT NULL,
作者 VARCHAR(100) NOT NULL,
出版單位 VARCHAR(100) NOT NULL,
單價 DECIMAL(8,2) NOT NULL,
圖書分類號 VARCHAR(100) REFERENCES 圖書分類(圖書分類號)
);
(3)創建圖書表
CREATE TABLE 圖書
(
圖書編號 VARCHAR(100) PRIMARY KEY,
ISBN VARCHAR(100) REFERENCES 書目(ISBN),
是否借出 VARCHAR(100) NOT NULL,
備註 VARCHAR(100)
);
(4)創建讀者表
CREATE TABLE 讀者
(
借書證號 VARCHAR(100) PRIMARY KEY,
姓名 VARCHAR(100) NOT NULL,
單位 VARCHAR(100) NOT NULL,
性別 VARCHAR(100) NOT NULL,
地址 VARCHAR(100) NOT NULL,
聯繫電話 VARCHAR(100) NOT NULL,
身份證編號 VARCHAR(100) NOT NULL
);
(5)創建罰款分類表
CREATE TABLE 罰款分類
(
罰款分類號 VARCHAR(100) PRIMARY KEY,
罰款名稱 VARCHAR(100) NOT NULL,
罰金 INT NOT NULL
);
(6)創建借閱表
CREATE TABLE 借閱
(
借閱流水號 VARCHAR(100) PRIMARY KEY,
借書證號 VARCHAR(100) REFERENCES 讀者(借書證號),
圖書編號 VARCHAR(100) REFERENCES 圖書(圖書編號),
借書日期 DATE,
歸還日期 DATE,
罰款分類號 VARCHAR(100) REFERENCES 罰款分類(罰款分類號),
備註 VARCHAR(100)
);
(7)創建預約表
CREATE TABLE 預約
(
預約流水號 VARCHAR(100) PRIMARY KEY,
借書證號 VARCHAR(100) REFERENCES 讀者(借書證號),
ISBN VARCHAR(100) REFERENCES 書目(ISBN),
預約時間 DATE
);
成功創建表:
在這裏插入圖片描述
6、插入數據
(1)插入圖書分類數據
INSERT INTO 圖書分類 VALUES(‘100’,‘文學’);
INSERT INTO 圖書分類 VALUES(‘200’,‘科技’);
INSERT INTO 圖書分類 VALUES(‘300’,‘哲學’);
commit;
在這裏插入圖片描述
(2)插入書目數據
INSERT INTO 書目 VALUES(‘7040195836’,‘數據庫系統概論’,‘王珊’,‘高等教育出版社’,39.00,‘200’);
INSERT INTO 書目 VALUES(‘9787508040110’,‘紅樓夢’,‘曹雪芹’,‘人民出版社’,20.00,‘100’);
INSERT INTO 書目 VALUES(‘9787506336239’,‘紅樓夢’,‘曹雪芹’,‘作家出版社’,34.30,‘100’);
INSERT INTO 書目 VALUES(‘9787010073750’,‘心學之路’,‘張立文’,‘人民出版社’,33.80,‘300’);
commit;
在這裏插入圖片描述
(3)插入圖書數據
INSERT INTO 圖書 VALUES(‘2001231’,‘7040195836’,‘否’,’’);
INSERT INTO 圖書 VALUES(‘2001232’,‘7040195836’,‘是’,’’);
INSERT INTO 圖書 VALUES(‘1005050’,‘9787506336239’,‘否’,’’);
INSERT INTO 圖書 VALUES(‘1005063’,‘9787508040110’,‘是’,’’);
INSERT INTO 圖書 VALUES(‘3007071’,‘9787010073750’,‘是’,’’);
commit;
在這裏插入圖片描述
(4)插入讀者數據
INSERT INTO 讀者 VALUES(‘20051001’,‘王菲’,‘四川綿陽西科大計算機學院’,‘女’,‘西南科技大學’,‘12345678911’,‘431126199910030001’);
INSERT INTO 讀者 VALUES(‘20062001’,‘張江’,‘四川綿陽中心醫院’,‘男’,‘西南科技大學’,‘12345678912’,‘431126199910030002’);
INSERT INTO 讀者 VALUES(‘20061234’,‘郭敬明’,‘四川江油305’,‘男’,‘西南科技大學’,‘12345678913’,‘431126199910030003’);
INSERT INTO 讀者 VALUES(‘20071235’,‘李曉明’,‘四川成都工商銀行’,‘男’,‘西南科技大學’,‘12345678914’,‘431126199910030004’);
INSERT INTO 讀者 VALUES(‘20081237’,‘趙鑫’,‘四川成都工商銀行’,‘女’,‘西南科技大學’,‘12345678915’,‘431126199910030005’);
commit;
在這裏插入圖片描述
(5)插入罰款分類數據
INSERT INTO 罰款分類 VALUES(‘1’,‘延期’,10);
INSERT INTO 罰款分類 VALUES(‘2’,‘損壞’,20);
INSERT INTO 罰款分類 VALUES(‘3’,‘丟失’,30);
commit;
在這裏插入圖片描述
(6)插入借閱數據
INSERT INTO 借閱 VALUES(‘1’,‘20081237’,‘3007071’,TO_DATE(‘2010/09/19’,‘yyyy/mm/dd’),TO_DATE(‘2010/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’,’’);
commit;
在這裏插入圖片描述
(7)插入預約數據
INSERT INTO 預約 VALUES(‘1’,‘20081237’,‘9787508040110’,TO_DATE(‘2011/09/11’,‘yyyy/mm/dd’));
commit;
在這裏插入圖片描述
7、修改表
(1)修改修改讀者表
ALTER TABLE 讀者 MODIFY(聯繫電話 VARCHAR(11) CHECK(LENGTH(聯繫電話)=11));
ALTER TABLE 讀者 MODIFY(身份證編號 VARCHAR(18) CHECK((LENGTH(身份證編號)=18) AND REGEXP_LIKE(身份證編號,’1{10}[0-1]{1}[0-9]{1}[0-3]{1}[0-9]{1}[0-9,x]{4}$’)));
(2)修改修改圖書表
ALTER TABLE 圖書 MODIFY(是否借出 VARCHAR(2) CHECK(是否借出=‘是’ OR 是否借出=‘否’));
(3)修改借閱表
ALTER TABLE 借閱 MODIFY(借書日期 DATE NOT NULL);
8、修改數據
UPDATE 圖書分類 SET 類名=‘思想’ WHERE 類名=‘哲學’;
在這裏插入圖片描述
10、刪除數據
DELETE FROM 借閱 WHERE 借閱流水號=‘6’;
在這裏插入圖片描述
在這裏插入圖片描述
11、刪除表
DROP TABLE 預約;
DROP TABLE 借閱;
DROP TABLE 罰款分類;
DROP TABLE 讀者;
DROP TABLE 圖書;
DROP TABLE 書目;
DROP TABLE 圖書分類
出現的問題及解決方案:
1、oracle不支持INSERT INTO 表名(列名1,列名2,…,列名n) VALUES(值1,值2,…,值n), (值1,值2,…,值n)…(值1,值2,…,值n);語法來一次插入多個數據。解決方法:將值拆開成多次插入,一次插入一條。
2、oracle不支持ALTER TABLE 表名ALTER COLUMN 列名 數據類型;來修改表。解決方法:使用ALTER TABLE 表名 MODIFY(列名 數據類型);來修改表。
3、插入、修改或刪除數據後,無法立即查詢到數據的更改,需要將PLSQL關閉,重啓才能查詢。解決方法:這是因爲PLSQL默認不提交事務造成的,只要使用COMMIT;提交事務後就可以立即查看到數據的變動。
4、創建表時,如果表中包含了外碼,需要先創建外碼所在表,否則創建會失敗;刪除表時,如果表中的列被其它表作爲了外碼,需要先刪除其它將改表中列作爲外碼的表,刪除數據時也是如此。
5、在修改圖書表時,設置是否借出列的長度時,設置字符長度爲1,修改失敗。解決方法:設置長度爲2,因爲中文一個字佔2個字符,所以設置字符長度爲1已經小於數據中的長度了,所以修改會失敗。
四、實驗心得體會
通過本次實驗,學會了PLSQL的使用,熟練的掌握了使用SQL語句對數據庫表的增刪改操作和數據的增刪改操作,以及CHECK對數據的約束方法和REGEXP_LIKE正則匹配,對數據庫有了更加直觀的體會和感悟。對數據庫的設計和完整性約束有了更加深刻的認識,數據庫設計必須嚴謹,數據約束要規範,創建表示要先確定表創建的順序。


  1. 0-9 ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章