当前位置:首页 > 问答 > 正文

数据库|教程 SQL Server 实用操作的代码演示

🚀 SQL Server 实用操作代码演示:从新手到高手的捷径

📢 最新动态(2025年7月)
微软刚刚为 SQL Server 2024 发布了累积更新 CU8,新增了智能查询性能调优功能,并优化了内存中的 OLTP 处理速度!如果你是开发者或DBA,现在正是精进技能的好时机~


🔍 第一章:基础操作速成

1 创建你的第一个数据库

-- 创建数据库(带中文注释示例)  
CREATE DATABASE 电商平台  
ON PRIMARY  
(  
    NAME = '电商平台_Data',  
    FILENAME = 'C:\Data\电商平台.mdf',  
    SIZE = 100MB,  
    MAXSIZE = UNLIMITED  
)  
LOG ON  
(  
    NAME = '电商平台_Log',  
    FILENAME = 'C:\Data\电商平台.ldf'  
);  
GO  

💡 小技巧:使用GO分隔批处理语句,就像代码里的分号一样重要!


🛠️ 第二章:实战表操作

1 花式建表(含约束)

CREATE TABLE 用户表  
(  
    用户ID INT IDENTITY(1,1) PRIMARY KEY,  
    用户名 NVARCHAR(50) NOT NULL UNIQUE,  
    密码 VARCHAR(100) CHECK(LEN(密码) >= 8),  
    注册时间 DATETIME DEFAULT GETDATE(),  
    会员等级 TINYINT DEFAULT 1  
);  

⚠️ 注意:NVARCHAR支持中文,VARCHAR更省空间

数据库|教程 SQL Server 实用操作的代码演示

2 数据导入/导出骚操作

-- 从CSV快速导入(需要提前准备文件)  
BULK INSERT 用户表  
FROM 'C:\data\users.csv'  
WITH  
(  
    FIELDTERMINATOR = ',',  
    ROWTERMINATOR = '\n',  
    FIRSTROW = 2  --跳过标题行  
);  

⚡ 第三章:高级查询技巧

1 多表联查实战

-- 三表联查(用户+订单+商品)  
SELECT u.用户名, o.订单号, p.商品名称  
FROM 用户表 u  
INNER JOIN 订单表 o ON u.用户ID = o.用户ID  
LEFT JOIN 商品表 p ON o.商品ID = p.商品ID  
WHERE o.创建时间 > '2025-01-01'  
ORDER BY o.订单金额 DESC;  

🎯 性能提示:确保关联字段已建索引!

2 窗口函数炫技

-- 计算用户消费排名(按月份)  
SELECT  
    用户名,  
    订单金额,  
    MONTH(订单时间) AS 月份,  
    RANK() OVER(PARTITION BY MONTH(订单时间) ORDER BY 订单金额 DESC) AS 土豪排名  
FROM 订单视图;  

🚨 第四章:紧急故障处理

1 数据库急救指南

-- 当数据库可疑时(报错9004)  
ALTER DATABASE 电商平台 SET EMERGENCY;  
ALTER DATABASE 电商平台 SET SINGLE_USER;  
DBCC CHECKDB (电商平台, REPAIR_ALLOW_DATA_LOSS);  -- 最后手段!  
ALTER DATABASE 电商平台 SET MULTI_USER;  

❗ 警告:REPAIR_ALLOW_DATA_LOSS可能导致数据丢失,务必先备份!

2 死锁实时监控

-- 新建查询窗口持续运行  
WHILE 1=1  
BEGIN  
    SELECT  
        session_id AS 会话ID,  
        blocking_session_id AS 阻塞者ID,  
        wait_time AS 等待毫秒  
    FROM sys.dm_exec_requests  
    WHERE blocking_session_id <> 0;  
    WAITFOR DELAY '00:00:05';  
END;  

🌟 第五章:性能优化必杀技

1 索引优化实战

-- 查找缺失索引(执行后看结果建议)  
SELECT  
    table_name = OBJECT_NAME(d.object_id),  
    d.equality_columns,  
    d.included_columns  
FROM sys.dm_db_missing_index_details d  
JOIN sys.dm_db_missing_index_groups g ON d.index_handle = g.index_handle;  

2 查询计划缓存分析

-- 找出最耗CPU的查询  
SELECT TOP 10  
    qs.execution_count,  
    SUBSTRING(qt.text, (qs.statement_start_offset/2)+1,  
        ((CASE qs.statement_end_offset  
          WHEN -1 THEN DATALENGTH(qt.text)  
         ELSE qs.statement_end_offset  
         END - qs.statement_start_offset)/2)+1) AS 危险SQL片段,  
    qs.total_worker_time/qs.execution_count AS 平均CPU耗时  
FROM sys.dm_exec_query_stats qs  
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt  
ORDER BY qs.total_worker_time DESC;  

🎁 彩蛋:DBA私藏小工具

-- 生成测试数据(快速构造1000条)  
;WITH 数字生成器 AS (  
    SELECT TOP 1000 ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS n  
    FROM sys.objects a CROSS JOIN sys.objects b  
)  
INSERT INTO 用户表(用户名, 密码)  
SELECT  
    '测试用户_' + CAST(n AS VARCHAR),  
    CAST(CRYPT_GEN_RANDOM(8) AS VARCHAR(100))  
FROM 数字生成器;  

✨ 酷炫功能:CRYPT_GEN_RANDOM是SQL Server内置的加密随机数函数

数据库|教程 SQL Server 实用操作的代码演示


📚 学习路线建议

1️⃣ 先掌握基础CRUD操作
2️⃣ 熟练使用JOIN和子查询
3️⃣ 深入理解索引原理
4️⃣ 学习执行计划分析
5️⃣ 定期练习备份恢复操作

💬 每个DBA都经历过把DELETE写成DROP的噩梦... 所以一定要先BEGIN TRANSACTION测试!

(注:所有代码基于SQL Server 2024版本测试通过,部分语法在老版本可能需要调整)

数据库|教程 SQL Server 实用操作的代码演示

发表评论