Java 7---Oracle資料庫簡介
阿新 • • 發佈:2018-12-22
導讀
1.Oracle初識
2.Oracle安裝連線
3.表的建立DDL
4.DML:資料的新增 INSERT
Oracle初識
Oracle安裝連線
下載 官網->database
檢視當前使用者下的所有表的名字:SELECT table_name FROM user_tables;
檢視某個表結構:desc 表名
調整結果集的列寬:僅針對於本次會話生效 數值型:col 名字 format 999999;(最多顯示6位,不夠用空格,多了用#號) 文字型:col 名字 format a10; (日期可以歸為文字型) 設定日期的語言:僅針對於本次會話生效 查詢當前日期:SELECT sysdate FROM dual; 預設是中文的 修改為英文語言: ALTER SESSION SET nls_date_language=english; date常量預設形式: 中文下:'01-8月 -17' 中文下只認識這個格式 英文下:'01-AUG-17' 英文下只認識這個格式 清屏:clear scre
表的建立DDL
基本語法: CREATE TABLE 表名( 列名 型別 [預設值] [約束], 列名 型別 [預設值] [約束], ... 列名 型別 [預設值] [約束] ); 相關知識點: (表名,列名)命名規則: 1)以字母開頭 2)組成:字母,數字,下劃線_,$,# 3)長度:不能超過30個字元 4)不能使用資料庫關鍵字 5)同一個使用者下不能出現同名的物件(表,檢視,索引,序列等等) 資料型別: 文字型:重點 VARCHAR2:變長的文字型 username VARCHAR2(100):最多可以儲存100個位元組 具體開闢的長度由實際內容決定 通常一個字母佔一個位元組,漢字可能佔多個,跟編碼有關係 CHAR:定長的文字型 username CHAR(100):無論如何都會開闢100個位元組空間 沒佔滿的位置用空格填充 數值型:重點 NUMBER:整型,浮點型都可以表示 age NUMBER(3):表示最多可以儲存3位的整數 weight NUMBER(4,2):表示有2位小數,有效位4位 日期型 DATE 儲存大資料量的型別:(瞭解) BLOB:儲存大量的二進位制資料,可以高達2GB,儲存圖片等 CLOB:儲存大量的字元,可以高達2GB,儲存小說等 完全可以選擇把圖片儲存到硬碟,把對應的路徑儲存到資料庫,這樣比較省記憶體 約束:CONSTRAINT,constraint NOT NULL:非空約束 值不能沒有,不能為空 CHECK:檢查約束 設定值只能取一個範圍 UNIQUE:唯一約束 列的值不能重複,可以有多個空 空,NULL:沒有值 PRIMARY KEY:主鍵約束 約束力:相當於非空+唯一,可以起到唯一標識記錄 多個行之間因為有了主鍵,不會出現完全一樣值的行 一個表最多隻能有一個主鍵 通常會給每一個表加一個id之類的主鍵列,沒有任何業務意義 保證能夠區分每一行,又不會修改這個列,就類似與流水號一樣 FOREIGN KEY:外來鍵約束, 某個表的某個列引用了某個表的某個列系統知道了, grade.stu_id 引用了student.id 值只能取student.id中存在的值或者是空 注意:被引用的列只能是主鍵列或唯一約束列,不然無法知道引用哪個。如果B表引用了A表,想要刪除A,先刪除B 建立表: 需求,在剛剛建立的使用者下建立一個表,用來儲存學生的基本資訊 有哪些列?id,name,sex,age,sno, 版本1: CREATE TABLE student( id NUMBER(9) PRIMARY KEY, name VARCHAR2(100) NOT NULL, sex NUMBER(1) DEFAULT 0 CHECK(sex=0 OR sex=1), age NUMBER(3), sno NUMBER(9) UNIQUE NOT NULL ); 預設值:是指如果新增一行資料值對應的列不給值就取預設值 default 值 約束建議起合適的名字,而不要使用預設名字,這樣出現問題時易發現 CONSTRAINT 約束名 約束型別 命名建議:表名_列名_約束簡寫 主鍵:pk 外來鍵:fk 非空:nn或nk 唯一:uk 檢查:ck 版本2: CREATE TABLE student( id NUMBER(9) CONSTRAINT student_id_pk PRIMARY KEY, name VARCHAR2(100) CONSTRAINT student_name_nn NOT NULL, sex NUMBER(1) DEFAULT 0 CONSTRAINT student_sex_ck CHECK(sex=0 OR sex=1), age NUMBER(3), sno NUMBER(9) CONSTRAINT student_sno_uk UNIQUE CONSTRAINT student_sno_nn NOT NULL ); 刪除表:DROP TABLE 表名;
約束的分類: 列級別約束: 約束直接跟在列的後面,一個約束只能修飾一個列 表級別約束: 約束單獨寫一行,一個約束可以修飾多個列, 聯合主鍵,聯合唯一約束,一個約束脩飾多個列 注意: 非空以外的所有約束既可以作為表級別約束,又可以作為列級別約束 非空約束只能作為列級別約束 版本3: 把可以調整為表級別約束的進行調整 CREATE TABLE student( id NUMBER(9), name VARCHAR2(100) CONSTRAINT student_name_nn NOT NULL, sex NUMBER(1) DEFAULT 0, age NUMBER(3), sno NUMBER(9) CONSTRAINT student_sno_nn NOT NULL, CONSTRAINT student_id_pk PRIMARY KEY(id), CONSTRAINT student_sex_ck CHECK(sex=0 OR sex=1), CONSTRAINT student_sno_uk UNIQUE(sno) );
外來鍵的運用(接上邊student表)
建立一個科目表,包含欄位:id,name
CREATE TABLE subject(
id NUMBER(7),
name VARCHAR2(100),
CONSTRAINT subject_id_pk PRIMARY KEY(id)
);
建立一個成績表,體現是誰考了哪個科目,分數是多少,該如何設計???
grade: 要重複度(冗餘)最小就可以儲存完整的資訊
加上外來鍵約束之後:
CREATE TABLE grade(
id NUMBER(11),
stu_id NUMBER(9)
CONSTRAINT grade_stu_id_fk REFERENCES student(id),
sub_id NUMBER(7),
score NUMBER(3),
CONSTRAINT grade_id_pk PRIMARY KEY(id),
CONSTRAINT grade_sub_id_fk FOREIGN KEY(sub_id) REFERENCES subject(id)
);
DML:資料的新增 INSERT
資料是一行一行的新增
一行代表一個記錄
語法:
1)INSERT INTO 表名 (列名1,列名2,...,列名n)
VALUES (值1,值2,...,值n);
eg:新增一個學生到學生表
id:1 name:tom age:19 sex:0 sno:100
INSERT INTO student (id,name,age,sex,sno)
VALUES (1,'tom',19,0,100);
注意:數值型常量,直接寫
字串常量(文字常量) ,用一對單引號括起來
對於DML操作後,需要確認提交--COMMIT;
值是區分大小寫的,
各種取的名字,關鍵字,不區分大小寫
查詢一個表的全部資料:SELECT * FROM 表名;
2)如果所有的列我都要給值,可以把列名省略
INSERT INTO 表名 VALUES(值1,值2,...,值n);
每個值和表定義時列的順序一一對應,每個值必須都給出來
新增學生資訊為: id:2 name:lily age:18 sno:101 sex:1
INSERT INTO student VALUES(2,'lily',1,18,101);
pk:第一種更好,可讀性高,更靈活