T-SQL学习记录
- T-sql是对SQL(structure query language )的升级。可以加函数。
- 系统数据库:master管理数据库。model模版数据库,msdb备份等操作需要用到的数据库,tempdb临时数据库。
- 用户数据库:用户自己创建。实际上用户创建数据库就是想master这个数据库下面去注册一条信息。
- ctrl+alt+delete可以在windows身份认证登录时切换用户。
- 建立登录名 use master create login ** password='**'—>创建用户名 use 数据库名 create user ** for login **—>赋予权限 grant select,insert,..。revoke回收。一般都是按角色来赋予权限(数据库权限和服务器权限)
- EXEC sp_detach_db @dbname=**分离数据库 。EXEC sp_attach_db @dbname=**,@filename1=**附加数据库
- 差异备份的恢复要先在完整备份恢复的前提下才能恢复,而且恢复完整备份时要注意设置选项。
- GO代表把上面的代码一起提交服务器执行。
- 删除表:先删除子表—>再删除主表
- DECLARE @x int 申明x这个整型变量。优先级比较:<> > 算术运算符 > 比较运算符 > 逻辑运算符(not>and >or)> 连接运算符 > 赋值运算符
- 先向主表添加数据,再向子表添加数据,删除数据是先向子表删除,再删除主表。
- 插入整张表:(1)先建表,insert into 表名(列名) select 列名 from 旧表,(2)直接在插入时创建表,select 列名 into 表名 from 旧表
- delete删除可以加where ,删除后标识列不会重置。truncate删除是直接删除整个表,相当于没有where的delete,标识列会重置且占用资源会更少更快,但是不能恢复和还原。
- 导入和插入一样,如果表之间有关联,先导主表,后导子表。
- 批处理是只指将语句当作一个整体发送执行,以GO为结束标记。GO且要单独成行。在脚本中的事情有一件必选在另一件之前发生或分开发生的时候,就使用批处理。
- 字符串函数:charindex('zz','12xzzb',1)返回2:寻找一个指定的字符串在另一个字符串中的起始位置。 len():返回字符串的长度。upper():将字符串改成大写。ltrim()清除字符串左边的空格,rtrim():清除字符串右边的空格,right('ahsnb',3):snb从字符串右边返回3长度的字符,left()刚好相反。replace('天安门','天','地'):地安门:替换一个字符串中的字符。stuff('ASCX',2,1,'v'):AvCX,函数将字符串插入另一字符串。它在第一个字符串中从开始位置删除指定长度的字符;然后将第二个字符串插入第一个字符串的开始位置。
- 日期函数:getdate()获得当前时间, dateadd(mm,1,getdate())=当前月份加1.将表示日期或时间间隔的数值与日期中指定的日期部分相加后,得到新值。datediff(yy,'2015-12-1',getdate()):2015-12-1到现在过去了多少年,求两个日期之间的间隔,datename(datepart,date),返回表示指定 date 的指定 datepart 的字符串。datepart(datepert,date):返回一个表示日期的日期部分的整数。
- 数学函数和系统函数:rand(),返回0~1之间的随机float数。ceiling(par)返回大于或等于指定数值表达式的最小整数。floor()返回小于或等于指定数值表达式的最大整数。round(expection,length)返回舍入到指定长度或精度的数值表达式。length 参数的取值必须为整数。abs()取绝对值。convert(data_type[(length)],expression[,style]),将一种数据类型的表达式转换为另一种数据类型的表达式。相当于cast(expression as data_type[(length)] )
- exists子查询:子判断子查询是否有返回值,如果有就是真,则执行下面的语句,如果否则不执行
if exists(子查询) begin 多条语句 end
- ALL、ANY、SOME子查询:
ALL:父查询的列的值必须大于子查询返回结果列表中的每一个值 ANY:父查询的列的值必须至少大于子查返回结果列表中的一个值 SOME和ANY是等效的。 =ANY和IN是等效的 <>ANY父查询的列的值只要与子查询结果的一个值不相同。相当于or的意思,父查询中的值<>子查询的A或者<>子查询的B not in 相当于and的意思。父查询的<>子查询的A且<>子查询的B