sqlserver存储过程如何定期删除表中的数据 求代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver存储过程如何定期删除表中的数据 求代码相关的知识,希望对你有一定的参考价值。
方法一:企业管理器
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
update table set columns=0 where id=1
--确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排为一天一次
然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行
设置方法: 我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定. 参考技术A 存储过程写好删除语句,然后在代理服务中创建定时作业追问
直接在在步骤里面写删除语句 姓名 因为我想清空整个表 不写存储过程可以吗
追答完全没问题,只要注意好数据库对应的表即可
参考技术B 删除整个表里的数据,不用delete语句,直接 truncate 表就OK了。 语法:truncate table tbuser
索引-存储过程
索引:索引是可以是查询速度表快,但是新增加修改的删除会变慢
索引其实是一种数据结构,类似于二叉树,B-Tree,查询速度就变快
索引表示创建在 内存中的,而是通过一张表(文本)维护的,如果新增修改删除表中的数据,除了删除表中的数据,除了删除数据表外,还需要维护索引表,所以比较慢。
单例索引 组合索引
单例索引:主键索引,唯一索引,普通索引
主键索引:当你将一个表中的数据字段指定位主键的时候,自动创建一个主键索引。
唯一索引:创建了唯一约束后,是否自动唯一索引? 是
创建唯一索引,是否会创建唯一约束? 不会
怎么做:设计主键约束和唯一约束即可,不用考虑该列上的索引问题
?
什么时候创建索引?
1.该表中的数据比较多
2.where 条件后面的字段加索引
3.能够过滤更多数据的where 条件后面的加索引
score 8,9,10 99万 1万 50万
select * from where sex = 1 and score>10;
4. where 最多索引不能超过三个 and
5. order by 、group by 后面的字段也可以添加索引,可以提升效率
order by 速度快
group by 合并分组前,其实是进行了排序
SQL:
create index account_index on 表名(字段名称);
create unique index account_unique_index ON ‘表名‘(字段名);
drop index indexName ON ‘TableName‘
?
主键:不能重复,不能有null
唯一约束:不能重复,可以有null
?
2.exists 代替 in
https://blog.csdn.net/wqc19920906/article/details/79800374
1)exists
外表 (内表条件)
每次拿出来一个外表的数据和内表进行一次查询
外表数据10条,进行10次查询
外表数据比较少,查询效率高
2)in
外表(内表条件)
先查询,然后外表和内表做一个笛卡尔积,然后在将笛卡尔积进行过滤
先查询出来一个结果集,然后表里外表
内表查询出来的结果比较少,循环次数少。
该情况下,内表数据比较少,查询效率高
3.SQL优化
1)select count(*) from index_demo;
替换为
select count(1) from index_demo;
4、触发器[表上创建的]
create trigger tri_order after insert on index_demo for each row insert into order_log(content) values(‘新增一条记录‘);
5、存储过程【创建在数据库上的】
贴:https://www.cnblogs.com/mark-chan/p/5384139.html
DELIMITER //
CREATE PROCEDURE myproc(OUT s int)
BEGIN
SELECT COUNT(*) INTO s FROM students;
END //
DELIMITER ;
变量问题:
全局变量
show variables;
show variables like ‘character%‘;
select @@变量名字;
局部变量
set @变量名 = 值;
select @变量名;
存储过程:
根据是否有入参和出参:
如果有返回值:
call procedure pro_abc(@name);
select @name;
如果入参和出参都是一个类型:
set @num =1;
call procedure pro_num(@num); // num=num+10
select @num;
1)带循环的存储过程
create procedure pro_testWhile(IN num int,OUT result int)
-> begin
-> declare i int default 1;
-> declare sum int default 0;
-> WHILE i < num DO
-> SET sum = sum+ i;
-> SET i=i+1;
-> END WHILE;
-> SET result = sum;
-> end $;
调用方法:call pro_testWhile(10,@sum);
select @sum;
2) 带if判断的存储过程
create procedure testIf(IN num int,OUT str varchar(30))
-> begin
-> IF num=1 THEN
-> set str=‘星期一‘;
-> ELSEIF num=2 THEN
-> set str=‘星期二‘;
-> ELSE set str=‘输入错误‘;
-> END IF;
-> end $
6、数据库引擎ENGINE【MYISAM,INNODB】
1、InnoDB支持事务,MyISAM不支持
2、MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用
3、InnoDB支持外键,MyISAM不支持。
4、从MySQL5.5.5以后,InnoDB是默认引擎
5、InnoDB中不保存表的行数,如select count(*) from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。
注意的是,当count(*)语句包含where条件时MyISAM也需要扫描整个表。
6、InnoDB支持行锁,MyISAM 锁表
7、MySQL如何修改密码
mysql数据库中的user表
select password(‘root‘);
update user set password=password(‘root‘) where user=‘root‘;
以上是关于sqlserver存储过程如何定期删除表中的数据 求代码的主要内容,如果未能解决你的问题,请参考以下文章