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

MySQL常用SQL語句和使用場景代碼示例

 更新時間:2026年04月27日 10:57:10   作者:運維研發(fā)之路  
MySQL常用語句主要圍繞數(shù)據(jù)庫、表和數(shù)據(jù)操作展開,能滿足基本的數(shù)據(jù)庫管理需求,這篇文章主要介紹了MySQL常用SQL語句和使用場景的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

1. 數(shù)據(jù)庫操作

創(chuàng)建數(shù)據(jù)庫

CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

查看所有數(shù)據(jù)庫

SHOW DATABASES;

選擇數(shù)據(jù)庫

USE mydb;

刪除數(shù)據(jù)庫

DROP DATABASE mydb;

修改數(shù)據(jù)庫

ALTER DATABASE mydb CHARACTER SET utf8mb4;

2. 表操作

創(chuàng)建表

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL,
    password VARCHAR(255) NOT NULL,
    age INT DEFAULT 18,
    status TINYINT DEFAULT 1 COMMENT '1:active 0:inactive',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

查看表結構

DESC users;
-- 或
DESCRIBE users;
-- 或
SHOW COLUMNS FROM users;

查看所有表

SHOW TABLES;

修改表結構

-- 添加列
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
?
-- 刪除列
ALTER TABLE users DROP COLUMN phone;
?
-- 修改列類型
ALTER TABLE users MODIFY COLUMN username VARCHAR(100);
?
-- 重命名列
ALTER TABLE users CHANGE COLUMN username user_name VARCHAR(50);
?
-- 添加索引
ALTER TABLE users ADD INDEX idx_email (email);
?
-- 添加外鍵
ALTER TABLE orders ADD CONSTRAINT fk_user_id
    FOREIGN KEY (user_id) REFERENCES users(id);

刪除表

DROP TABLE users;
-- 或
DROP TABLE IF EXISTS users;

清空表(保留表結構)

TRUNCATE TABLE users;

重命名表

RENAME TABLE old_name TO new_name;

3. 數(shù)據(jù)操作 (CRUD)

插入數(shù)據(jù) (INSERT)

-- 插入單條記錄
INSERT INTO users (username, email, password) VALUES ('zhangsan', 'zhangsan@example.com', '123456');
?
-- 插入多條記錄
INSERT INTO users (username, email, password) VALUES
    ('lisi', 'lisi@example.com', '123456'),
    ('wangwu', 'wangwu@example.com', '123456');
?
-- 從另一表插入數(shù)據(jù)
INSERT INTO users_backup SELECT * FROM users;

更新數(shù)據(jù) (UPDATE)

-- 更新單個字段
UPDATE users SET email = 'newemail@example.com' WHERE id = 1;
?
-- 更新多個字段
UPDATE users SET email = 'new@example.com', status = 0 WHERE id = 1;
?
-- 批量更新
UPDATE users SET status = 0 WHERE age < 18;

刪除數(shù)據(jù) (DELETE)

-- 刪除指定記錄
DELETE FROM users WHERE id = 1;
?
-- 批量刪除
DELETE FROM users WHERE status = 0;
?
-- 清空表(DELETE方式,會重置自增ID)
DELETE FROM users;

4. 查詢語句

基本查詢

-- 查詢所有列
SELECT * FROM users;
?
-- 查詢指定列
SELECT id, username, email FROM users;
?
-- 去重查詢
SELECT DISTINCT status FROM users;

條件查詢 (WHERE)

-- 等于
SELECT * FROM users WHERE id = 1;
?
-- 不等于
SELECT * FROM users WHERE status != 0;
?
-- 多條件 AND
SELECT * FROM users WHERE age >= 18 AND age <= 60;
?
-- 多條件 OR
SELECT * FROM users WHERE age < 18 OR age > 60;
?
-- IN 查詢
SELECT * FROM users WHERE id IN (1, 2, 3);
?
-- NOT IN 查詢
SELECT * FROM users WHERE id NOT IN (1, 2, 3);
?
-- BETWEEN 范圍查詢
SELECT * FROM users WHERE age BETWEEN 18 AND 60;
?
-- LIKE 模糊查詢
SELECT * FROM users WHERE username LIKE 'zhang%';  -- 以zhang開頭
SELECT * FROM users WHERE username LIKE '%san';     -- 以san結尾
SELECT * FROM users WHERE username LIKE '%an%';     -- 包含an
SELECT * FROM users WHERE username LIKE 'zh_ng';    -- _匹配單個字符
?
-- IS NULL 查詢
SELECT * FROM users WHERE phone IS NULL;
?
-- IS NOT NULL 查詢
SELECT * FROM users WHERE phone IS NOT NULL;

排序 (ORDER BY)

-- 升序
SELECT * FROM users ORDER BY age ASC;
?
-- 降序
SELECT * FROM users ORDER BY created_at DESC;
?
-- 多字段排序
SELECT * FROM users ORDER BY status ASC, age DESC;

限制結果集 (LIMIT)

