數據庫DDL、DML、DCL、DQL、DPL、CCL的全稱和使用
簡介:
SQL (Structure Query Language):結構化查詢語言,一種特殊目的的編程語言,一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系數據庫系統。結構化查詢語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同數據庫系統, 可以使用相同的結構化查詢語言作為數據輸入與管理的接口。結構化查詢語言語句可以嵌套,這使它具有極大的靈活性和強大的功能。
DDL (Data Definition Language):數據定義語言
- create語句:可以創建數據庫和數據庫的一些對象。
創建數據庫:
CREATE DATABASE [database_name];
創建數據庫表:
CREATE TABLE [table_name] ( id datatype, column_name2 datatype, column_name3 datatype, ..., PRIMARY KEY (`id`) );
- drop語句:可以刪除數據表、索引、觸發程序、條件約束以及數據表的權限等。
刪除數據庫:
DROP DATABASE [database_name];
刪除數據庫中的表:
DROP TABLE [table_name];
刪除數據庫表的索引:
-- mysql ALTER TABLE [table_name] DROP INDEX [index_name]; -- DB2 和 Oracle DROP INDEX [index_name];
- alter語句:修改數據表定義及屬性。
在已經存在的表中添加字段:
ALTER TABLE [table_name] ADD [column_name] [datatype]; -- 房間表添加業態 ALTER TABLE `room_info` ADD COLUMN business_type tinyint(4) DEFAULT '1' COMMENT "業態" AFTER new_room_id;
刪除表中已經存在的字段:
ALTER TABLE [table_name] DROP COLUMN [column_name];
修改表中已經存在的字段的類型:
-- 將 table_name表 中的字段 column_name 修改為新的數據類型 ALTER TABLE [table_name] ALTER COLUMN [column_name] 新數據類型; ALTER TABLE [table_name] MODIFY COLUMN [column_name] 新數據類型;
修改表中字段名為新的字段:
-- 將 table_name 的 column_name 字段修改為 datatype 類型的 new_column_name字段 ALTER TABLE [table_name] CHANGE COLUMN [column_name] [new_column_name] [datatype] COMMENT "描述"; -- 實際操作 ALTER TABLE bs_area CHANGE COLUMN `data_states` `data_state` int(11) COMMENT "狀態";
DML (Data Manipulation Language):數據操作語言
- insert 語句:向數據表中插入記錄。
-- 將table_name表中的每一個字段都插入值 INSERT INTO [table_name] VALUES (value1,value2,...); -- 將table_name表中的特定字段插入值 INSERT INTO [table_name](column_name1, column_name2,...) VALUES (value1, value2,...);
- delete 語句:刪除數據表中的一條或多條記錄,也可以刪除數據表中的所有記錄。
DELETE FROM [table_name] WHERE [column_name] = [value];
- update 語句:用於修改已存在表中的記錄的內容。
UPDATE [table_name] SET [column_name1] = [value1] WHERE [column_name2] = [value2];
- truncate 語句:清除表中所有數據。
-- 對比drop的操作,僅清除表中的數據 TRUNCATE TABLE [table_name]
DCL (Data Control Language):數據控制語言
- grant 語句:允許對象的創建者給某用戶或某組或所有用戶(PUBLIC)某些特定的權限。
-- 向 數據庫用戶 授權 數據庫對象(表、視圖、字段)的 權限(select,insert,update,delete) GRANT <權限> ON <數據對象> TO <數據庫用戶>
- revoke 語句:可以廢除某用戶或某組或所有用戶訪問權限。
-- 回收 數據庫用戶 在 數據庫對象(表、視圖、字段)的 權限(select,insert,update,delete) REVOKE <權限> ON <數據對象> FROM <數據庫用戶名>
實戰:
-- 創建數據庫的用戶 允許所有ip進行鏈接(通過通配符%來表示) CREATE USER 'selectonly'@'%' IDENTIFIED BY 'S3lect@only'; -- 創建數據庫的用戶 允許指定ip:localhost進行鏈接 CREATE USER 'selectonly'@'localhost' IDENTIFIED BY 'S3lect@only'; -- 刪除指定用戶 DROP USER 'selectonly'@'%'; -- 給用戶授權只讀權限select GRANT select ON sc_golden_panda.* TO 'selectonly'@'%'; -- 允許訪問所有數據庫下的所有表 GRANT all privileges on *.* to '新用戶名'@'ip' identified by '新用戶密碼'; -- 指定數據庫test下的指定表test GRANT all privileges on test.test to '新用戶名'@'ip' identified by '新用戶密碼'; -- 設置用戶擁有查詢插入的權限 GRANT select,insert on *.* to '新用戶名'@'ip' identified by '新用戶密碼' WITH GRANT OPTION; -- 取消用戶查詢的查詢權限 REVOKE select ON sc_golden_panda.* FROM 'selectonly'; --修改后刷新權限 FLUSH PRIVILEGES; -- 查看指定用戶被授予的權限 SHOW grants for 'selectonly'@'%';
DQL (Data Query Language):數據查詢語言
- select 語句:數據檢索語句,用於從表中獲取數據。
SELECT [column_name1] FROM [table_name] WHERE [column_name2] = [value2];
- select 語句中所有關鍵字書寫順序
①SELECT [DISTINCT]
②FROM
③JOIN
④ON
⑤WHERE
⑥GROUP BY
⑦HAVING
⑧UNION
⑨ORDER BY
⑩LIMIT
- 執行順序
①FROM:將數據從硬盤加載到數據緩沖區,方便對接下來的數據進行操作。
②ON:join on實現多表連接查詢,推薦該種方式進行多表查詢,不使用子查詢。
③JOIN:(如right left 右連接-------從右邊表中讀取某個元組,並且找到該元組在左邊表中對應的元組或元組集)
④WHERE:從基表或視圖中選擇滿足條件的元組。(不能使用聚合函數)
⑤GROUP BY:分組,一般和聚合函數一起使用。
⑥HAVING:在元組的基礎上進行篩選,選出符合條件的元組。(一般與GROUP BY進行連用)
⑦SELECT:查詢到得所有元組需要羅列的哪些列。
⑧DISTINCT:去重的功能。
⑨UNION:將多個查詢結果合並(默認去掉重復的記錄)。
⑩ORDER BY:進行相應的排序。
⑪LIMIT 1:顯示輸出一條數據記錄(元組)
DPL (Data Processing Language):事務處理語言
- 事務處理語句能確保被DML語句影響的表的所有行及時得以更新DPL語句包括BEGIN TRANSACTION、COMMIT和ROLLBACK
-- 實際使用示例 -- 開啟事務t1 BEGIN {TRAN | TRANSACTION} [transaction_name] begin tran t1; -- 事務中的多個操作 insert/update/delete update ...; insert into ...; update ...; delete ...; -- 事務commit或者rollback commit;
CCL (Cursor Control Language):指針控制語言
- DECLARE CURSOR、FETCH INTO和UPDATE WHERE CURRENT用於對一個或多個表單獨行的操作