SQLserver(三)

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: SQLserver

5.3使用索引


  1. 普通索引
create index index_name on tname(fie1...);
#创建普通单列索引,多个列用逗号隔开
create index index_name on emp(ename);
#性能级别:ref,查询1row
explain select * from emp where ename='scott';
#删除索引
drop index index_name on emp;


  1. 唯一索引
#创建唯一索引,唯一约束也会添加唯一索引
create unique index index_name on tname(fie);



5.4使用场景


表数据量足够大;


增删改较少的表;


高基数列。什么意思?该列的数据大多数都不一样。


5.5注意


  • 索引需要单独开辟空间进行维护,对数据进行增删改,都需要维护索引。所以索引不易添加过多;
  • 将条件列设置索引(经常作为条件的列);
  • 索引失效的状况:比如or关键字会导致索引失效。

6.关键字


6.1SQL语句

类型

含义

create table

创建一张表

insert into…values

想表中插入数据

delete from

删除表中的信息

update …set …where

在where位置更新数据

drop table

删除表

alter table …add

向表中添加某个属性

alter table…drop

将表中的某个属性删除


6.2特殊关键字

类型

含义

示例

primary

主键,后面括号中是作为主键的属性

primary  key (ID)

foregin key references

外键,括号中为外键,references后为外键的表

foregin key(stu_id) references(stu)

not null

不为空,前面为属性的定义

name varchar(10 ) not  null


6.3单关系查询

类型

含义

select

查找出的表所含有的属性

from

要操作代表

where

判断条件,根据判断条件选择信息

distinct

在select中加入distinct 得到的结果去重

all

在select中加入all得到的结果是不去重

and

在where中使用and将判断条件连接起来

or

在where中使用or表示判断条件多选一

not

在where中使用not表示判断条件取反


6.4多关系查询

类型

含义

A,B

在from后面通过逗号连接多张表,表示将这些表进行笛卡儿积运算

natural join

将natural join关键字前后的两张表进行自然连接运算

A join B using(c)

将A和B通过c属性自然连接


6.5附加运算查询

类型

含义

as

将as前的关系起一个别名,在此语句中,可以用别名来代指这个表

*

在select中通过: “表名.*” 来表示查找出这个表中所有的属性

order by

让查询结果中的信息按照给定的属性排序(默认升序,上小下大)

desc

在order by之后的属性后使用,表示采用降序排序

asc

在order by之后的属性后使用,表示采用升序排序(默认)

between

在where中使用between表示一个数在两个数值之间取值

not between

between的反义词,在两个数之外取值

union/union all

将两个SQL语句做并运算,并且自动去重,添加all表示不去重

intersect/intersect all

将两个SQL语句做交运算,并且自动去重,添加all表示不去重

except/except all

将两个SQL语句做差运算,并且自动去重,添加all表示不去重

is null

在where中使用is null表示这个值是空值

is not null

在where中使用is not null表示这个值不是空值


6.6聚集函数运算查询

类型

含义

avg

平均值

min

最小值

max

最大值

sum

总和

count

计数

distinct

表示将distinct后的属性去重

group by

将在group by上取值相同的信息分在一个组里

having

对group by产生的分组进行筛选,可以使用聚集函数


7.存储过程与触发器


7.1存储过程


7.1.1概念


存储过程是独立于数据库之外的数据库对象,是SQL service 服务器上一组预编译的Transact-SQL语句,用于完成某任务,它可以接收参数,输出参数,返回单个或多个结果、返回状态值和参数值,存储过程独立于程序源代码,可单独修改。


创建存储过程


CREATE PROCEDURE 存储过程名
  [@变量名 数据类型] 
   [ = 默认值 ]
   [WITH ENCRYPTION|RECOMPILE]  
   [FOR REPLICATION]  
as
  <sql语句>

 


  • WITH ENCRYPTION:存储过程加密,任何人都无法查看存储过程定义。WITH RECOMPILE:该过程在运行时编译
  • FOR REPLICATION:指定不能再订阅服务器上执行为复制创建的存储过程。
  • SQL语句:存储过程要执行的操作,但不能使用CREATE DEFAULT / CREATE TRIGGER / CREATE PROCEDURE / CREATE VIEW / CREATE RULE
  • []  可省略


 # 示例
 use Student  /*指定数据库,创建的存储过程会保存在数据库文件中*/  -- ues 的student是一个数据库
