sqlserver 命令一览表

  • Post author:
  • Post category:其他


sqlserver 命令一览表

1.创建数据库:

create database Student

on

(

name=Student_Data,

filename=’f:\data\student_Data.mdf’,

size=10,

maxsize=20,

filegrowth=5

)

log on

(

name=Student_Log,

filename=’f:\data\student_Log.ldf’,

size=10,

maxsize=20,

filegrowth=5

)

2.修改数据库:

1>添加数据文件:

alter database student

add file

(

name=Student_Data2,

filename=’f:\data\student_Data2.ndf’,

size=10,

maxsize=20,

filegrowth=5

)

2>修改数据文件:

alter database student

modify file

(

name=Student_Data,

size=15

)

3.删除数据库:

drop database student

4.设置数据库选项:

sp_dboption student,’single user’,true

5.修改数据库名:

sp_renamedb ‘student’,’students’

6.查看服务器上的数据库:

sp_databases

7.查看数据库上的文件:

sp_helpdb

sp_helpdb students

8.压缩数据库:

sp_dboption student,’single user’,true

go

DBCC shrinkdatabase(students,50)

9.断开与连接数据库:

1>断开: sp_detach_db ‘students’

2>连接: sp_attach_db ‘students’,’f:\students_data.mdf’

10.备份和恢复数据库

1>备份: backup database students to disk=’h:\students_back’

2>恢复: restore database students from disk=’h:\students_back’

二.表

1.创建表:(先建主键表,再建外键表)

create table xsxxb

(

xh char(10) primary key,

xm char(8),

xb char(2),

csrq datetime,

dh char(20)

)

go

create table kmxxb

(

kmbh char(10),

kmmc char(20),

primary key(kmbh)

)

go

create table xscjb

(

xh char(10),

kmbh char(10),

fs int,

foreign key(xh)references xsxxb,

foreign key(kmbh)references kmxxb

)

2.修改表:

1>增加字段

alter table xsxxb

add bz char(50) null

2>删除字段

alter table xsxxb

drop column bz

3.删除表:(先删外键表,再删主键表)

drop table xscjb

drop table xsxxb

drop table kmxxb

4.复制一个表:

select * into xsxxb2 from xsxxb

5.创建临时表 #,##)

create table #xsxxb

(

xh char(10) primary key,

xm char(8),

xb char(2),

csrq datetime,

dh char(20)

)

select * from #xsxxb

6.创建用户定义数据类型:

use students

go

sp_addtype sts,’varchar(20)’,’not null’,’dbo’

sp_addtype sts,datatime,’null’,’dbo’

7.删除用户定义数据类型:

sp_droptype sts

三.操作表中的数据

1>使用 INSERT 语句向表中插入数据:

insert into xsxxb values(‘008’,”,”,”)

2>使用 UPDATE 语句修改表中的数据:

update xsxxb set xm=’不’ where xh=’001′

3>使用 DELETE 语句删除表中的数据:

delete from xsxxb where xh=’001′

delete from xsxxb where xh in(‘002′,’004’)

delete from xsxxb

四.系统内置函数的使用

1.聚合函数:

1>AVG(表达式)   返回表达式中所有值的平均值。仅用于数字列并自动忽略 null 值。

2>COUNT(表达式) 返回表达式中非 null 值的数量。可用于数字和字符列。

3>COUNT(*)     返回表中的行数(包括有 null 值的行)。

4>MAX(表达式)   返回表达式中的最大值,忽略 null 值。可用于数字、字符和日期时间列。

5>MIN(表达式)   返回表达式中最小值,忽略 null 值。可用于数字、字符和日期时间列。

6>SUM(表达式)   返回表达式中所有值的总和,忽略 null 值。仅用于数字列。

2.转型函数:

CONVERT(datatype[(length)], expression [,style])

select convert(char(20),getdate(),101)

3.日期函数:

1>GETDATE()     当前的系统日期。

2>DATEADD(datepart, number, date) 返回带有指定数字 (number) 的日期 (date),

该数字添加到指定的日期部分 (date part) 。

select dateadd(yy,2,getdate()) (yy,mm,dd,ww,hh,mi,ss)

3>DATEDIFF(datepart, date1, date2) 返回两个日期中指定的日期部分之间的不同.

select datediff(yy,getdate(),’2008/09/09′)

4>DATENAME(datepart, date)     返回日期中日期部分的字符串形式。

5>DATEPART(datepart, date)       返回日期中指定的日期部分的整数形式。

4.数学函数:

5.字符串函数:

