oracle sql-1,Oracle – Oracle SQL(1)
Oracle?–?Oracle?SQL(1)
1.?簡介
(1)?SQL?:?Structured?Query?Language,結構化查詢語言,專門用于數據存取、數據更新及數據庫管理等操作。
(2)?Oracle?SQL
DDL:?Data?Define?Language
數據定義語言
包括CREATE、ALTER、DROP、TRUNCATE、COMMENT、RENAME等命令
DML:?Data?Manipulate?Language
數據操縱語言
包括SELECT、INSERT、UPDATE、DELETE、MERGE、CALL、EXPLAINPLAN、LOCKTABLE等命令
DQL:Data?Query?Language
數據查詢語言
包括基本查詢、ORDER?BY子句、GROUP?BY子句等
TCL:?Transaction?Control?Language
事務控制語言
包括COMMIT、SAVEPOINT、ROLLBACK、SET?TRANSACTION命令
DCL:?Data?Control?Language
數據控制語言
包括GRANT、REVOKE等命令
2.?SQL基本知識
(1)?SQL中的“鍵”
●?候選碼:CANDIDATE?KEY,在關系模式R(U)中,K為R的一個屬性或者一組屬性,若K能唯一標識一個元組,則K為關系模式R的候選碼;
●?主鍵:PRIMARY?KEY,表中單個屬性或多個屬性組合,其值能唯一地標識表中一行記錄,主鍵是候選碼集合中的一個元素,只能擁有一個主鍵;
●?外鍵:FOREIGN?KEY,關系模式R中屬性或屬性組X并非R的候選碼,但X是另一個關系模式的候選碼,則稱X是R的外部碼,也稱外鍵;
3.?Oracle?SQL
(1)創建表(DDL)
●?語法:
CREATE?TABLEtable_name
(
field_1??field_1_type,
field_2??field_2_type,
……
field_n??field_n-type
);
(2)創建表約束(DDL)
●?注意:在Oracle中default是一個值,而SQL?Server中default是一個約束。大括號表示內容可選。
●?創建主鍵約束
CREATE?TABLEtable_name
(
field_1??field_1_type{CONSTRAINTconstraint_name}?PRIMARY?KEY,
field_2??field_2_type,
……
field_n??field_n-type
);
或者
CREATE?TABLEtable_name
(
field_1??field_1_type,
field_2??field_2_type,
……
field_n??field_n-type
);
ALTER?TABLEtable_nameADD?CONSTRAINTconstraint_namePRIMARY?KEY(field_1);
CREATE?TABLEuser_info
(
user_idVARCHAR2(20)PRIMARY?KEY,
user_passwdVARCHAR2(20),
state_idNUMBER
);
或者
CREATE?TABLEuser_info
(
user_idVARCHAR2(20),
user_passwdVARCHAR2(20),
state_idNUMBER
);
ALTER?TABLEuser_infoADDCONSTRAINTpk_userinfoPRIMARY?KEY(user_id);
●?創建外鍵約束
CREATE?TABLEtable_name
(
field_1??field_1_type,
field_2??field_2_type{CONSTRAINTconstraint_name}?REFERENCESforeign_table_name(field),
……
field_n??field_n-type
);
或者
CREATE?TABLEtable_name
(
field_1??field_1_type,
field_2??field_2_type,
……
field_n??field_n-type
);
ALTER?TABLEtable_nameADD?CONSTRAINTconstraint_nameFOREIGN?KEY(foreign_key_field)REFERENCEforeign_table_name(field);
CREATE?TABLEstate
(
state_idNUMBER?PRIMARY?KEY,
state_nameVARCHAR2(20)
);
CREATE?TABLEuser_info
(
user_idVARCHAR2(20)?PRIMARY?KEY,
user_passwdVARCHAR2(20),
state_idNUMBERCONSTRAINTfk_userinfo_stateREFERENCESstate(state_id)
);
或者
CREATE?TABLEuser_info
(
user_idVARCHAR2(20)?PRIMARY?KEY,
user_passwdVARCHAR2(20),
state_idNUMBER
);
ALTER?TABLEuser_infoADD?CONSTRAINTfk_userinfo_stateFOREIGN?KEY(state_id)REFERENCESstate(state_id);
●?創建非空約束
CREATE?TABLEtable_name
(
field_1??field_1_type,
field_2??field_2_type{CONSTRAINTconstraint_name}NOT?NULL,
……
field_n??field_n-type
);
或者
CREATE?TABLEtable_name
(
field_1??field_1_type,
field_2??field_2_typeNOT?NULL,
……
field_n??field_n-type
);
或者
CREATE?TABLEtable_name
(
field_1??field_1_type,
field_2??field_2_type,
……
field_n??field_n-type
);
ALTER?TABLEtable_nameMODIFY?(field_nameNOT?NULL);
CREATE?TABLEuser_info
(
user_idVARCHAR2(20),
user_passwdvarchar2(20)CONSTRAINTnotnull_userpasswdNOT?NULL,
state_idNUMBER
);
或者
CREATE?TABLEuser_info
(
user_idVARCHAR2(20),
user_passwdvarchar2(20),
state_idNUMBER
);
ALTER?TABLEuser_infoMODIFY(user_passwdNOT?NULL);
●?創建唯一約束
CREATE?TABLEtable_name
(
field_1??field_1_type,
field_2??field_2_type{CONSTRAINTconstraint_name}UNIQUE,
……
field_n??field_n-type
);
或者
CREATE?TABLEtable_name
(
field_1??field_1_type,
field_2??field_2_type,
……
field_n??field_n-type
);
ALTER?TABLEtable_nameADD?CONSTRAINTconstraint_nameUNIQUE(field_name);
CREATE?TABLEdog
(
dog_idNUMBER,
dog_nameVARCHAR2(20)?CONSTRAINTun_dognameUNIQUE
);
或者
CREATE?TABLEdog
(
dog_idNUMBER,
dog_nameVARCHAR2(20)
);
ALTER?TABLEdogADD?CONSTRAINTun_dognameUNIQUE(dog_name);
●?創建檢查約束
CREATE?TABLEtable_name
(
field_1??field_1_type,
field_2??field_2_type{CONSTRAINTconstraint_name}?CHECK(judge_condition),
……
field_n??field_n-type
);
或者
CREATE?TABLEtable_name
(
field_1??field_1_type,
field_2??field_2_type,
……
field_n??field_n-type
);
ALTER?TABLEtable_nameADD?CONSTRAINTconstraint_nameCHECK(judge_condition);
CREATE?TABLEpig
(
pig_idNUMBER?CONSTRAINTck_pigidCHECK(pig_id>=0),
pig_nameVARCHAR2(20)
);
或者
CREATE?TABLEpig
(
pig_idNUMBER,
pig_nameVARCHAR2(20)
);
ALTER?TABLEpigADD?CONSTRAINTck_pigidCHECK(pig_id>=0);
(3)?刪除表(DDL)
DROP?TABLEtable_nameCASCADE?CONSTRAINTS
說明:如果表t1的外鍵在表t2中,則刪除t2的時候使用DROP?TABLE?t2
則系統提示:ORA-02449:表中的唯一/主鍵被外鍵引用。若使用DROP?TABLE?t2?CASCADE?CONSTRAINTS,則刪除t1的外鍵約束,然后刪除t2表;注意此命令不能回滾。
(4)?刪除表約束
ALTER?TABLEtable_nameDROP?CONSTRAINTconstraint_name
(5)?查看表結構
●?sqlplus:DESCtable_name
●?plsql?dev:All?objectsèTablesètable_nameè右鍵查看
(6)修改表
●?表改名:ALTER?TABLEsrc_table_nameRENAME?TOdst_table_name
●?刪除列:ALTER?TABLEtable_nameDROP?COLUMNcolumn_name;
●?添加列:
ALTER?TABLEtable_nameADD
(
field_1??field_1_type?field_1_constraint,
field_2??field_2_type?field_1_constraint,
……
field_n??field_n-type?field_1_constraint
);
●?修改列:類型、大小、默認值、默認空約束
ALTER?TABLEtable_nameMODIFY
(
field_1??field_1_type?field_1_constraint,
field_2??field_2_type?field_1_constraint,
……
field_n??field_n-type?field_1_constraint
);
●?修改列:添加約束和刪除約束
參見上文。
●?修改列:關閉約束和打開約束
不想刪除約束但又不想他現在其作用,這時可以采用DISABLE來完成此工作;我們還可以采用CASCADE關鍵字來把相互引用的約束一起級聯關閉;可以通過ENABLE關鍵點來開啟約束,使得約束有效
ALTER?TABLEtable_nameDISABLECONSTRAINTconstraint_nameCASCADE;
ALTER?TABLEtable_nameENABLECONSTRAINTconstraint_nameCASCADE;
●?修改列:列名修改
ALTER?TABLEtable_nameRENAME?COLUMNsrc_column_nameTOdst_column_name;
(7)?給表加注釋
●?給表加注釋
COMMENT?ON?TABLEtable_nameIS?‘comment_string’
●?給列加注釋
COMMENT?ON?COLUMNtable_name.column_nameIS‘comment_string’;
(8)TRANCATE表
TRUNCATE?TABLEtable_name;
●TRANCATE和DELETE只刪除數據不刪除表的結構(定義)對快速、無LOG記錄的方法,它等同于不含WHERE子句的DELETE語句,至少表面上看來功能上相同,但TRANCATETABLE的速度更快,并且使用更少的SYSTEM?RESOURCE和TRANCATIONLOG?RESOURCE。
●TRANCATE語句所使用的LOG?TABLESPACE較少。DELETE語句每刪除一行RECORD,都需要在LOG中為每一個所刪除的行進行記錄,但是TRANCATE是通過釋放用于STORE?DATA的數據PAGE來刪除數據。
●TRANCATE語句所使用的LOCK較少。DELETE語句始終鎖定TABLE中的各行,而TRANCATE始終鎖定TABLE本身和PAGE本身,不是TABLE中的各行。
●TRANCATE語句通常不會在所刪除的TABLE中留有空頁。DELETE語句執行后,TABLE中仍然會保留空頁,而且必須至少使用一個排他表鎖,LCK_M_X,才能釋放堆中的空表,否則執行完DELETE操作后,表或堆中會包含相當多的空頁或空表,而且對于INDEX,DELETE操作同樣會留下一些空頁。而TRANCATE操作后,只是會在DB而不是TABLE中保留一些相關的信息。
●TRANCATE語句不可回滾、觸發器中沒有TRUNCATE,即這個語句無法觸發任何操作
●TRANCATE和DELETE只刪除數據不刪除表的結構(定義),DROP語句將刪除表的結構被依賴的約束(CONSTRAINT),觸發器(TRIGGER),索引(INDEX);依賴于該表的存儲過程/函數將保留,但是變為INVALID狀態
總結
以上是生活随笔為你收集整理的oracle sql-1,Oracle – Oracle SQL(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学PHP的嫌弃什么歌,抖音再见了互相嫌弃
- 下一篇: ElasticSearch创建、修改、获