CREATE PROCEDURE cjjicx
  @name varchar(50)
  WITH ENCRYPTION    --加密
as
  select sno from S where sname=@name
go  /*go作为批处理结束标志*/


执行存储过程


EXEC | EXECUTE
    [@返回状态= ] [schema_name.] 存储过程名
    [@形参 = ] [value]
    WITH RECOMPILE]
# 示例
use Student
exec cjjicx @name = 'xiaoming'
go /*批量处理结束标志*/

修改存储过程


ALTER PROCEDURE 存储过程名
   [@变量名 数据类型] 
   [ = 默认值 ]
   [WITH ENCRYPTION]  
   [FOR REPLICATION]  
as
  <sql语句>


删除存储过程


DROP PROCEDURE 存储过程名


查看存储过程定义


  • 显示存储过程的参数及数据类型:sp_help 存储过程名
  • 显示存储过程源代码:sp_helptext 存储过程名
  • 显示与存储过程相关的数据库对象:sp_depends ’ 存储过程名 ’
  • 显示当前数据库中存储过程列表:sp_stored_prodedure ’ 存储过程名 ’


use Student 
sp_helptext cjjicx


重命名存储过程


SP_RENAME 原存储过程名,新存储过程名

示例


use Student
SP_RENAME cjjicx,cjjicx2 --将存储过程cjjicx更名为cjjicx2
go


7.2触发器


7.2.1概念


触发器是特殊的存储过程,它也定义了一组SQL语句,用于完成某项任务。存储过程的执行是通过过程名字直接调用,而触发器是通过事件(如insert,update)进行触发而被执行


创建触发器


CREATE TRIGGER 触发器名 ON 表名
       [WITH ENCRYPTION] -- 文本加密
       {FOR | AFTER | INSTESD OF}
          [delete][,insert][update]
as
[sql语句]


  • 触发器名不能以 # 或 ## 开头
  • 视图只能被INSTEAD OF触发器引用
  • AFTER:指定触发器只有在SQL所有操作以及所有引用级联操作和约束条件成功完成过后才触发。
  • FOR:与AFTER等价。不能在视图上定义AFTER触发器。
  • SQL语句:多于一个语句时用begin和end包括


/*该触发器的作用是:当用户向SC表中插入记录时,如果插入了在S表中没有的学生学号sno,
则提示用户不能插入记录,否则提示记录插入成功。
*/
use Student
CREATE TRIGGER insert_xh on SC
  AFTER INSERT
as
begin
  if(exists(select * from inserted join S on inserted.sno=S.sno))
  begin
    rollback tran   /*取消insert操作*/
    select '不能插入记录'
  end
  if(not exists(select * from inserted join S on inserted.sno=S.sno))
  begin
    select '插入记录成功'
  end
end
go

修改触发器


ALTER TRIGGER  触发器名  ON 表名|视图
  [WITH ENCRYPTION]
  {FOR | AFTER | INSTESD OF} 
        [delete][,insert][,update]
as
  [SQL语句]


删除触发器


DROP TRIGGER 触发器名

重命名触发器


SP_RENAME  原触发器名 , 新触发器名


8.数据库的安全管理

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
8月前
|
SQL 存储 数据库
如何在SQLServer中创建数据库
在SQL Server中创建数据库,可通过SSMS的图形界面或T-SQL语句。在SSMS中,连接到服务器,右键“数据库”选择“新建数据库”,配置属性后点击确定。使用T-SQL,连接到服务器,编写CREATE DATABASE语句指定数据库名称、文件路径及大小信息,执行查询完成创建。确保有足够磁盘空间,并注意权限设置。
|
SQL Linux 数据库
今天又被sqlserver坑惨了
今天又被sqlserver坑惨了
60 0
|
SQL
SQLServer 中的WITH AS
SQLServer 中的WITH AS
119 0
|
存储 SQL 安全
|
SQL 存储 安全
C#使用SqlServer
C#使用SqlServer
98 0
|
SQL Java 数据库连接
|
SQL 存储 Go
sqlserver 学习问题总结
1.SQLSERVER 中GO的作用** go 向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号。go是把t-sql语句分批次执行。(一步成功了才会执行下一步,即一步一个go) BEGIN 和 END 语句用于将多个 Transact-SQL 语句组合为一个逻辑块。在控制流语句必须执行包含两条或多条 Transact-SQL 语句的语句块的任何地方,都可以使用 BEGIN 和 END 语句。
201 0
|
数据库 网络安全 关系型数据库