SQL Server数据库的常用语句的分类整理和典型示例

目录

一、数据定义语言 (DDL)

1. 数据库操作

2. 表结构操作

3. 索引管理

二、数据操作语言 (DML)

1. 数据插入

2. 数据更新

3. 数据删除

三、数据查询语言 (DQL)

1. 基础查询

2. 高级查询

3. 性能优化

四、数据控制语言 (DCL)

1. 权限管理

五、事务与并发控制

六、维护与监控

1. 备份恢复

2. 性能监控

七、高级功能

1. JSON支持

2. 内存优化表


一、数据定义语言 (DDL)

1. 数据库操作
-- 创建数据库
CREATE DATABASE SalesDB 
ON PRIMARY 
( NAME = SalesDB_Data,
  FILENAME = 'D:\Data\SalesDB.mdf',
  SIZE = 50MB,
  MAXSIZE = UNLIMITED,
  FILEGROWTH = 10% )
LOG ON 
( NAME = SalesDB_Log,
  FILENAME = 'D:\Data\SalesDB.ldf',
  SIZE = 20MB,
  MAXSIZE = 1GB,
  FILEGROWTH = 5MB );
 
-- 修改数据库配置
ALTER DATABASE SalesDB 
MODIFY FILE 
( NAME = SalesDB_Data, SIZE = 100MB );
 
-- 删除数据库
DROP DATABASE SalesDB;
2. 表结构操作
-- 创建表(含约束)
CREATE TABLE Employees (
    EmpID INT PRIMARY KEY IDENTITY(1,1),
    FirstName NVARCHAR(50) NOT NULL,
    LastName NVARCHAR(50) NOT NULL,
    HireDate DATE DEFAULT GETDATE(),
    Salary DECIMAL(10,2) CHECK (Salary > 0),
    DeptID INT FOREIGN KEY REFERENCES Departments(DeptID)
);
 
-- 修改表结构
ALTER TABLE Employees 
ADD Email NVARCHAR(100) UNIQUE;
 
ALTER TABLE Employees 
ALTER COLUMN Salary DECIMAL(12,2);
 
-- 删除表
DROP TABLE Employees;
3. 索引管理
-- 创建索引
CREATE NONCLUSTERED INDEX IX_Employees_LastName 
ON Employees(LastName)
INCLUDE (FirstName, HireDate);
 
-- 重建索引
ALTER INDEX ALL ON Employees 
REBUILD WITH (FILLFACTOR = 90);
 
-- 删除索引
DROP INDEX Employees.IX_Employees_LastName;

二、数据操作语言 (DML)

1. 数据插入
-- 批量插入
INSERT INTO Employees (FirstName, LastName, Salary, DeptID)
VALUES 
('John', 'Doe', 65000.00, 1),
('Jane', 'Smith', 72000.00, 2);
 
-- 从查询结果插入
INSERT INTO SalesArchive
SELECT * FROM Sales 
WHERE OrderDate < '2023-01-01';
2. 数据更新
-- 条件更新
UPDATE Employees
SET Salary = Salary * 1.10
WHERE DeptID IN (SELECT DeptID FROM Departments WHERE DeptName = 'Sales');
 
-- 使用CTE更新
WITH TopPerformers AS (
    SELECT TOP 10 EmpID, SalesAmount 
    FROM Sales 
    ORDER BY SalesAmount DESC
)
UPDATE Employees
SET Bonus = 5000
WHERE EmpID IN (SELECT EmpID FROM TopPerformers);
3. 数据删除
-- 安全删除(使用事务)
BEGIN TRANSACTION;
DELETE FROM AuditLog 
WHERE LogDate < DATEADD(year, -1, GETDATE());
-- 验证后提交
COMMIT;
-- 回滚示例
-- ROLLBACK;

三、数据查询语言 (DQL)

1. 基础查询
-- 列别名与计算
SELECT 
    FirstName + ' ' + LastName AS FullName,
    Salary * 12 AS AnnualSalary
FROM Employees;
 
-- 条件过滤
SELECT * FROM Products
WHERE Category = 'Electronics' 
  AND UnitPrice BETWEEN 500 AND 2000;
2. 高级查询
-- 窗口函数(排名)
SELECT 
    SalesPerson,
    SUM(OrderAmount) AS TotalSales,
    RANK() OVER (ORDER BY SUM(OrderAmount) DESC) AS SalesRank
FROM Orders
GROUP BY SalesPerson;
 
