1. 程式人生 > 實用技巧 >三、ORACLE資料庫五大語言

三、ORACLE資料庫五大語言

資料定義語言(Data Definition Language)DDL

CREATE 定義資料庫實體結構

ALTER 修改資料庫實體結構

DROP 刪除資料庫實體

TRUNCATE 刪除資料庫實體的記錄

資料操縱語言(Data Manipulation Language)DML

INSERT

UPDATE

DELETE

資料查詢語言(Data Query Language)DQL

SELECT

資料控制語言(Data Control Language)DCL

GRANT

REVOKE

事務控制語言(Transaction Control Language)TCL

COMMIT

ROLLBACK

SAVEPOINT

1、資料定義語言(DDL)

1.1 建立表

CREATE TABLE [schema.] table_name (

column_name1 datatype,

column_name2 datatype,

column_name3 datatype)

其中:

schema表示物件的所有者即模式的名稱。如果使用者在自己的模式中建立表,則可以不指定所有者名稱。

table_name 表示表的名稱。

column_name 表示列的名稱。

datatype 表示該列的資料型別及其長度。

建立表時,需要指定下列內容:

唯一的表名稱。表內唯一的列名稱。列的資料型別及其寬度。

表名的命名規則:

表名首字元應該為字母。不能使用ORACLE保留字來為表命名。表名的最大長度為30個字元。

同一使用者模式下的不同表不能具有相同的名稱。

可以使用下劃線、數字和字母,但不能使用空格和單引號。

舉例:建立student表

CREATE TABLE student(

stuid VARCHAR2(20) primary key, --指定這一欄位為student表主鍵

stuname VARCHAR2(50),

sex CHAR(2)

);

CREATE TABLE student(

stuid VARCHAR2(20),

stuname VARCHAR2

(50),

sex CHAR(2),

primary key(stuid,stuname)

);--指定多個欄位為student表主鍵

注意:最後一個欄位沒有“,”,

查看錶的結構用命令desc tablename

1.2 用查詢的結果集建立一張表

a、 拷貝一張表的全部資訊,即建一張新表,這張表的內容與另外存在的一張表的內容完全相同而表名不同。

CREATE TABLE newtablename AS SELECT * FROM existtablename;

b、 拷貝一張表,這張表的內容為另外一張存在的表的某些欄位及這些欄位的全部記錄值。

CREATE TABLE newtablename AS SELECT column1,column2 FROM existtablename;

c、拷貝一張表,這張表的內容為另外一張存在的表的某些欄位及其全部記錄值,但這些欄位名與另一張已存在的表的欄位名不同。

CREATE TABLE newtablename (newcolumnname1, newcolumnname2) 
AS SELECT existcolumn1, existcolumn2 FROM existtablename;

d、拷貝一張表,只拷貝已存在表的結構,不拷貝表的內容。

CREATE TABLE newtablename AS SELECT * FROM existtablename WHERE 恆假條件;

1.3 修改表

a、新增新列

ALTER TABLE table_name ADD( newcolumnname datatype);

b、更改現有列的資料型別和欄位寬度

ALTER TABLE tablename MODIFY( columnname datatype);

c、更改列名

ALTER TABLE tablename RENAME COLUMN oldcolumnname TO newcolumnname;

d、刪除表中現有列

ALTER TABLE tablename DROP COLUMN columnname;

e、截斷表truncate

TRUNCATE TABLE tablename;

truncate只刪除表中的記錄而不刪除表結構。
與DELECT的的區別在於,前者不使用事務處理,而後者可以通過ROLLBACK撤銷刪除。
如果確定表中的資料不再有用,使用TRUNCATE命令效率更高。

1.4 oracle資料庫 資料表的5個約束型別

主鍵約束:用來唯一標示表中的一個列,一個表中的主鍵約束只能有一個,但是可以在一個主鍵約束中包含多個列,也稱為聯合約束。

外來鍵約束:用來約束兩個表中列之間的關係。

唯一約束:用來唯一標示表中的列。與主鍵約束不同的是,在一個數據表中可以有多個唯一約束。

檢查約束:用來約束表中列的輸入值得範圍,比如在輸入性別時,要求資料庫中只能輸入男或者女,就可以使用檢查約束來約束該列。

非空約束:約束該列一定要輸入值。

1.4.1 建立一個帶檢查約束的表 constraint

使用PL/SQL語句建立檢查約束的語法如下所示:

CONSTRAINT constraint_name CHECK(condition)
[語法說明:]
    CONSTRAINT:關鍵詞
    constraint_name:約束名稱
    condition:約束條件 

例如:建立BOOKINFO表時,給圖書價格加上一個檢查約束,要求圖書價格在10元到100元之間。

CREATE TABLE BOOKINFO(
    BOOKID INT,
    CONSTRAINT CK_PRICE CHECK(PRICE>=10 AND PRICE <= 100)
);

1.4.2 建立一個帶非空約束的表

例:在建立BOOKINFO表時,給圖書名稱加上一個非空約束。

CREATE TABLE BOOKINFO
(
    BOOKID INT NOT NULL,
    BOOKNAME CHAR NOT NULL
);

1.4.3 建立一個帶唯一約束的表

語法格式:

CONSTRAINT constraint_name UNIQUE(column_name)
【語法說明】
    UNIQUE:唯一約束的關鍵詞
    column_name:唯一約束的名稱。
舉例:建立BOOKINFO表時,為圖書名稱(BOOKNAME)列新增唯一約束
create table bookinfo ( bookid int, price decimal, CONSTRAINT UN_BOOKNAME UNIQUE (bookname) );

1.4.4 建立一個帶外來鍵約束的表

語法格式:
CONSTRAINT constraint_name FOREIGN KEY (column_name) REFERENCE table_name(column_name) ON DELETE  CASCADE
[語法說明:]
    CONSTRAINT:建立約束的關鍵字 constraint
    FOREIGN KEY:外來鍵約束的關鍵字foreing key
    REFERENCE:引用外表的關鍵詞reference
    table_name:需要引用的外表,column_name表示該表的列。
舉例:
create table publishinfo
(
    publishid varchar(20) primary key, --主鍵約束
    publishname varchar(30)
);
create table bookinfo
(
    bookid int,
    bookname char,
    publish varchar2(20),
    pubdate    varchar2(20),
    price    decimal,
    author    char,
    store    int,
    reader     int,
    remarks    varchar2(50),
    constraint fk_publish foreign key(publish) references publishinfo(publishid) on delete cascade
);
建立BOOKINFO表,該錶帶有外來鍵約束,約束名稱為"FK_PUBLISH"。相關列為publish,該外來鍵和PUBLISHINFO表中的publishid列相關聯。

1.4.5 建立資料表的約束

1)建立主鍵約束--

alter table Student add constraint PK_Student_StuId primary key(StuId);

2) 建立檢查約束--

alter table Student add constraint CK_Student_Gender check(gender='' or gender='');
alter table Student add constraint CK_Student_Age check(Age>=0 and Age<=100);

3)建立唯一約束--

alter table Student add constraint UQ_Student_StuName unique(StuName);

4)建立外來鍵約束--

alter table Student add constraint FK_Student_StuCLass_ClassId 
foreign key(ClassId) references StuClass(ClassId);