5.3使用索引
- 普通索引
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;
- 唯一索引
#创建唯一索引,唯一约束也会添加唯一索引 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 原触发器名 , 新触发器名