rtrim()

ltrim()

ltrim(rtrim())

space(2)

substring(列名,开始位置,长度)

right(列名,长度)

left(列名,长度)

stuff(列名,开始位置,长度,字符串)

五.表的连接

1.内部连接:

select xsxxb.xh,xm,xscjb.fs from xsxxb inner join xscjb

on xsxxb.xh=xscjb.xh

2.多表连接:

select xsxxb.xh,xm,kmmc,fs from xsxxb inner join xscjb

on xsxxb.xh=xscjb.xh

join kmxxb

on xscjb.kmbh=kmxxb.kmbh

3.左外部连接:

select xsxxb.xh,xm,fs from xsxxb left outer join xscjb

on xsxxb.xh=xscjb.xh

4.右外部连接:

(与左外部连接相反)

5.完全外部连接:

select xsxxb.xh,xm,fs from xsxxb full join xscjb

on xsxxb.xh=xscjb.xh

6.交叉连接:

select xm,fs from xsxxb cross join xscjb

7.自连接:

select A.xh,A.fs,B.xh from xscjb A join xscjb B

on A.kmbh=B.kmbh

where A.xh>B.xh

8.联合运算符(union):

select xh,xm from xsxxb

union

select xh,xm from xsxxb2

六.数据汇总

1.排序: (Asc升,desc降)

select * from xscjb order by fs Asc

2.分组 group by all 包含不符合指定的where条件的组,但将它们设为null)

select xh,sum(fs) as tol from xscjb

where xh=’004′

group by all xh

3.指定分组后,组的条件(having):

select xh,sum(fs) as tol from xscjb

group by xh

having sum(fs)>80

4.compute汇总:

select xh,fs from xscjb

order by xh

compute sum(fs)

5.compute by汇总:

select xh,fs from xscjb

order by xh

compute sum(fs) by xh

compute sum(fs)

6.rollup和cube函数:

rollup() 对group by子句中的列按不同的等级进行分组.

select xh,sum(fs) as tol from xscjb

group by xh with rollup

cube() 是rollup的扩展.

七.数据的查询

1.SELECT 语句的数据检索形式

1>显示所有列和行:

SELECT * FROM authors

2>显示所有行和特定的列:

SELECT pub_name, city FROM publishers

3>显示限定范围的行:

SELECT stor_id, qty, title_id FROM sales

WHERE qty BETWEEN 20 AND 50

4>显示与值列表相匹配的行:

SELECT * FROM publishers

WHERE state IN (‘CA’, ‘TX’, ‘NY’)

5>根据未知值显示行:

SELECT price, title FROM titles

WHERE price IS NULL

6>显示/隐藏重复的值:

SELECT DISTINCT city FROM authors

7>显示根据多个搜索条件查询的结果:

SELECT title FROM titles

WHERE pub_id = 0736 AND type = ‘business’

2.SELECT 语句中使用的关键字:

BETWEEN 测试值是否在两值之间

EXISTS 测试值是否存在

IN 测试在一定范围内的值

LIKE 测试类似这个值的值

IS NULL 测试是否为 null 值

3.查询通配符的使用:

(%,_,[],^)

1> select * from xsxxb where xm like ‘张%’

2> select * from xsxxb where xm like ‘_花%’

3> select * from xsxxb where xm like ‘_[花娇]%’

4> select * from xsxxb where xm like ‘_[^花娇]%’

4.简单子查询:

1>使用返回单个值的子查询:

select xm,xb,csrq,dh from xsxxb

where xh=(select xh from xscjb where fs=70)

5.相关子查询:

1>使用返回多行单列的子查询:

select xm,xb,csrq,dh from xsxxb

where xh in(select xh from xscjb where fs>70)

2>使用exists关键字验证存在性的子查询:

select xm,xb,csrq,dh from xsxxb

where exists (select xh from xscjb where kmbh=’3′ and fs>70

and xh=xsxxb.xh )

3>使用not exists关键字验证存在性的子查询:

select xm,xb,csrq,dh from xsxxb

where not exists (select xh from xscjb where kmbh=’3′ and fs>70

and xh=xsxxb.xh )

八.流程控制语句

1>声明和使用变量:

declare @i int

set @i=3

select @i=(select fs from xscjb where xh=’001′)

2>begin…end 语句块:

begin

print’dfdfdfd’

end

3>条件语句:

if (select fs from xscjb where xh=’002′) >70

begin

print’dfdfedfd’

end

else if (select fs from xscjb where xh=’002′) <60

begin

