sqlserver 命令一览表

时间:2022-06-14 20:02:37

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)