MSSQL必备:关键语句与命令详解

需积分: 50 5 下载量 82 浏览量 更新于2024-09-14 收藏 18KB TXT 举报
"MSSQL语句与常用命令" 在数据库管理中,Microsoft SQL Server(MSSQL)是一个广泛使用的数据库管理系统,它提供了丰富的SQL语句和命令来执行各种操作。以下是一些经典MSSQL语句和常用命令的详细说明: 1. 数据库操作: - CREATE DATABASE:用于创建新的数据库,例如 `CREATE DATABASE db1` 创建名为`db1`的数据库。 - DROP DATABASE:用于删除数据库,如 `DROP DATABASE db1` 删除名为`db1`的数据库。 2. 表操作: - CREATE TABLE:创建新表,例如 `CREATE TABLE tb1 (Id int NOT NULL PRIMARY KEY, name varchar)` 创建一个名为`tb1`的表,包含`Id`和`name`两个字段,`Id`为主键且不允许为空。 - ALTER TABLE:修改已存在的表结构,可以添加、删除或修改列。例如 `ALTER TABLE tabname ADD column_name column_type` 添加新列,`ALTER TABLE tabname DROP COLUMN column_name` 删除列。 - PRIMARY KEY 和 UNIQUE:定义主键约束,如 `ALTER TABLE tabname ADD PRIMARY KEY (ID)`,或创建唯一索引 `CREATE UNIQUE INDEX idxname ON tabname (column)`。 3. 数据操作语言(DML): - SELECT:查询数据,如 `SELECT * FROM table1 WHERE Id = 1` 获取`Id`为1的行。 - INSERT INTO:插入数据,例如 `INSERT INTO table1 (field1, field2) VALUES (value1, value2)` 向`table1`中插入一行数据。 - UPDATE:更新数据,如 `UPDATE table1 SET field1 = 'new_value'` 更新`table1`中所有行的`field1`为`new_value`。 - DELETE FROM:删除数据,例如 `DELETE FROM table1 WHERE condition` 根据条件删除满足条件的行。 4. 权限控制语言(DCL): - GRANT 和 REVOKE:授权和撤销权限,例如 `GRANT SELECT ON table1 TO user1` 给`user1`授予`table1`的查询权限,`REVOKE SELECT ON table1 FROM user1` 撤销该权限。 - COMMIT 和 ROLLBACK:提交事务和回滚事务,`COMMIT`保存更改,`ROLLBACK`取消未提交的更改。 5. 备份与恢复: - BACKUP DATABASE 和 RESTORE DATABASE:备份和恢复数据库,如 `BACKUP DATABASE pubs TO DISK='testBack'` 备份数据库`pubs`到磁盘上的`testBack`设备。 6. 索引操作: - CREATE INDEX 和 DROP INDEX:创建和删除索引,例如 `CREATE INDEX idxname ON tabname (column)` 创建索引,`DROP INDEX idxname` 删除索引。 7. 视图操作: - CREATE VIEW 和 DROP VIEW:创建和删除视图,如 `CREATE VIEW viewname AS SELECT statement` 创建视图,`DROP VIEW viewname` 删除视图。 8. 其他命令: - DECLARE:声明变量,例如 `DECLARE @var1 INT` 声明一个整型变量`@var1`。 - EXEC:执行存储过程,如 `EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'` 执行添加备份设备的存储过程。 以上是MSSQL中的一些基础操作,它们构成了数据库管理和开发的基本工具箱。掌握这些语句和命令,能帮助用户高效地进行数据存储、检索、更新和安全控制。在实际应用中,通常需要根据具体需求进行组合和扩展,以实现更复杂的数据库操作和业务逻辑。
2012-02-23 上传
sql最全的常用命令语句 询某个数据库的连接数 select count(*) from Master.dbo.SysProcesses where dbid=db_id() --前10名其他等待类型 SELECT TOP 10 * from sys.dm_os_wait_stats ORDER BY wait_time_ms DESC SELECT *FROM sys.dm_os_wait_stats WHERE wait_type like 'PAGELATCH%' OR wait_type like 'LAZYWRITER_SLEEP%' --CPU的压力 SELECT scheduler_id, current_tasks_count, runnable_tasks_count FROM sys.dm_os_schedulers WHERE scheduler_id 500 begin select text,CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle) from master.sys.sysprocesses a end select text,a.* from master.sys.sysprocesses a CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle) where a.spid = '51' dbcc inputbuffer(53) with tb as ( select blocking_session_id, session_id,db_name(database_id) as dbname,text from master.sys.dm_exec_requests a CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle) ), tb1 as ( select a.*,login_time,program_name,client_interface_name,login_name,cpu_time,memory_usage*8 as 'memory_usage(KB)', total_scheduled_time,reads,writes,logical_reads from tb a inner join master.sys.dm_exec_sessions b on a.session_id=b.session_id ) select a.*,connect_time,client_tcp_port,client_net_address from tb1 a inner join master.sys.dm_exec_connections b on a.session_id=b.session_id --当前进程数 select * from master.dbo.sysprocesses order by cpu desc --查看当前活动的进程数 sp_who active --查询是否由于连接没有释放引起CPU过高 select * from master.dbo.sysprocesses where spid> 50 and waittype = 0x0000 and waittime = 0 and status = 'sleeping ' and last_batch < dateadd(minute, -10, getdate()) and login_time 50 and waittype = 0x0000 and waittime = 0 and status = 'sleeping ' and last_batch < dateadd(minute, -60, getdate()) and login_time 1 ORDER BY qs.plan_generation_num SELECT top 50 qt.text AS SQL_text ,SUM(qs.total_worker_time) AS total_cpu_time, SUM(qs.execution_count) AS total_execution_count, SUM(qs.total_worker_time)/SUM(qs.execution_count) AS avg_cpu_time, COUNT(*) AS number_of_statements FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt GROUP BY qt.text ORDER BY total_cpu_time DESC --统计总的CPU时间 --ORDER BY avg_cpu_time DESC --统计平均单次查询CPU时间 -- 计算可运行状态下的工作进程数量 SELECT COUNT(*) as workers_waiting_for_cpu,s.scheduler_id FROM sys.dm_os_workers AS o INNER JOIN sys.dm_os_schedulers AS s ON o.scheduler_address=s.scheduler_address AND s.scheduler_id<255 WHERE o.state='RUNNABLE' GROUP BY s.scheduler_id