1.數據定義語句(DDL)
1.1 Create Table
create Table語句用來在數據庫中創建表,以下代碼就是在數據庫中創建student表:
<span style="font-family:Microsoft YaHei;">CREATE TABLE student --指定表名稱
(
stuid INT, --添加id字段
stuname VARCHAR2 (64), --添加name字段
email VARCHAR2 (64) -- 添加email字段
);</span>
在創建表的同時可以對錶中的字段添加基本的約束。於是我們可以將上述代碼優化如下:
<span style="font-family:Microsoft YaHei;">CREATE TABLE student --指定表名稱
(
stuid INT NOT NULL UNIQUE, --添加id字段
stuname VARCHAR2 (64) NOT NULL, --添加name字段
email VARCHAR2 (64) -- 添加email字段
);</span>
其中not null表示該字段的數據不能爲空,unique表示該列的值是唯一的不能重複。
除了使用上述方法來創建表之外,我們還可以使用create table tablename as select ...語法創建和student表相同結構的表。
<span style="font-family:Microsoft YaHei;">CREATE TABLE student_copy AS SELECT * FROM student;</span>
但是,要注意的是:
①:這樣創建的表不能複製約束條件與列的默認值,這需要手工重新添加
②:不能爲新表指定表空間,默認情況下采用的是當前用戶的表空間
③:原表不能包含大對象的數據類型
1.2 Alter語句
<span style="font-family:Microsoft YaHei;">-- 向student表中添加address字段,且該字段爲非空
ALTER TABLE student ADD address VARCHAR2 (128) NOT NULL;
-- 修改student表中的stuname字段長度爲128
ALTER TABLE student MODIFY stuname VARCHAR2 (128);
-- 將student表中的email字段重命名爲my_email
ALTER TABLE student RENAME COLUMN email TO my_email;
-- 刪除student表中的email字段
ALTER TABLE student DROP COLUMN my_email;</span>
2.表之間的約束
2.1 主鍵約束
<span style="font-family:Microsoft YaHei;">CREATE TABLE student
(
stuid NUMBER PRIMARY KEY, --主鍵約束,唯一且非空
stuname VARCHAR2 (64),
email VARCHAR2 (64)
);</span>
使用primary key關鍵字對id列進行修飾,表示將id作爲主鍵(唯一且非空),但這是最簡單的指定主鍵的方式,不推薦這麼做。
建議使用constraint關鍵字,使用列級別的constraint來創建主鍵:
<span style="font-family:Microsoft YaHei;">CREATE TABLE student
(
stuid NUMBER CONSTRAINTS student_PK PRIMARY KEY,
stuname VARCHAR2(64) CONSTRAINTS stuname_nn NOT NULL,
email VARCHAR2 (64)
);</span>
這樣可以顯示地創建約束,並且能夠爲主鍵指定名稱,我們可以在user_constraints數據字典表中查詢對應約束的相關信息。
創建表級別的主鍵:
<span style="font-family:Microsoft YaHei;">CREATE TABLE student
(
stuid NUMBER,
stuname VARCHAR2 (64) CONSTRAINTS stuname_nn NOT NULL,
email VARCHAR2 (64),
grade NUMBER,
CONSTRAINTS student_PK PRIMARY KEY (stuid)
);</span>
在爲表創建主鍵時,應該考慮一下規則:
①:主鍵應該是對用戶沒有意義的,例如最好不要使用身份證號碼作爲表的主鍵
②:主鍵應該是單列的,這樣可以提高數據篩選的性能
③:主鍵不能被更新
④:主鍵不能包含動態的數據,比如不要用時間戳作爲主鍵
⑤:主鍵最好是計算機自動生成的,在Oracle中可以使用序列作爲主鍵
2.2外鍵約束
外鍵約束又稱爲引用約束,用來在多個表之間定義關係,強制引用完整性。
創建班級表Grade
<span style="font-family:Microsoft YaHei;">CREATE TABLE grade
(
gradeid NUMBER,
gradedesc VARCHAR2 (200),
CONSTRAINTS grade_PK PRIMARY KEY (gradeid)
);</span>
當我們要描述學生A屬於哪一個年級時,可以通過在student表中添加外鍵約束grade字段
<span style="font-family:Microsoft YaHei;">CREATE TABLE student
(
stuid NUMBER,
stuname VARCHAR2 (64) CONSTRAINTS stuname_nn NOT NULL,
email VARCHAR2 (64),
grade NUMBER,
CONSTRAINTS student_PK PRIMARY KEY (stuid),
CONSTRAINTS student_FK_grade FOREIGN KEY
(grade)
REFERENCES grade (gradeid)
);</span>
<span style="font-family:Microsoft YaHei;">ALTER TABLE SCOTT.STUDENT ADD (
CONSTRAINT STUDENT_FK_GRADE
FOREIGN KEY (GRADE)
REFERENCES SCOTT.GRADE (GRADEID)
ENABLE VALIDATE);</span>