Oracle 學習筆記第三天
阿新 • • 發佈:2018-11-24
Oracle 學習筆記第三天
這陣子一堆亂七八糟的事,一直沒有繼續學Oracle,不過快速看了一本Oracle的PDF的書,但是看得速度過快,導致還是一知半解,現在來好好整理一下。
現在表已經建好了,約束也加了,現在準備插入資料。
插入資料的方式有很多,現在資料量不大,我先記錄一種最普通的資料插入,一次插入一條資料,後面再學到批量插入時在進行記錄。
語法格式:
insert into [user.]table [@db_link][(column1[,column2...])]
values (express1[,express2...])
注:[] 中的內容表示可寫可不寫,小括號就是小括號,
1. insert into: 固定語法 2. user:表示要插入的表屬於的使用者名稱,如果是本使用者,可以不寫,其他使用者的話,應該要注意許可權,我這邊暫時沒有遇到將資料插入到別的使用者表裡的。 3. table:資料要插入哪張表的表名 4. @db_link:資料庫連線名,額,這個沒用過,暫時不明白, 5. [(column1[,column2...])]: 這部分表示列名,可以不寫,不寫表示插入的資料包括表裡所有的欄位,寫的話,表示插入的資料只有寫的那幾個欄位。 6. values:固定語法 7. (express1[,express2...]):插入的資料,如果之前沒寫列名,則這裡插入的資料要與所有的欄位對應,如果寫了列名,這裡的資料需要與列名對應。
建議:插入資料時不管是不是全部插入,最好寫列名,這樣可以清晰的知道插入了什麼資料,同時,如果以後萬一對錶的欄位進行修改了,這樣的話也不會受到影響。
練習插入的資料:
-- 先插入老師資料
INSERT INTO TEACHERS(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)
VALUES (804,'李誠','男',TO_DATE('1977-08-14','YYYY-MM-DD'),'副教授','計算機系');
INSERT INTO TEACHERS(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)
VALUES (856 ,'張旭','男',TO_DATE('1969-03-12','YYYY-MM-DD'),'講師','電子工程系');
INSERT INTO TEACHERS(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)
VALUES (825,'王萍','女',TO_DATE('1972-05-05','YYYY-MM-DD'),'助教','計算機系');
INSERT INTO TEACHERS(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)
VALUES (831,'劉冰','女',TO_DATE('1977-08-14','YYYY-MM-DD'),'助教','電子工程系');
--再插入學生資料
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,SAGE,CLASS) VALUES (101 ,'李軍' ,'男' ,TO_DATE('1976-02-20','YYYY-MM-DD'),42,95033);
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,SAGE,CLASS) VALUES (102 ,'張三' ,'男' ,TO_DATE('1974-05-03','YYYY-MM-DD'),41,95031);
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,SAGE,CLASS) VALUES (103 ,'陸君' ,'男' ,TO_DATE('1974-06-03','YYYY-MM-DD'),41,95031);
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,SAGE,CLASS) VALUES (105 ,'匡明' ,'男' ,TO_DATE('1975-10-02 ','YYYY-MM-DD'),43,95031);
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,SAGE,CLASS) VALUES (107 ,'王麗' ,'女' ,TO_DATE('1976-01-23','YYYY-MM-DD'),42,95033);
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,SAGE,CLASS) VALUES (108 ,'曾華' ,'男' ,TO_DATE('2011-2-24 ','YYYY-MM-DD'),7,95033);
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,SAGE,CLASS) VALUES (109 ,'王芳' ,'女' ,TO_DATE('1976-02-20','YYYY-MM-DD'),42,95031);
-- 插入課程資料
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('3-105' ,'計算機導論',825);
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('3-245' ,'作業系統' ,804);
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('6-166' ,'資料電路' ,856);
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('9-888' ,'高等數學' ,831);
-- 插入成績資料
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (103,'3-245',86);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (105,'3-245',75);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (109,'3-245',68);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (103,'3-105',92);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (105,'3-105',88);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (109,'3-105',76);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (101,'3-105',64);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (107,'3-105',91);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (108,'3-105',78);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (101,'6-166',85);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (107,'6-166',79);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (108,'6-166',81);
插入資料時浪費好多時間,主要是第一次插入時表弄錯了,然後資料計算生日的時候多寫了一個數據,導致報錯,然而PL/SQL報錯後之前執行的語句效果一直存在,但是需要提交事務才能看到。
我沒有提交事務,所以一直報:ORA-00001:違反唯一約束條件,查資料也沒有,單個欄位插入也不行,後面點了提交事務,發現裡面已經有資料了,導致主鍵違反了遞增的規則,所以報錯。
ORA-00001:違反唯一約束條件:插入資料時,如果設定主鍵自增,注意:主鍵的自增欄位必須要大於之前插入的資料,否則就會報錯,
PL/SQL軟體在執行完後必須要點提交事務,否則資料不會展示出來。
注意:練習時可以隨意新增,但是上面的資料不要亂,因為之後會有練習用到上面的資料。