MSSQL数据库命令是管理和操作Microsoft SQL Server数据库的核心工具,涵盖了数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)等多个方面,以下将从基础命令到高级操作,结合具体场景和表格示例,详细解析常用MSSQL数据库命令的使用方法。

在数据定义语言(DDL)中,CREATE
、ALTER
和DROP
是构建和管理数据库对象的基石,创建数据库使用CREATE DATABASE
命令,其基本语法为CREATE DATABASE database_name [ON [PRIMARY] ([NAME = logical_file_name, FILENAME = 'os_file_name', SIZE = size, MAXSIZE = max_size, FILEGROWTH = growth_increment] [...n]) [LOG ON ([NAME = logical_file_name, FILENAME = 'os_file_name', SIZE = size, MAXSIZE = max_size, FILEGROWTH = growth_increment] [...n])]]
,通过指定主数据文件和日志文件的路径、初始大小、最大增长量等参数,可以灵活配置数据库存储结构,若需修改数据库属性,如调整文件大小或添加新文件,可使用ALTER DATABASE
命令,例如ALTER DATABASE mydb ADD FILE (NAME = mydb_data2, FILENAME = 'D:\SQLData\mydb_data2.ndf', SIZE = 5MB)
,删除数据库则通过DROP DATABASE database_name
实现,但需注意此操作不可逆,且会删除所有数据及关联对象。
表对象的操作是数据库管理的核心,创建表时,需定义列名、数据类型、约束条件等。CREATE TABLE Employees (EmployeeID INT PRIMARY KEY, Name NVARCHAR(50) NOT NULL, Age INT CHECK (Age >= 18), HireDate DATE DEFAULT (GETDATE()))
,此命令创建了包含主键约束、非空约束、检查约束和默认值约束的表,若需修改表结构,如添加列、修改列类型或删除约束,可使用ALTER TABLE
命令,例如ALTER TABLE Employees ADD Department NVARCHAR(50)
或ALTER TABLE ALTER COLUMN Age INT NOT NULL
,删除表则通过DROP TABLE table_name
,若需级联删除相关对象,可使用DROP TABLE table_name CASCADE CONSTRAINTS
(MSSQL中需通过外键约束的ON DELETE CASCADE
实现级联删除)。
数据操纵语言(DML)是日常数据操作最频繁使用的命令。INSERT
用于向表中添加数据,基本语法为INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...)
,支持批量插入,如INSERT INTO Employees (EmployeeID, Name, Age) VALUES (1, '张三', 25), (2, '李四', 30)
。UPDATE
用于修改已有数据,需配合WHERE
子句限定范围,例如UPDATE Employees SET Age = 26 WHERE EmployeeID = 1
,若省略WHERE
则会更新全表数据,需谨慎操作。DELETE
用于删除数据,语法为DELETE FROM table_name WHERE condition
,同样需注意WHERE
子句的重要性,避免误删全表数据。SELECT
是查询数据的核心命令,支持复杂查询,如多表连接、聚合函数、分组排序等,例如SELECT Department, AVG(Age) AS AverageAge FROM Employees GROUP BY Department HAVING AVG(Age) > 28
。
数据查询的高级功能包括JOIN
、CASE
表达式、窗口函数等。JOIN
用于关联多表数据,例如内连接SELECT e.Name, d.DepartmentName FROM Employees e JOIN Departments d ON e.DepartmentID = d.DepartmentID
,或左连接SELECT e.Name, d.DepartmentName FROM Employees e LEFT JOIN Departments d ON e.DepartmentID = d.DepartmentID
。CASE
表达式可实现条件逻辑,如SELECT Name, CASE WHEN Age > 30 THEN '资深员工' ELSE '普通员工' END AS Level FROM Employees
,窗口函数(如ROW_NUMBER()
、RANK()
)可在不分组的情况下进行排名计算,例如SELECT EmployeeID, Name, Age, ROW_NUMBER() OVER (ORDER BY Age DESC) AS AgeRank FROM Employees
。

事务控制确保数据的一致性和完整性。BEGIN TRANSACTION
标记事务开始,COMMIT TRANSACTION
提交事务,ROLLBACK TRANSACTION
回滚事务。BEGIN TRANSACTION; UPDATE Accounts SET Balance = Balance - 100 WHERE AccountID = 1; UPDATE Accounts SET Balance = Balance + 100 WHERE AccountID = 2; COMMIT TRANSACTION;
,若任一操作失败,可执行ROLLBACK TRANSACTION
撤销所有更改。SAVE TRANSACTION
可设置保存点,实现部分回滚,如SAVE TRANSACTION mypoint; ... ROLLBACK TRANSACTION mypoint
。
索引优化是提升查询性能的关键,创建索引使用CREATE INDEX
命令,例如CREATE INDEX idx_employees_name ON Employees(Name)
,可为常用查询字段建立索引,聚集索引(CLUSTERED
)决定数据物理存储顺序,每表仅可有一个;非聚集索引(NONCLUSTERED
)则创建指向数据行的指针,查看索引信息可通过sp_helpindex 'table_name'
,删除索引使用DROP INDEX index_name ON table_name
。
权限管理通过GRANT
和REVOKE
控制用户访问,授予用户查询权限:GRANT SELECT ON Employees TO user_name
;撤销权限:REVOKE INSERT ON Employees FROM user_name
,若需赋予用户创建表权限,可使用GRANT CREATE TABLE TO user_name
。
常见MSSQL命令操作示例

操作类型 | 命令示例 | 说明 |
---|---|---|
创建数据库 | CREATE DATABASE TestDB ON PRIMARY (NAME='TestDB', FILENAME='D:\TestDB.mdf', SIZE=10MB) |
创建名为TestDB的数据库,主数据文件初始大小10MB |
创建表 | CREATE TABLE Products (ID INT PRIMARY KEY, Name NVARCHAR(100) NOT NULL) |
创建Products表,ID为主键,Name非空 |
插入数据 | INSERT INTO Products VALUES (1, 'Laptop') |
向Products表插入一条数据 |
更新数据 | UPDATE Products SET Name='Desktop' WHERE ID=1 |
修改ID为1的产品的名称为Desktop |
查询数据 | SELECT * FROM Products WHERE ID > 5 |
查询ID大于5的所有产品信息 |
删除数据 | DELETE FROM Products WHERE ID=1 |
删除ID为1的产品记录 |
创建索引 | CREATE INDEX idx_products_name ON Products(Name) |
在Products表的Name列上创建非聚集索引 |
开始事务 | BEGIN TRANSACTION |
标记事务开始 |
提交事务 | COMMIT TRANSACTION |
提交事务,永久保存更改 |
回滚事务 | ROLLBACK TRANSACTION |
回滚事务,撤销未提交的更改 |
相关问答FAQs
Q1: 如何在MSSQL中修改已创建表的数据类型?
A: 使用ALTER TABLE
命令的ALTER COLUMN
子句,若要将表Employees
的Age
列从INT
修改为BIGINT
,可执行:ALTER TABLE Employees ALTER COLUMN Age BIGINT
,需注意,修改列类型需满足数据兼容性(如从低精度类型改为高精度类型),且表不能被其他会话锁定。
Q2: MSSQL中如何查询某个表的索引信息?
A: 可通过系统存储过程sp_helpindex
查看表的索引详情,执行sp_helpindex 'Employees'
将返回Employees
表的所有索引名称、类型(聚集/非聚集)、包含的列等信息,便于分析索引使用情况并进行优化。