CREATE TRIGGER TR_Borrow_insert_1_Booknum_exits ON Borrow AFTER insert
时间: 2023-08-12 16:04:46 浏览: 93
该代码片段是用于在数据库表"Borrow"插入数据后触发的触发器(trigger)的创建语句。
触发器名称为"TR_Borrow_insert_1_Booknum_exits",它被定义在表"Borrow"上,当有新数据插入到该表时触发。
然而,您提供的代码片段并不完整,缺少了触发器的具体逻辑和操作。如果您可以提供完整的代码片段或更具体的问题,我将尽力提供更详细的分析和解答。
相关问题
create trigger tri_jieshu on reader_borrow for insert as declare @id varchar(50) select @id=borrow_id from inserted update book_borrowing set book_surplus=book_surplus-1 where book_id=@id create trigger tri_huanshu on reader_back for insert as declare @id varchar(50) select @id=back_id from inserted update book_borrowing set book_surplus=book_surplus+1 where book_id=@id create proc payment @id varchar(20),@name varchar(20) as begin select borrow_date,back_date from reader_back,reader_borrow where back_id=borrow_id and back_id=@id and borrow_bookname=back_bookname and (select datediff(day, borrow_date,back_date) FROM reader_back,reader_borrow)>7 end create view view_pay as select * from reader_back,reader_borrow where (borrow_id=back_id and borrow_bookname=back_bookname) create proc proc_pay (@id varchar(20)) as select back_id,back_bookname,back_date,borrow_date from view_pay where back_id=@id exec proc_pay @id='1'该代码有什么语法错误
在触发器 tri_jieshu 和 tri_huanshu 中,update 语句中的 where 子句需要指定 book_id 而不是 borrow_id 和 back_id。应该修改为:
```
update book_borrowing set book_surplus=book_surplus-1 where book_id=(select book_id from inserted)
```
和
```
update book_borrowing set book_surplus=book_surplus+1 where book_id=(select book_id from inserted)
```
在 payment 存储过程中,应该将 datediff 函数的返回值赋值给一个变量,然后使用该变量进行比较。应该修改为:
```
create proc payment @id varchar(20),@name varchar(20) as
begin
declare @days int
select @days = datediff(day, borrow_date,back_date) FROM reader_back,reader_borrow
where back_id=borrow_id and back_id=@id and borrow_bookname=back_bookname
if (@days > 7)
begin
select borrow_date,back_date from reader_back,reader_borrow
where back_id=borrow_id and back_id=@id and borrow_bookname=back_bookname
end
end
```
在 proc_pay 存储过程中,应该将 @id 的数据类型修改为 varchar(50),并且在查询结果中使用别名来避免列名冲突。应该修改为:
```
create proc proc_pay (@id varchar(50)) as
begin
select b.back_id, b.back_bookname, b.back_date, r.borrow_date
from reader_back b, reader_borrow r
where b.back_id = r.borrow_id and b.back_id = @id and b.borrow_bookname = r.back_bookname
end
exec proc_pay @id='1'
```
CREATE TABLE borrow( number BIGINT, borrowname varchar(10), name varchar(10), id BIGINT, phone BIGINT, borrowtime date, returntime date, borrownum BIGINT, PRIMARY key(number) )ENGINE=InnoDB DEFAULT CHARSET=utf8;create table reader( number BIGINT, borrowname varchar(10), name varchar(10), id BIGINT, phone BIGINT, sex varchar(10), borrownum BIGINT, originalbalance double, PRIMARY KEY(number) )ENGINE=InnoDB DEFAULT CHARSET=utf8;delimiter%% CREATE TRIGGER reader_borrow AFTER INSERT on reader FOR EACH ROW INSERT INTO borrow VALUES(new.number,new.borrowname,new.name,new.id,new.phone,NOW(),DATE_ADD(NOW(),INTERVAL 30 day),new.borrownum)%% delimiter;之间的触发插入语句
这是一个在插入 reader 表后自动触发的触发器,将相关信息插入到 borrow 表中。具体的触发器语句如下:
```
delimiter %%
CREATE TRIGGER reader_borrow AFTER INSERT ON reader FOR EACH ROW
INSERT INTO borrow VALUES(new.number, new.borrowname, new.name, new.id, new.phone, NOW(), DATE_ADD(NOW(), INTERVAL 30 DAY), new.borrownum);
%%
delimiter ;
```
这个触发器定义了在每向 reader 表中插入一行数据时,自动执行一次插入操作,将对应信息插入到 borrow 表中。这个触发器使用了 MySQL 的 DATE_ADD 函数来计算还书时间,将借书时间加上 30 天得到还书时间。注意,在本例中,分隔符被设置为 "%%",以避免 SQL 语句中的分号与触发器定义中的分号冲突。最后,将分隔符重置为默认值 ";"。
阅读全文