-- 查詢前N條
SELECT * FROM users LIMIT 10;
?
-- 分頁查詢(跳過M條,取N條)
SELECT * FROM users LIMIT 0, 10;   -- 第1頁,每頁10條
SELECT * FROM users LIMIT 10, 10;  -- 第2頁,每頁10條

分組查詢 (GROUP BY)

-- 按狀態(tài)分組統(tǒng)計
SELECT status, COUNT(*) as count FROM users GROUP BY status;
?
-- 多字段分組
SELECT status, age, COUNT(*) as count FROM users GROUP BY status, age;
?
-- 分組后過濾(HAVING)
SELECT status, COUNT(*) as count FROM users
GROUP BY status
HAVING count > 5;

5. 聚合函數(shù)

-- COUNT 統(tǒng)計數(shù)量
SELECT COUNT(*) FROM users;
SELECT COUNT(DISTINCT email) FROM users;

-- SUM 求和
SELECT SUM(amount) FROM orders;

-- AVG 平均值
SELECT AVG(age) FROM users;

-- MAX 最大值
SELECT MAX(price) FROM products;

-- MIN 最小值
SELECT MIN(price) FROM products;

-- 組合使用
SELECT
    COUNT(*) as total,
    AVG(age) as avg_age,
    MAX(age) as max_age,
    MIN(age) as min_age
FROM users;

6. 連接查詢

內連接 (INNER JOIN)

-- 只返回匹配的記錄
SELECT u.username, o.order_no, o.amount
FROM users u
INNER JOIN orders o ON u.id = o.user_id;

左連接 (LEFT JOIN)

-- 返回左表所有記錄,右表沒有匹配則為NULL
SELECT u.username, o.order_no
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;

右連接 (RIGHT JOIN)

-- 返回右表所有記錄,左表沒有匹配則為NULL
SELECT u.username, o.order_no
FROM users u
RIGHT JOIN orders o ON u.id = o.user_id;

多表連接

SELECT u.username, o.order_no, p.product_name
FROM users u
INNER JOIN orders o ON u.id = o.user_id
INNER JOIN order_items oi ON o.id = oi.order_id
INNER JOIN products p ON oi.product_id = p.id;

7. 索引操作

創(chuàng)建索引

-- 普通索引
CREATE INDEX idx_username ON users(username);

-- 唯一索引
CREATE UNIQUE INDEX idx_email ON users(email);

-- 組合索引
CREATE INDEX idx_status_age ON users(status, age);

-- 全文索引
CREATE FULLTEXT INDEX idx_content ON articles(content);

查看索引

SHOW INDEX FROM users;

刪除索引

DROP INDEX idx_username ON users;

8. 視圖操作

創(chuàng)建視圖

CREATE VIEW user_orders AS
SELECT u.id, u.username, COUNT(o.id) as order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.username;

查看視圖

SELECT * FROM user_orders;

刪除視圖

DROP VIEW user_orders;

9. 事務處理

-- 開啟事務
START TRANSACTION;
-- 或
BEGIN;

-- 執(zhí)行SQL
UPDATE users SET balance = balance - 100 WHERE id = 1;
UPDATE users SET balance = balance + 100 WHERE id = 2;

-- 提交事務
COMMIT;

-- 回滾事務
ROLLBACK;

10. 用戶權限管理

創(chuàng)建用戶

CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'password123';
CREATE USER 'testuser'@'%' IDENTIFIED BY 'password123';  -- 允許遠程連接

授權

-- 授予所有權限
GRANT ALL PRIVILEGES ON mydb.* TO 'testuser'@'localhost';

-- 授予特定權限
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'testuser'@'localhost';

-- 刷新權限
FLUSH PRIVILEGES;

查看權限

SHOW GRANTS FOR 'testuser'@'localhost';

撤銷權限

REVOKE ALL PRIVILEGES ON mydb.* FROM 'testuser'@'localhost';

刪除用戶

DROP USER 'testuser'@'localhost';

修改密碼

ALTER USER 'testuser'@'localhost' IDENTIFIED BY 'newpassword';

11. 常用場景示例

場景1:用戶注冊與登錄

-- 注冊(插入用戶)
INSERT INTO users (username, email, password) VALUES ('newuser', 'user@example.com', MD5('password'));

-- 登錄驗證
SELECT * FROM users WHERE username = 'newuser' AND password = MD5('password');

場景2:數(shù)據(jù)分頁查詢

-- 通用分頁公式:LIMIT (page-1)*pageSize, pageSize
SELECT * FROM users ORDER BY created_at DESC LIMIT 0, 10;   -- 第1頁
SELECT * FROM users ORDER BY created_at DESC LIMIT 10, 10;  -- 第2頁

場景3:數(shù)據(jù)統(tǒng)計報表

-- 每日新增用戶統(tǒng)計
SELECT DATE(created_at) as date, COUNT(*) as new_users
FROM users
GROUP BY DATE(created_at)
ORDER BY date DESC;

-- 各狀態(tài)用戶數(shù)量
SELECT
    CASE status
        WHEN 1 THEN '活躍'
        WHEN 0 THEN '禁用'
        ELSE '未知'
    END as status_name,
    COUNT(*) as count