print’888888′

end

else

begin

print’99999999′

end

4>分支语句:

select gg=case fs ‘gg是别名

when 60 then ‘df’

when 70 then ‘xdf’

when 80 then ‘yb’

when 90 then ‘xgf’

else ‘mf’

end

from xscjb

5>循环语句:

declare @i int

declare @sum int

set @i=0

set @sum=0

while @i<10

begin

set @sum=@sum+@i

set @i=@i+1

end

print @sum

6>标签:

select * from xsxxb

goto A

select * from kmxxb

A:

select * from xscjb

九.视图的使用

1.创建视图:

1>创建基于表中指定列的视图:

create view GetFs

as

select xh,fs from xscjb

2>创建基于表中指定行的视图:

create view GetFs2

as

select xh,fs from xscjb where fs=80

3>创建基于表中汇总信息的视图:

create view GetFs3

as

select xh,sum(fs) as tol from xscjb

group by xh

4>创建基于多个表的视图:

create view GetFs4

as

select xsxxb.xh,xm,kmxxb.kmmc,xscjb.fs from xsxxb,kmxxb,xscjb

where xsxxb.xh=xscjb.xh and xscjb.kmbh=kmxxb.kmbh

5>创建基于视图的视图:

create view GetFs5

as

select * from GetFs4

where fs>75

2.更改视图:

(把create换为alter)

3.删除视图:

1>删除视图中的数据:

delete GetFs2

2>删除视图:

drop view GetFs2

4.通过视图修改数据:

create view GetFs6

as

select xh,xm from xsxxb

1>插入数据:

insert into GetFs6 values(‘005′,’黄三’)

2>更新数据:

update GetFs6 set xh=’006′ where xh=’005′

3>删除数据

delete GetFs6 where xh=’006′

十.存储过程与触发器

1.创建存储过程与执行存储过程:

1>创建一个不带参数的存储过程:

create proc Display_orders

as

select * from orders

2>创建一个带输入参数的存储过程:

create proc Display_orders

@cusid char(20)

as

select * from orders where customerid=@cusid

3>创建一个带输入,输出参数的存储过程:

create proc Display_Name

@Name char(20) output

as

select @Name=(select xm from xsxxb,kmxxb,xscjb where xsxxb.xh=xscjb.xh and

fs=(select max(fs) from xscjb where kmbh=(select kmbh from kmxxb

where kmmc=@Name))

and kmxxb.kmbh=(select kmbh from kmxxb where kmmc=@Name))

from xsxxb,kmxxb,xscjb

print @Name

2.更改存储过程:

(把create换为alter)

3.删除存储过程:

drop proc Display_Name

4.创建触发器:

1>创建INSERT 触发器:

create trigger checkFs

on xscjb

for insert

as

if(select fs from inserted)<50

begin

print’bu neng cha!’

rollback tran

end

2>创建UPDATE 触发器:

create trigger NoUPdateXm

on xsxxb

for update

as

if update(xm)

begin

print’bu neng geng xing xm!’

rollback tran

end

3>创建DELETE 触发器:

create trigger NoDelete002

on xsxxb

for delete

as

if (select xh from deleted)=’002′

begin

print’bu neng shang chu xh wei 002!’

rollback tran

end

5.更改触发器:

(把create换为alter)

6.删除触发器:

drop trigger NoDelete002

7.禁用和启用触发器:

1> 禁用:

alter table xsxxb

disable trigger NoDelete002

2> 启用:

alter table xsxxb

enable trigger NoDelete002

十一.用户自定义函数

1.创建用户自定义函数:

1>创建数量型用户自定义函数:(返回一个简单的数值,如:int,char等)

create function NumAdd

(@num1 int,@num2 int)

returns int

as

begin

return(@num1+@num2)

end

调用:select dbo.NumAdd(4.6)

2>创建表值型用户自定义函数:(返回一个Table型数据)

use northwind

go

create function DisplayXsxx

(@xh char(20))

returns table

as

return(select * from xsxxb where xh=@xh)

调用:select * from DisplayXsxx(‘002’)

2.更改用户自定义函数:

(把create换为alter)

3.删除用户自定义函数:

drop function DisplayXsxx

十二.游标

1.创建游标:

declare Fs_level cursor

static

for select xm,sum(fs) from xsxxb,xscjb where xsxxb.xh=xscjb.xh group by xm

declare

@fs int,

@Name varchar(20)

2.打开游标:

open Fs_level

3.提取游标:

fetch next from Fs_level into @Name,@fs