-- 公用表表达式(CTE)
WITH RegionSales AS (
    SELECT 
        Region,
        SUM(OrderAmount) AS RegionalSales
    FROM Orders
    GROUP BY Region
)
SELECT 
    Region,
    RegionalSales,
    (RegionalSales * 1.0 / SUM(RegionalSales) OVER()) * 100 AS SalesPercentage
FROM RegionSales;
3. 性能优化
-- 强制索引提示
SELECT * FROM Employees WITH (INDEX(IX_Employees_LastName))
WHERE LastName LIKE 'S%';
 
-- 查询执行计划
EXPLAIN 
SELECT * FROM Orders 
WHERE CustomerID = 1001;

四、数据控制语言 (DCL)

1. 权限管理
-- 创建登录名
CREATE LOGIN SalesUser 
WITH PASSWORD = 'SecurePass123!';
 
-- 分配数据库角色
USE SalesDB;
CREATE USER SalesUser FOR LOGIN SalesUser;
ALTER ROLE db_datareader ADD MEMBER SalesUser;
 
-- 权限细化控制
GRANT SELECT, INSERT ON Orders TO SalesUser;
DENY UPDATE ON Employees TO SalesUser;

五、事务与并发控制

- 显式事务
BEGIN TRY
    BEGIN TRANSACTION;
    UPDATE Accounts 
    SET Balance = Balance - 1000 
    WHERE AccountID = 1001;
    
    UPDATE Accounts 
    SET Balance = Balance + 1000 
    WHERE AccountID = 2002;
    COMMIT;
END TRY
BEGIN CATCH
    ROLLBACK;
    THROW;
END CATCH;
 
-- 事务隔离级别
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN TRANSACTION;
SELECT * FROM Orders WHERE OrderID = 5001;
COMMIT;

六、维护与监控

1. 备份恢复
-- 完整备份
BACKUP DATABASE SalesDB 
TO DISK = 'D:\Backup\SalesDB_Full.bak' 
WITH INIT, STATS = 10;
 
-- 差异备份
BACKUP DATABASE SalesDB 
TO DISK = 'D:\Backup\SalesDB_Diff.bak' 
WITH DIFFERENTIAL, STATS = 10;
 
-- 时间点恢复
RESTORE DATABASE SalesDB 
FROM DISK = 'D:\Backup\SalesDB_Full.bak' 
WITH FILE = 1,
NORECOVERY;
 
RESTORE LOG SalesDB 
FROM DISK = 'D:\Backup\SalesDB_Log.trn' 
WITH FILE = 2,
STOPAT = '2023-10-01T09:00:00',
RECOVERY;
2. 性能监控
-- 查询活动会话
SELECT 
    session_id,
    status,
    command,
    text AS QueryText
FROM sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle);
 
-- 缺失索引建议
SELECT 
    mig.index_group_handle,
    mid.index_handle,
    statement AS [Table Name],
    column_id,
    column_name,
    column_usage
FROM sys.dm_db_missing_index_groups mig
INNER JOIN sys.dm_db_missing_index_group_stats migs 
    ON migs.group_handle = mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details mid 
    ON mig.index_handle = mid.index_handle
ORDER BY migs.user_seeks DESC;

七、高级功能

1. JSON支持
- 解析JSON数据
DECLARE @json NVARCHAR(MAX) = 
N'{
    "OrderID": 5001,
    "Items": [
        {"ProductID": 101, "Quantity": 2},
        {"ProductID": 102, "Quantity": 1}
    ]
}';
 
SELECT 
    OrderID = JSON_VALUE(@json, '$.OrderID'),
    ProductIDs = (
        SELECT ProductID 
        FROM OPENJSON(@json, '$.Items')
        WITH (ProductID INT '$.ProductID')
    );
2. 内存优化表
-- 创建内存优化表
CREATE TABLE dbo.HighFrequencyTrades (
    TradeID BIGINT IDENTITY(1,1) PRIMARY KEY NONCLUSTERED,
    Symbol NVARCHAR(10) NOT NULL,
    TradeTime DATETIME2(7) NOT NULL,
    Price DECIMAL(18,4) NOT NULL,
    Quantity INT NOT NULL
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);
 
-- 本地编译存储过程
CREATE PROCEDURE dbo.ProcessTrade
    @Symbol NVARCHAR(10),
    @Price DECIMAL(18,4),
    @Quantity INT
WITH NATIVE_COMPILATION, SCHEMABINDING
AS
BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english')
    INSERT INTO HighFrequencyTrades (Symbol, TradeTime, Price, Quantity)
    VALUES (@Symbol, SYSDATETIME(), @Price, @Quantity);
END;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值