SQL 四大語(yǔ)言分類中DDL、DML、DCL、DQL的使用
SQL(結(jié)構(gòu)化查詢語(yǔ)言)通常被分為四種主要類型,每種類型負(fù)責(zé)不同的數(shù)據(jù)庫(kù)操作。下面我將詳細(xì)介紹這四類SQL語(yǔ)言的語(yǔ)法和用途。
一、DDL (Data Definition Language) 數(shù)據(jù)定義語(yǔ)言
功能:定義和管理數(shù)據(jù)庫(kù)對(duì)象結(jié)構(gòu)(表、視圖、索引等)
主要命令:
CREATE - 創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象
-- 創(chuàng)建數(shù)據(jù)庫(kù) CREATE DATABASE school; -- 創(chuàng)建表 CREATE TABLE students ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, age INT CHECK (age > 0), class_id INT, FOREIGN KEY (class_id) REFERENCES classes(id) ); -- 創(chuàng)建索引 CREATE INDEX idx_name ON students(name); -- 創(chuàng)建視圖 CREATE VIEW student_view AS SELECT id, name FROM students WHERE age > 10;
ALTER - 修改數(shù)據(jù)庫(kù)對(duì)象
-- 添加列 ALTER TABLE students ADD COLUMN gender CHAR(1); -- 修改列類型 ALTER TABLE students MODIFY COLUMN name VARCHAR(100); -- 刪除列 ALTER TABLE students DROP COLUMN gender;
DROP - 刪除數(shù)據(jù)庫(kù)對(duì)象
DROP TABLE IF EXISTS temp_students; DROP VIEW student_view;
TRUNCATE - 清空表數(shù)據(jù)(保留結(jié)構(gòu))
TRUNCATE TABLE log_data;
二、DML (Data Manipulation Language) 數(shù)據(jù)操作語(yǔ)言
功能:操作數(shù)據(jù)庫(kù)中的數(shù)據(jù)記錄
主要命令:
INSERT - 插入數(shù)據(jù)
-- 插入單條記錄
INSERT INTO students (name, age, class_id)
VALUES ('張三', 15, 1);
-- 插入多條記錄
INSERT INTO students (name, age, class_id)
VALUES ('李四', 16, 1),
('王五', 14, 2);
-- 從其他表插入數(shù)據(jù)
INSERT INTO graduate_students
SELECT * FROM students WHERE age > 18;UPDATE - 更新數(shù)據(jù)
-- 更新單列 UPDATE students SET age = 16 WHERE name = '張三'; -- 更新多列 UPDATE students SET age = age + 1, class_id = 3 WHERE id = 5; -- 使用子查詢更新 UPDATE students SET class_id = (SELECT id FROM classes WHERE name = '高三') WHERE age > 17;
DELETE - 刪除數(shù)據(jù)
-- 刪除特定記錄 DELETE FROM students WHERE id = 10; -- 刪除所有記錄 DELETE FROM temp_students; -- 使用子查詢刪除 DELETE FROM students WHERE class_id IN (SELECT id FROM classes WHERE grade = '畢業(yè)班');
MERGE - 合并操作(UPSERT)
-- MySQL語(yǔ)法 INSERT INTO students (id, name, age) VALUES (1, '張三', 15) ON DUPLICATE KEY UPDATE age = 16; -- PostgreSQL語(yǔ)法 INSERT INTO students (id, name, age) VALUES (1, '張三', 15) ON CONFLICT (id) DO UPDATE SET age = 16;
三、DQL (Data Query Language) 數(shù)據(jù)查詢語(yǔ)言
功能:查詢數(shù)據(jù)庫(kù)中的數(shù)據(jù)
主要命令:
SELECT - 查詢數(shù)據(jù)
-- 基本查詢 SELECT * FROM students; -- 條件查詢 SELECT name, age FROM students WHERE age > 15; -- 排序 SELECT * FROM students ORDER BY age DESC, name ASC; -- 分組聚合 SELECT class_id, COUNT(*) as student_count, AVG(age) as avg_age FROM students GROUP BY class_id HAVING COUNT(*) > 5; -- 連接查詢 SELECT s.name, c.class_name FROM students s JOIN classes c ON s.class_id = c.id; -- 子查詢 SELECT name FROM students WHERE class_id IN (SELECT id FROM classes WHERE grade = '高一'); -- 分頁(yè)查詢 SELECT * FROM students LIMIT 10 OFFSET 20; -- MySQL SELECT * FROM students OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY; -- SQL標(biāo)準(zhǔn)
WITH (CTE) - 公用表表達(dá)式
WITH top_students AS ( SELECT * FROM students ORDER BY score DESC LIMIT 10 ) SELECT * FROM top_students WHERE gender = 'F';
四、DCL (Data Control Language) 數(shù)據(jù)控制語(yǔ)言
功能:控制數(shù)據(jù)庫(kù)訪問(wèn)權(quán)限和事務(wù)處理
主要命令:
GRANT - 授予權(quán)限
-- 授予SELECT權(quán)限 GRANT SELECT ON students TO user1; -- 授予所有權(quán)限 GRANT ALL PRIVILEGES ON database.* TO 'admin'@'localhost'; -- 授予特定列權(quán)限 GRANT SELECT (name, age), UPDATE (age) ON students TO teacher_role;
REVOKE - 撤銷權(quán)限
-- 撤銷權(quán)限 REVOKE INSERT ON students FROM user2; -- 撤銷所有權(quán)限 REVOKE ALL PRIVILEGES ON database.* FROM 'old_admin'@'localhost';
COMMIT - 提交事務(wù)
BEGIN TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT;
ROLLBACK - 回滾事務(wù)
BEGIN TRANSACTION; DELETE FROM orders WHERE status = 'pending'; -- 發(fā)現(xiàn)錯(cuò)誤 ROLLBACK;
SAVEPOINT - 設(shè)置保存點(diǎn)
BEGIN TRANSACTION;
INSERT INTO log (message) VALUES ('Operation started');
SAVEPOINT sp1;
UPDATE data SET value = 10 WHERE id = 1;
-- 部分回滾
ROLLBACK TO SAVEPOINT sp1;
COMMIT;五、四種語(yǔ)言對(duì)比總結(jié)
| 類別 | 全稱 | 主要功能 | 常用命令 | 特點(diǎn) |
|---|---|---|---|---|
| DDL | Data Definition Language | 定義數(shù)據(jù)結(jié)構(gòu) | CREATE, ALTER, DROP, TRUNCATE | 自動(dòng)提交,不可回滾 |
| DML | Data Manipulation Language | 操作數(shù)據(jù)記錄 | INSERT, UPDATE, DELETE, MERGE | 需要顯式提交,可回滾 |
| DQL | Data Query Language | 查詢數(shù)據(jù) | SELECT, WITH | 不改變數(shù)據(jù),只檢索 |
| DCL | Data Control Language | 權(quán)限控制 | GRANT, REVOKE, COMMIT, ROLLBACK | 管理訪問(wèn)和事務(wù) |
六、實(shí)際應(yīng)用示例
場(chǎng)景:學(xué)生管理系統(tǒng)操作
-- DDL: 創(chuàng)建表結(jié)構(gòu)
CREATE TABLE classes (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
grade VARCHAR(20)
) ENGINE=InnoDB;
-- DML: 插入班級(jí)數(shù)據(jù)
INSERT INTO classes (name, grade) VALUES
('一班', '高一'), ('二班', '高一'), ('三班', '高二');
-- DQL: 查詢班級(jí)信息
SELECT * FROM classes WHERE grade = '高一';
-- DML: 更新班級(jí)信息
UPDATE classes SET grade = '高三' WHERE name = '三班';
-- DCL: 創(chuàng)建用戶并授權(quán)
CREATE USER 'teacher'@'%' IDENTIFIED BY 'password';
GRANT SELECT, UPDATE ON school.students TO 'teacher'@'%';
GRANT SELECT ON school.classes TO 'teacher'@'%';
-- DDL: 添加索引提高查詢性能
CREATE INDEX idx_class_grade ON classes(grade);
-- 事務(wù)處理示例 (DCL)
BEGIN TRANSACTION;
-- DML: 轉(zhuǎn)班操作
UPDATE students SET class_id = 2 WHERE id = 101;
UPDATE class_stats SET student_count = student_count - 1 WHERE class_id = 1;
UPDATE class_stats SET student_count = student_count + 1 WHERE class_id = 2;
COMMIT;到此這篇關(guān)于SQL 四大語(yǔ)言分類中DDL、DML、DCL、DQL的使用的文章就介紹到這了,更多相關(guān)SQL DDL DML DCL DQL內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
sql server中的decimal或者numeric的精度問(wèn)題
在sql server中定義列的數(shù)據(jù)類型decimal時(shí)需要制定其精度和小數(shù)位數(shù)。2009-05-05
sql2000數(shù)據(jù)庫(kù)清除重復(fù)數(shù)據(jù)的二種方法
這篇文章主要介紹了sql2000數(shù)據(jù)庫(kù)清除重復(fù)數(shù)據(jù)的二種方法,可以使用使用游標(biāo)實(shí)現(xiàn)和sql語(yǔ)句實(shí)現(xiàn),需要的朋友可以參考下2014-03-03
SQL Server 2005附加數(shù)據(jù)庫(kù)時(shí)Read-Only錯(cuò)誤的解決方案
本文我們主要介紹了SQL Server 2005附加數(shù)據(jù)庫(kù)時(shí)提示Read-Only錯(cuò)誤的解決方案,需要的朋友可以參考下2015-08-08
通過(guò)SQL繪制楊輝三角的實(shí)現(xiàn)方法介紹
本篇文章小編為大家介紹,通過(guò)SQL繪制楊輝三角的實(shí)現(xiàn)方法介紹。需要的朋友參考下2013-04-04
win2003安裝sqlserver 2000提示無(wú)法驗(yàn)證產(chǎn)品密鑰的解決方法
由于腳本之家的安全設(shè)置,刪除了很多安全隱患的東西,也導(dǎo)致了一些軟件安裝出現(xiàn)錯(cuò)誤,所以建議大家在安裝好軟件再安全設(shè)置。今天就出現(xiàn)了安全sql2000時(shí)提示提示無(wú)法驗(yàn)證產(chǎn)品密鑰,下面的具體的解決方法。2011-07-07
淺述SQL Server的聚焦強(qiáng)制索引查詢條件和Columnstore Index
本文主要講了強(qiáng)制使用索引條件來(lái)進(jìn)行查詢,當(dāng)對(duì)于使用默認(rèn)創(chuàng)建索引進(jìn)行查詢計(jì)劃時(shí)覺(jué)得不是最優(yōu)解,可以嘗試使用強(qiáng)制索引來(lái)進(jìn)行對(duì)比找出更好得解決方案。簡(jiǎn)短的內(nèi)容,深入的理解.有興趣的朋友可以看下2016-12-12
一個(gè)函數(shù)解決SQLServer中bigint 轉(zhuǎn) int帶符號(hào)時(shí)報(bào)錯(cuò)問(wèn)題
這篇文章主要介紹了解決SQLServer中bigint 轉(zhuǎn) int帶符號(hào)時(shí)報(bào)錯(cuò)問(wèn)題的函數(shù),需要的朋友可以參考下2014-08-08