while(@@Fetch_status=0)

begin

if @fs<150

print’总分太低!’

else

print’高分!’

fetch next from Fs_level into @Name,@fs

end

4.关闭游标:

close Fs_level

5.销毁游标:

deallocate Fs_level

十三.数据完整性

1.缺省

1>创建缺省:

create default dd

as ‘MN’

2>绑定缺省:

sp_bindefault dd,’xsxxb.xh’

3>取消缺省:

sp_unbindefault ‘xsxxb.xh’

4>删除缺省:

drop default dd

2.规则

1>创建规则:

create rule rr

as @scode in(‘MN’,’ND’,’SD’)

2>绑定规则:

sp_binderule rr, ‘xsxxb.xh’

3>取消规则:

sp_unbindrule ‘xsxxb.xh’

4>删除规则:

drop rule rr

3.约束

1>主键约束:

primary key

2>外键约束:

foreign key(列名) references 表名

3>唯一约束:

unique

4>检查约束:

check(xb=’男’ or xb=’女’)

十四.数据库的安全性

1.帐户

1>创建一个帐户:

sp_addlogin ‘zj’,’0822′,’pubs’

2>查询帐户的相关信息:

select convert(varbinary(32),password) from syslogins where name=’zj’

3>更改,删除帐户:

sp_password ‘0822’,’888′,’zj’

2.数据库用户

1>添加数据库用户

use northwind

go

sp_grantdbaccess zj

2>删除数据库用户

use northwind

go

sp_revokedbaccess [zj]

3.角色

1>浏览服务器角色的内容:

sp_helpsrvrole

2>角色分配给帐户:

sp_addsrvrolemember zj,’sysadmin’

4.权限

1>授予权限:

use northwind

go

grant insert,update on xsxxb to zj

2>撤消权限:

revoke create table,create view from zj

3>拒绝访问:

use northwind

go

deny select,insert,update ,delete on xsxxb to zj

十五.事务与锁

1.事务

1>一个标准事务:

begin tran

select * from xsxxb

commit tran

begin tran insert xscjb

insert into xscjb values(‘002′,’2’,70)

commit tran

2>返回几个事务在运行:

begin tran

select * from xsxxb

select * from kmxxb

select @@trancount –执行第一次时返回值为1,每执行一次事务数量就加1。

commit tran

select @@trancount –返回值为0。

3>复杂可回滚事务:

declare @i int

set @i=0

print ltrim(str(@i))

begin tran

print ltrim(str(@i))

select @i=(select count(*) from xsxxb)

if @i>4

begin

rollback tran

return   –停止过程中当前批的执行,并在下一批的开始处恢复执行。

end

else

print ltrim(str(@i))

select * from xsxxb

select @@trancount

begin tran   –嵌套事务

select * from xscjb

select @@trancount

commit tran

commit tran

4>嵌套事务:

declare @i int

set @i=0

print ltrim(str(@i))

begin tran

print ltrim(str(@i))

select @i=(select count(*) from xsxxb)

if @i>4 –改为3试一试

begin

rollback tran

return   –停止过程中当前批的执行,并在下一批的开始处恢复执行。

end

else

print ltrim(str(@i))

select * from xsxxb

select @@trancount

begin tran   –嵌套事务

select * from xscjb

select @@trancount

commit tran

commit tran

5>与表相联系的事务:

declare @i int

set @i=0

begin tran

update xscjb set fs=85 where fs=70

set @i=2

if @i>1 –改为3试一试

begin

rollback tran

return

end

else

commit tran

go

select * from xscjb

6>设置保存点:

declare @i int

set @i=0

begin tran

update xscjb set fs=120 where fs=90

save tran s1

set @i=2

if @i>1

begin

rollback tran s1

return

end

else

commit tran

go

select * from xscjb

7>含子查询的事务:

begin tran

declare @fs int

update xscjb set fs=95 where fs=90

select @fs=(select max(fs) from xscjb)

if @fs<100 –改为90试一试

begin

rollback tran

return

end

else

commit tran

go

select * from xscjb

8>隐式事务:

[im’plisit]暗示的

set implicit_transactions on –打开

update xscjb set fs=95 where fs=90

select @@trancount

go

select * from xscjb

2.锁

事务的隔离级别:

1>读提交:

第一个窗口:

begin tran

update xscjb set fs=95 where xh=’002′

第二个窗口:

set transaction isolation level read committed

go

select * from xscjb where xh=’002′

2>读未提交:

第一个窗口:

begin tran

update xscjb set fs=80 where xh=’002′

