临时表:以#开头,主要是为了防止锁表。
临时表一般在会话结束时。
创建的三种方式:
1)create table #tem
2)select * into #tem from table
3)with #tem as(select * from table)
select * from #tem;
等同于这种方式
select * from (select * from Map_Data ) as #t
这是一种特殊的临时表,在查询结束后就会关闭。
死锁原理:
共享锁(S锁):共享 (S) 用于不更改或不更新数据的操作(只读操作),如 SELECT 语句。
如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。
排他锁(X锁):用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。确保不会同时同一资源进行多重更新。
如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
我们在操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突)
高并发时,同时对一个表加X 锁,transaction 等待时间过长就会导致死锁
查看死锁进程:
select
request_session_id spid,
OBJECT_NAME(resource_associated_entity_id) tableName
from
sys.dm_tran_locks
where
resource_type='OBJECT' ;
杀死死锁进程: kill 354
SQL Server常用函数:
函数名称 | 作用 |
---|---|
1、trim('内容') ltrim('内容') rtrim('内容') | 去掉字符串左边和右边的空格,和所有空格 |
| 替换 |
substring( expression, start, length ) --返回从字符串expression左边第start个字符起length个字符的部分 | 截取 还有left right |
| length |
| 大小写 |
stuff( character_expression , start , length ,character_expression ) | 返回从字符串character_expression左边第start个字符开始要删除length个字符,在start开始删除的位置插入新字符串character_expression |
charindex ( expression1 , expression2 [ , start_location ] )-- expression1 | 返回的整数是要找的字符串在被找的字符串中的位置 |
patindex ( %pattern% , expression ) | 函数返回字符或字符串在另一个字符串或表达式中的起始位置,patindex函数支持搜索字符串中使用通配符 |
isnull 、isDate | 判断空,判断是否为日期 |
统计函数AVG ( ) -返回的平均价值 count( ) -返回的行数 first( ) -返回第一个值 last( ) -返回最后一个值 max( ) -返回的最大价值 min( ) -返回最小的价值 sum( ) -返回的总和 |
下面的表格列出了 SQL Server 中最重要的内建日期函数:
函数 | 描述 |
getdate() | 返回当前日前与时间 |
datepart(type,date) | 返回日期/时间的单独部分 |
dateadd(type,number,date) | 在日期中添加或减去指定的时间间隔 |
datediff(type,date1,date2) | 返回两个日期之间的时间 |
convert( data_type [ ( length ) ] , expression [ , style ]) | 用不同的格式显示日期/时间 |
--getdate 获取当前时间
select getdate()
--dateadd 原有时间加: 2013-02-17 13:20:16 此时间加12个月
select dateadd(MONTH,12,'2013-02-17 13:20:16') --返回:2014-02-17 13:20:16.000 (参数month可以改为 day,year等日期加相应的值)
--datediff 两个时间的差 (后面-前面=返回值)
select datediff(day,'2013-02-01','2013-02-18') --返回:17 (参数day可以改为 month,year等日期加相应的值)
--datepart 获取日期的某个部分整数
select DATEPART(month, '2013-2-17') --返回 2 (参数month可以改为 day,year等日期加相应的值)
--datename 获取指定部位的字符串
select datename(weekday, '2013-2-17') --返回 星期日 (参数weekday可以改为 day,year等日期加相应的值)
--day(), month(),year() 获取指定部位的字符串
select day('2013-2-15') --返回15
Convert日期转换函数
时间格式转换使用 CONVERT:CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
data_type
目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用户定义的数据类型。
参数
length
nchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的可选参数。
expression
是任何有效的 Microsoft® SQL Server™ 表达式。
style:风格