FROM users
GROUP BY status;

場景4:排行榜

-- 用戶消費排行TOP10
SELECT u.username, SUM(o.amount) as total_amount
FROM users u
INNER JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.username
ORDER BY total_amount DESC
LIMIT 10;

場景5:查找重復數(shù)據(jù)

-- 查找重復的郵箱
SELECT email, COUNT(*) as count
FROM users
GROUP BY email
HAVING COUNT(*) > 1;

-- 刪除重復數(shù)據(jù)(保留ID最小的)
DELETE u1 FROM users u1
INNER JOIN users u2
WHERE u1.id > u2.id AND u1.email = u2.email;

場景6:數(shù)據(jù)導入導出

-- 導出數(shù)據(jù)到CSV文件(命令行)
mysql -u root -p -e "SELECT * FROM users" mydb > users.csv;

-- 導入CSV文件
LOAD DATA INFILE '/path/to/users.csv'
INTO TABLE users
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

場景7:批量更新

-- CASE WHEN 批量更新
UPDATE users
SET status = CASE
    WHEN age < 18 THEN 0
    WHEN age >= 18 AND age < 60 THEN 1
    ELSE 2
END;

場景8:時間范圍查詢

-- 查詢最近7天的數(shù)據(jù)
SELECT * FROM orders
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY);

-- 查詢本月數(shù)據(jù)
SELECT * FROM orders
WHERE YEAR(created_at) = YEAR(NOW())
AND MONTH(created_at) = MONTH(NOW());

-- 查詢指定時間段
SELECT * FROM orders
WHERE created_at BETWEEN '2024-01-01' AND '2024-12-31';

場景9:樹形結構查詢(分類)

-- 假設categories表有id, name, parent_id字段
-- 查找某分類的所有子分類(遞歸,MySQL 8.0+)
WITH RECURSIVE category_tree AS (
    SELECT * FROM categories WHERE id = 1
    UNION ALL
    SELECT c.* FROM categories c
    INNER JOIN category_tree ct ON c.parent_id = ct.id
)
SELECT * FROM category_tree;

場景10:軟刪除與恢復

-- 軟刪除(添加is_deleted字段)
UPDATE users SET is_deleted = 1, deleted_at = NOW() WHERE id = 1;
-- 查詢未刪除的數(shù)據(jù)
SELECT * FROM users WHERE is_deleted = 0;
-- 恢復數(shù)據(jù)
UPDATE users SET is_deleted = 0, deleted_at = NULL WHERE id = 1;

常用函數(shù)速查

字符串函數(shù)

CONCAT(str1, str2)      -- 連接字符串
LENGTH(str)             -- 字符串長度
UPPER(str)              -- 轉大寫
LOWER(str)              -- 轉小寫
TRIM(str)               -- 去除首尾空格
SUBSTRING(str, pos, len) -- 截取子串
REPLACE(str, old, new)  -- 替換

日期時間函數(shù)

NOW()                   -- 當前日期時間
CURDATE()               -- 當前日期
CURTIME()               -- 當前時間
DATE(datetime)          -- 提取日期部分
YEAR(date)              -- 提取年份
MONTH(date)             -- 提取月份
DAY(date)               -- 提提取日
DATE_FORMAT(date, format) -- 日期格式化
DATE_ADD(date, INTERVAL expr unit) -- 日期增加
DATE_SUB(date, INTERVAL expr unit) -- 日期減少

數(shù)值函數(shù)

ABS(num)                -- 絕對值
ROUND(num, decimals)    -- 四舍五入
CEIL(num)               -- 向上取整
FLOOR(num)              -- 向下取整
RAND()                  -- 隨機數(shù)

性能優(yōu)化建議

  • 使用索引:為經(jīng)常查詢的WHERE、JOIN、ORDER BY字段添加索引

  • 避免 SELECT *:只查詢需要的字段

  • 合理使用 LIMIT:限制返回結果數(shù)量

  • 避免在WHERE中使用函數(shù):會導致索引失效

  • 使用 EXPLAIN:分析查詢執(zhí)行計劃

  • 優(yōu)化表結構:選擇合適的數(shù)據(jù)類型

  • 分頁優(yōu)化:大數(shù)據(jù)量分頁使用子查詢或游標

  • 批量操作:使用批量插入代替單條插入

總結 

到此這篇關于MySQL常用SQL語句和使用場景的文章就介紹到這了,更多相關MySQL常用SQL語句使用場景內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

南部县| 屏东县| 名山县| 通州市| 翁牛特旗| 喀什市| 台江县| 苏州市| 吴旗县| 寿宁县| 玛沁县| 南靖县| 隆昌县| 南皮县| 虞城县| 莎车县| 永昌县| 曲阳县| 莆田市| 老河口市| 合作市| 同江市| 怀集县| 志丹县| 延津县| 新化县| 毕节市| 盐津县| 嘉定区| 淳安县| 游戏| 阿鲁科尔沁旗| 汝城县| 获嘉县| 阿坝县| 修水县| 蛟河市| 泾川县| 石嘴山市| 南通市| 广丰县|