第二个窗口:

set transaction isolation level read uncommitted

go

select * from xscjb

3>可重复读:

第一个窗口:

set transaction isolation level repeatable read

go

begin tran

select * from xscjb

update xscjb set fs=100 where xh=’002′

select * from xscjb

rollback

第二个窗口:

set transaction isolation level read committed

go

begin tran

insert into xscjb values(‘002′,’2’,120)

select * from xscjb where fs=120

rollback

4>顺序读:

第一个窗口:

set transaction isolation level serializable

go

begin tran

select * from xscjb

update xscjb set fs=100 where xh=’002′

select * from xscjb

第二个窗口:

set transaction isolation level read committed

go

begin tran

insert into xscjb values(‘002′,’2’,120)

select * from xscjb where fs=120

1. STATUS;

2. mysql> SELECT @@global.time_zone, @@session.time_zone;

+——————–+———————+

| @@global.time_zone | @@session.time_zone |

+——————–+———————+

| SYSTEM       | SYSTEM         |

+——————–+———————+

1 row in set (0.00 sec)

3.

mysql> SHOW CREATE TABLE t\G

*************************** 1. row ***************************

Table: t

Create Table: CREATE TABLE `t` (

`i` int(11) default NULL,

`j` int(11) NOT NULL, `k` int(11) default ‘-1’

) ENGINE=MyISAM DEFAULT CHARSET=latin1

4. SHOW DATABASES LIKE ‘m%’;

5.SHOW WARNINGS\G显示错误

复制创建表技巧

6. CREATE TABLE CityCopy1 SELECT * FROM City;复制表

7. CREATE TABLE CityCopy2 SELECT * FROM City where id=5;

按条件复制表:将city 表格的结构复制同时复制id=5的记录

8. CREATE TABLE CityCopy3 SELECT title FROM City where id=5;

title(是字段)指定city表中的title字段复制创建成CityCopy3表

9.重命名

(1) ALTER TABLE t1 RENAME TO t2;

(2)Rename tabae t1 to t2;

(2) RENAME TABLE t1 TO tmp, t2 TO t1, tmp TO t2; 批量命名

10.删表

(1)DROP TABLE IF EXISTS t1;或者DROP TABLE t1

(2)DROP TABLE t1, t2, t3; 批量删表

11.清空表记录

(1) DELETE FROM t;或者TRUNCATE TABLE t;

(2) DELETE FROM t WHERE id=5;指定条件删除

删除表

DELETE FROM table_name;

TRUNCATE TABLE table_name;

12.select 另类用法

(1) mysql> SELECT 1 AS One, 4*3 ‘Four Times Three’;

+—–+——————+

| One | Four Times Three |

+—–+——————+

| 1 |         12 |

+—–+——————+

(2)SELECT last_name, first_name FROM t ORDER BY 1, 2;

排序ORDER BY 1, 2升序;2,1降序

(3) mysql> SELECT description, IF(‘abc’ LIKE pattern,’YES’,’NO’) FROM patlist;

在对pattern字段中别条件

+——————————–+———————————–+

| description             | IF(‘abc’ LIKE pattern,’YES’,’NO’) |

+——————————–+———————————–+

| empty string           | NO                     |

| non-empty string         | YES                   |

| string of exactly 3 characters | YES                   |

+——————————–+———————————–+

(4) SELECT ABS(-14.7), ABS(14.7);

(5) select * from tablename order by data desc limit 0,20返回20条数据(同微软数据库中select top 20 * from tablename 一样)

select * from tablename limit 0,20

说明:limit 0,20 (0是从表的第一行开始,是可以指定的,20是查询返回20条记录)

13.数据库加密

SELECT MD5(‘a’);

mysql> SELECT MD5(‘a’);

+———————————-+

| MD5(‘a’)               |

+———————————-+

| 0cc175b9c0f1b6a831c399e269772661 |

+———————————-+

14.随机数

SELECT RAND();

15. INSERT插入值的技术

(1) INSERT INTO people (name,age)VALUES(‘William’,25),(‘Bart’,15),(‘Mary’,12);多重插入

(2)INSERT INTO people VALUES(25,’William’);不用中间的字段名字

(3) INSERT INTO t (i) VALUES(1),(2),(3),(4),(5);

16.数据替换

(1) REPLACE INTO people (id,name,age) VALUES(12,’William’,25);

(2) 多重替换

REPLACE INTO people (id,name,age)VALUES(12,’William’,25),(13,’Bart’,15),(14,’Mary’,12);

(3)