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 @[email protected][email protected]
? ?? ???set @[email protected]+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
? ?? [email protected] char(20)
? ?? ???as
? ?? ???select * from orders where [email protected]
? ?3>创建一个带输入,输出参数的存储过程:
? ?? ???create proc Display_Name
? ?? [email protected] 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 [email protected]))
? ?? ?? ?? ?? ?? ?? ? and kmxxb.kmbh=(select kmbh from kmxxb where [email protected]))
? ?? ?? ?? ?? ?? ?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(@[email protected])
? ?? ?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 [email protected])
? ?调用: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
? [email protected] int,
? [email protected] 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)