定义(定义时不能赋值):declare @名 类型
赋值:set (或select) @名=’需要赋给@名的值’
存储过程:
手动调用
弊端是不容易迁移数据(迁移时迁表,存储时重写)
格式:
create procedure 存储过程名(UP_表名_操作)
行参(传递的行参)
As
Begin
可定义变量(临时用的行参)
语句
End
使用:
存储过程名 行参
例题:
ALTER PROCEDURE [dbo].[BuyFruit]
@username varchar(20),
@fruitname varchar(20),
@buycount int = 0
AS
BEGIN
declare @kc int,@price float,@fruitid varchar(20)
--先把该水果的库存量找出来
select @fruitid=ids, @kc = numbers,@price=price from fruit where name=@fruitname
--根据购买数量和库存的关系,进行购买
if @buycount < @kc
begin
declare @money decimal(18,2)
select @money = account from login where username=@username --根据用户名找到账户余额
if(@money > @price*@buycount)
begin
update login set account=account-@price*@buycount where username=@username
update fruit set numbers = numbers-@buycount where name=@fruitname
declare @ordercode varchar(50)
set @ordercode ='O'+cast(getdate() as varchar(50))
insert into orders values(@ordercode,@username,GETDATE())
insert into orderdetails values(@ordercode,@fruitid,@buycount)
end
else
begin
print '余额不足'
end
end
else
begin
print '库存不足'
end
END
触发器:
可查,可读,不可改
系统自动写,有inserted和deleted两个临时表
Inserted 存放任何更改后的新信息
Deleted存放最后一条的删除信息
在表的 属性里面的 扩展属性里 对表的内容进行说明,达到一看就懂得效果
删除主表时的主键时 ,如果从表中的数据还有与主键相关的值,则不能成功,因为他破坏了引用的完整性。
默认情况下,从表的数据删完才能删主键,
级联:表 设计 左上角 从表的关系 设置级联
格式:
Create trigger 触发器名(UP_表名_操作)
On 表名
For(或insert of) 操作
As
语句
Go
例题:
create trigger TR_STUDENT_DELETE
on student
for delete
as
declare @no varchar(3),@name varchar (4)
select @no=sno ,@name=sname from deteled
insert into biandong values (@no,@name,'100')
go
select * from student
事务:
Begin tran(或transaction)--开始事务
Commit --提交
Rollback --回滚事务
事务特性:A原子性(atomicity)
C一致性(consistency)
I隔离性(isolation)
D持久性(durability)
@@error 是判断事务有没有错的条件 没错时值为0,出错时值不为0
例:
If @@error<>0
Rollback
Else
Commit
例:
Begin tran
Begin try
语句
Commit
End try
Begin catch
Rollback
End catch
了解 悲观锁 和 乐观锁