`

sqlserver 命令一览表

 
阅读更多

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.创建临时表2009年4月9日 - 白云 - 白云 #,##)

       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.分组2009年4月9日 - 白云 - 白云 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)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics