SQLserver笔记(进阶)
sql创建目录脚本
使用exec关键字执行存储过程
启动外围的命令提示符程序
exec xp_cmdshell 'cmd命令'
执行前需要开启sql server对cmdshell的访问
0:关闭 1:开启 默认关闭
exec sp_configure 'xp_cmdshell',0,reconfigure
重新配置
创建磁盘目录
exec xp_create_subdir N'路径';
添加约束语法
alter:修改 add:添加 constraint:约束
alter table 表名 add constraint 约束名 约束类型 约束内容
约束名的添加规则
check约束(CK_表名 _字段名)
主键约束(PK_表名 _字段名)
默认约束(DF_表名 _字段名)
唯一约束(UQ_表名 _字段名)
外键约束(FK_表名 _字段名)
查看约束名
select * from sys.sysobjects
查看所有表
select * from sys.sysdatabases 表
修改字段名
exec sp_rename '[表名].[列名]','[新列名]'
删除约束
alter table 表名
drop constraint 约束名
添加字段
alter table 表名
add 字段名称 字段类型...
删除字段(column:列)
alter table 表名
drop column 字段名
修改字段
alter table 表名
alter column 字段名-
批处理
sql批处理是将一个或多个T-SQL语句的集合,由客户端一次性发送到SQLserver实例,它表示用户提交给 数据库的引擎的工作单元
同时服务器将批处理语句变异成一个可执行单元,此单元成为执行计划。
GO是批处理的结束标识
convert(目标类型,转换对象)·
T-SQL编程
输出语句
局部变量:
标记@作为前缀
先声明,在赋值
赋值用set或select
声明局部变量
declare @变量名 数据类型
赋值
set @变量名 = 值
select @变量名 = 值
例如:
set @name='张三'
select @name=userName from userInfo where UserId=1
全部变量:
以@@作为前缀
set:不支持多个变量赋值、表达式返回多个值时,出错、表达式未返回值时,则赋值null
select:支持多个变量赋值、多个值时将最后一个赋值给变量、未返回值时,保持原样
if...else...
if(条件)
begin
语句1
语句2
end
else
begin
语句1
语句2
end
分号可有可无
逻辑循环控制语句
语法:
while(条件)
begin
语句1
语句2
...
break
end
break表示退出循环
如果有多条语句,才需要begin-end语句块
分号可有可无
--计算两个时间的时间差datediff(得到的时间单位(year/month/day),‘时间’,时间)
case-end多分支语句
case具有两种格式:
简单case格式:
case 测试表达式
when 表达式1 then 结果1
when 表达式2 then 结果2
...
[else 其他结果]
end
搜索case格式:
case
when 布尔表达式1 then 结果1
when 布尔表达式2 then 结果2
...
[else 其他结果]
end
存储过程
用户自定义存储过程
create proc[edure] 存储过程名
@参数1, 数据类型 【=默认值 output】,
@参数2 数据类型 【=默认值 ouput】,
...2 as
SQL语句
go
带参数的储存过程
储存过程的参数分两种: 输入参数
输出参数
输入参数:
用于向储存过程传入值
输出参数:
用于在调用储存过程后
返回结果
按引用传递
事务
事务必须具备四个属性:原子性、一致性、隔离性、永久性
原子性:事务是一个完整的操作。事务的各步操作是不可分的,要么的简欧执行,要么都不执行
一致性:当事务完成时,数据必须处于一直状态
隔离性:对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方法依赖于或影响其他事务
永久性:事务完成后,它对数据库的修改被永久保持,事务日志能保持事务的永久性
T-SQL语句管理事务
开始事务;begin transaction
提交事务:commit transaction
回滚(撤销)事务:rollback transaction
一旦事务提交或回滚,则事务结束
视图
通过物理表(多个)查询出来的一张虚拟表
创建视图
create view 视图名
as
<select语句>
[go]
索引
SQLserver中的数据也是俺页存放
索引:是SQLserver编排数据的内部方法。它为SQLserver提供一种方法来编排查询数据 inde
索引页:数据库中储存索引的数据页;索引页类似汉语字典中的目录页
索引的作用:通过使用索引,可以大大提高数据库的检索速度,改善数据性能
索引类型
在SQLserver中,索引按类型可分为主键索引、聚集索引、非聚集索引和唯一索引。
主键索引:在数据表中为表定义一个主键就自动创建主键索引 主键索引是唯一索引的特殊类型
唯一索引:唯一索引不允许两行具有相同的所有制=值
聚集索引:表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个
非聚集索引:非聚集索引指定表的逻辑顺序。数据储存在一个位置,索引储存在另一个位置,索引中包含指向数据储存位置的指针可以有多个小于249个。
创建索引
unique:唯一
clustered:聚集
nonclustered:非聚集
fillfactor:填充因子
创建索引
create [unique] [clustered] [nonclustered]
index index_name
on table_name(column_name...)
[with fillfactor=x]
fillfactor取值在0-100,表示索引页填满的空间所占的百分比(不用写%)
通过索引查询
select * from tableName
with(index=索引)
索引的优点:
创建唯一性索引,保证数据表中每一行数据的唯一性
大大加快数据的检索速度,这也是创建索引的最主要的原因
索引的缺点:
带索引的表在数据库中需要更多的储存空间。
操纵数据的命令需要更长的处理时间,因为它们需要对索引进行更新
触发器
什么是触发器:
触发器是在对表进行插入,更新或删除操作是自动发执行的存储过程
触发器通常用于强制业务规则
触发器是一种高级约束,可以定义比用check约束更为复杂的约束;可执行复杂的SQL语句(if/while/case)、可饮用其它表中的列
特点:
自动触发执行
不能直接调用
是一个事务(可回滚)
触发器的类型
按T-SQL分
delete触发器
insert触发器
update触发器
按执行流程来分
after 默认触发器
instead of "替代"触发器
触发器的语法
create trigger trigger_name
on table_name
[with encryption]
for [delete,insert,update]
as
T-SQL语句
go
触发器触发时:
系统自动在内存中创建deleted表或inserted表
只读,不允许修改
将结果集添加到表中
1、表已存在:insert into 表名 结果集+
2、表未存在:select * into 结果集 from 表名
自定义函数
自定义函数的优点
允许模块化程序设计
执行速度更快
减少网络流量
自定义函数的分类
内置函数
通过内置函数访问系统表的数据
对某列或某行进行常规运算
标量函数
用return子句返回单个数据值
表值函数
返回table数据类型
表量函数
定义表量/值函数的语法
create functino [schema_name.] function_name(@parameter_name [as] [type_schema_name.] parameter_data_type [ = default ] [ readonly],..n)returns 数据类型(表量)/table(表值)[with] [encryption][,][schemabinding]asreturn [ ( ] select_stmt [ ) ]go
SQLserver笔记(进阶)相关推荐
- Vue学习笔记进阶篇——Render函数
本文为转载,原文:Vue学习笔记进阶篇--Render函数 基础 Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编 ...
- PHP学习笔记 - 进阶篇(7)
PHP学习笔记 - 进阶篇(7) 文件操作 读取文件内容 PHP具有丰富的文件操作函数,最简单的读取文件的函数为file_get_contents,可以将整个文件全部读取到一个字符串中. $conte ...
- Spring Boot学习笔记-进阶(3)
文章目录 Spring Boot学习笔记-进阶(3) 一.Spring Boot与缓存 二.Spring Boot与消息 三.Spring Boot与检索 四.Spring Boot与任务 异步任务 ...
- Vue学习笔记进阶篇——多元素及多组件过渡
本文为转载,原文:Vue学习笔记进阶篇--多元素及多组件过渡 多元素的过渡 对于原生标签可以使用 v-if/v-else.但是有一点需要注意: 当有相同标签名的元素切换时,需要通过 key 特性设置唯 ...
- 微信小程序开发笔记 进阶篇④——getPhoneNumber 获取用户手机号码(小程序云)
文章目录 一.前言 二.前端代码wxml 三.前端代码js 四.云函数 五.程序流程 一.前言 微信小程序开发笔记--导读 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机号码. 但是,因 ...
- 微信小程序开发笔记 进阶篇⑤——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之前)
文章目录 一.前言 二.前端代码wxml 三.前端代码js 四.后端java 五.程序流程 六.参考 一.前言 微信小程序开发笔记--导读 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机 ...
- C#笔记进阶篇03 抽象函数与抽象类
C#笔记进阶篇03 抽象函数与抽象类 --本系列是基于人民邮电出版社<C#2008 C#图解教程>.清华大学出版社<C#入门经典(第五版)>两本书的自学C#笔记,如果您发现了本 ...
- 微信小程序开发笔记 进阶篇⑥——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之后)
文章目录 一.前言 二.前端代码wxml 三.前端代码js 四.后端java 五.程序流程 六.参考 一.前言 微信小程序开发笔记--导读 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机 ...
- Apollo学习笔记 进阶课程之三:定位技术②
Apollo学习笔记 进阶课程之三:定位技术② 百度的无人驾驶定位方案 1).GNSS定位 GPS误差来源: 上图为单点定位,基于TOA 载波定位技术:(RPK技术,PPP技术) RPK:可以在五秒内 ...
- vue-resource post php,Vue学习笔记进阶篇——vue-resource安装及使用
简介 vue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应.也就是说,$.ajax能做的事情,vue-resource插件一样也能做到 ...
最新文章
- GigaScience:ASaiM基于Galaxy微生物组分析框架
- Linux下用arptables防arp攻击
- spring5.0.2中文官网文档pdf
- asa清空配置_Cisco ASA 管理配置文件
- 数组可以容纳多少水----------给你出道题
- spark-1.2.0 集群环境搭建
- layer normalization 缺点_优缺点并存的星越,用车感受还是不错的!
- python邮件群发_Python操作Gmail@定时定向群发邮件
- STM32F407 硬件IIC驱动MCP4017 数字电位器
- win7sp1怎么共享计算机,win7怎么升级到sp1?win7可以直接升级win7 sp1版本吗
- C盘扩容好帮手——傲梅分区助手
- python中类似对象吗_关于性能:什么是Python中最快的(访问)类似结构的对象?
- java constants_Java Constants类代码示例
- qq好友发聚会照片html,在QQ朋友聊天页面上点击发送图片,打开后怎么同时可以点击几张图片一次性发送,...
- C++中文件开头写的 using namespace std 有什么作用?
- java编译器:必须对其进行捕获或声明以便抛出
- 每日一犬 · 布鲁克浣熊猎犬
- 如何清空python的IDLE?
- nz-select 选择器
- Demystifying Ethernet Types— Difference between Cat5e, Cat 6, and Cat7
热门文章
- 秒懂Java类型(Type)系统
- Win 7 下eclipse添加Courier New字体
- 高德地图巡航异步加载数据_“高德地图”和“百度地图”的差别
- Linux杀死进程命令:kill、killall、pkill
- 对称加密,非对称加密,混合加密
- Windows 10注册表损坏怎么办?
- python爬微信头像_Python爬微信好友头像,性别,所在地区
- windows下cmd使用wget命令
- pycharm快捷键和无法输入英文!
- .strip().split('t')和.strip().split()