参考资料:https://www.it610.com/article/1291207212026372096.html
=====================================================================================================
一、变量
①变量定义
@@开头:全局变量(系统定义,不可修改)
@开头:局部变量(用户定义,生命周期在批处理范围内)
②变量赋值
declare定义,set和select赋值(set用于赋值与表数据无关的场景,否则使用select)
③变量输出
print或select
=====================================================================================================
二、运算符
和其他MySQL大同小异
=====================================================================================================
三、逻辑运算符
all(所有)、and(与)、any(任意一个)、
between(两者之间)、exists(存在)、in(在范围内)、
like(匹配)、not(非)、or(或)、some(任意一个)
一元运算符+(正)、-(负)、~(取反)
=====================================================================================================
四、SQL语法
①不同点
top 1 字段 :取第一条
as 用户名 :中文别名可以不加引号
‘a’+’b’ :字符串拼接
获取上月月份↓
select CONVERT(NVARCHAR(6), DATEADD(MONTH, -1,LTRIM(202105)+ ‘01’), 112) –> 202104
可通过设置字符串长度实现裁剪 ↓
select CONVERT(VARCHAR(19),GETDATE(),112) –> 20210605
select CONVERT(VARCHAR(10),GETDATE(),126) –> 2021-06-08
select CONVERT(VARCHAR(19),GETDATE(),120) –> 2021-06-08 14:21:33
select CONVERT(VARCHAR(19),GETDATE(),126) –> 2021-06-08T14:23:40
select CONVERT(VARCHAR(25),GETDATE(),126) –> 2021-06-08T14:25:52.620
select CONVERT(VARCHAR(25),GETDATE(),121) –> 2021-06-08 14:24:56.353
②临时表
select 字段 INTO #tmp2 [IN externaldatabase]:创建表的备份复件[或插入新表]
#tmp2 本地临时表,只对当前用户连接可见
##tmp2 全局临时表,对任何用户可见
③存储过程
exec 过程名 :执行存储过程
④创建索引
CREATE INDEX idx_temp ON #t_family_base_level_transform(family_id,f_id);
⑤索引分类
(1) 唯一索引(UNIQUE):不允许两行具有相同的索引值(创建了唯一约束,系统将自动创建唯一索引)
在表上创建唯一索引。唯一索引是不允许其中任意两行具有相同索引值的索引。
SQL Server 2005 Compact Edition (SQL Server Compact Edition) 在创建索引后将检查是否存在重复的值(如果数据已存在),并在每次使用 INSERT 或 UPDATE 语句添加数据时执行该检查操作。必须先消除重复值,然后才可对列创建唯一索引。如果存在重复的键值,则将取消 CREATE INDEX 语句并返回错误。只能对定义为 NOT NULL 的列创建唯一索引。
如果存在唯一索引,则可能生成重复键值的 UPDATE 或 INSERT 语句将回滚,且 SQL Server Compact Edition 返回错误。即使 UPDATE 或 INSERT 语句更改许多行,但只要存在一个重复,上面这一点也将成立。
(2) 主键索引:主键索引要求主键中的每个值是唯一的,(创建主键自动创建主键索引)
(3) 聚集索引(CLUSTERED):表中各行的物理顺序与键值的逻辑(索引)顺序相同,表中只能包含一个聚集索引,主键列默认为聚集索引
(4) 非聚集索引(NONCLUSTERED):表中各行的物理顺序与键值的逻辑(索引)顺序不匹配,表中可以有249个非聚集索引
3.创建索引的标准:用语频繁搜索的列;用语对数据进行排序的列
注意:如果表中仅有几行,或列中只包含几个不同的值,不推荐创建索引,因为SQL Server 在小型表中用索引搜索数据所花的时间比逐行搜索更长。
————————————————
版权声明:本文为CSDN博主「乐在‘奇’中」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42689281/article/details/86974809
=====================================================================================================
五、触发器
①触发器的定义
触发器(Trigger)是针对某个表或视图所编写的特殊存储过程,它不能被显式地调用,
而是当该表或视图中的数据发生添加INSERT、更新UPDATE或删除DELETE等事件时自动被执行。
②触发器的作用
主要作用是实现由主键和强制数据库间的引用完整性;
级联修改数据库中所有相关的表,自动触发其它与之相关的操作;
跟踪变化,撤销或回滚违法操作,防止非法修改数据;
返回自定义的错误消息,约束无法返回信息,而触发器可以;
触发器可以调用更多的存储过程;外键所不能保证的复杂的参照完整性和数据一致性
=====================================================================================================
六、优化
①WITH (NOLOCK):
作用: 改善大量查询的环境中数据集被lock的现象,以改善查询性能(相当于读未提交的隔离级别)。
缺陷: 可能会造成脏读(修改后又撤销,两次读结果不同)
可能会造成不可重复读(读之后又被修改,两次读结果不同)
可能会造成幻读(根据条件查一批数据,第一次查询后被修改了,造成两次数据条目不一致)
nolock和with(nolock)的几个小区别:
1、SQL05中的同义词,只支持with(nolock);
2、with(nolock)的写法非常容易再指定索引。
3、跨服务器查询语句时不能用with (nolock) 只能用nolock,同一个服务器查询时 则with(nolock)和nolock都可以用
②SET NOCOUNT ON
作用:不向客户端返回受影响的行数,减少了网络流量,可以显著提高性能。