最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL 四大語言分類中DDL、DML、DCL、DQL的使用

 更新時(shí)間:2025年08月04日 08:56:49   作者:yh云想  
本文主要介紹了SQL 四大語言分類中DDL、DML、DCL、DQL的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

SQL(結(jié)構(gòu)化查詢語言)通常被分為四種主要類型,每種類型負(fù)責(zé)不同的數(shù)據(jù)庫操作。下面我將詳細(xì)介紹這四類SQL語言的語法和用途。

一、DDL (Data Definition Language) 數(shù)據(jù)定義語言

功能:定義和管理數(shù)據(jù)庫對象結(jié)構(gòu)(表、視圖、索引等)

主要命令:

CREATE - 創(chuàng)建數(shù)據(jù)庫對象

-- 創(chuàng)建數(shù)據(jù)庫
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ù)庫對象

-- 添加列
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ù)庫對象

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ù)操作語言

功能:操作數(shù)據(jù)庫中的數(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語法
INSERT INTO students (id, name, age)
VALUES (1, '張三', 15)
ON DUPLICATE KEY UPDATE age = 16;

-- PostgreSQL語法
INSERT INTO students (id, name, age)
VALUES (1, '張三', 15)
ON CONFLICT (id) DO UPDATE SET age = 16;

三、DQL (Data Query Language) 數(shù)據(jù)查詢語言

功能:查詢數(shù)據(jù)庫中的數(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 = '高一');

-- 分頁查詢
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ù)控制語言

功能:控制數(shù)據(jù)庫訪問權(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;

五、四種語言對比總結(jié)

類別全稱主要功能常用命令特點(diǎn)
DDLData Definition Language定義數(shù)據(jù)結(jié)構(gòu)CREATE, ALTER, DROP, TRUNCATE自動提交,不可回滾
DMLData Manipulation Language操作數(shù)據(jù)記錄INSERT, UPDATE, DELETE, MERGE需要顯式提交,可回滾
DQLData Query Language查詢數(shù)據(jù)SELECT, WITH不改變數(shù)據(jù),只檢索
DCLData Control Language權(quán)限控制GRANT, REVOKE, COMMIT, ROLLBACK管理訪問和事務(wù)

六、實(shí)際應(yī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: 插入班級數(shù)據(jù)
INSERT INTO classes (name, grade) VALUES 
('一班', '高一'), ('二班', '高一'), ('三班', '高二');

-- DQL: 查詢班級信息
SELECT * FROM classes WHERE grade = '高一';

-- DML: 更新班級信息
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 四大語言分類中DDL、DML、DCL、DQL的使用的文章就介紹到這了,更多相關(guān)SQL DDL DML DCL DQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評論

慈溪市| 肃北| 九龙城区| 修水县| 阿拉善左旗| 麻江县| 克拉玛依市| 彭水| 葫芦岛市| 阳高县| 芒康县| 吉安市| 绥芬河市| 吴旗县| 怀远县| 五家渠市| 夏邑县| 岳普湖县| 调兵山市| 新建县| 湛江市| 天水市| 浮梁县| 阳高县| 浦县| 永胜县| 连南| 辽中县| 沁阳市| 澎湖县| 黔东| 孝昌县| 岳池县| 丽江市| 潼南县| 沐川县| 大丰市| 陈巴尔虎旗| 天峨县| 绍兴县| 汾西县|