(borrow_id,cust_id,agency_id,pawn_goods_name,pawn_goods_num,contract_date) VALUES('202210260001','A001... 错误代码: 1452 Cannot add or update a child row: a foreign key constraint fails (`bankcreditloandb`. `t_impawn_info`, CONSTRAINT `t_impawn_info_ibfk_2` FOREIGN KEY (`agency_id`) REFERENCES `t_agency_info` (`agency_id`))
时间: 2024-04-20 14:22:59 浏览: 162
根据错误代码1452,这个错误是由于在`t_impawn_info`表中的`agency_id`列与`t_agency_info`表中的`agency_id`列之间的外键约束失败引起的。这意味着您在`t_impawn_info`表中插入了一个无效的`agency_id`值,该值在`t_agency_info`表中找不到对应的记录。
要解决这个问题,您需要确保您插入`t_impawn_info`表的每个`agency_id`值都存在于`t_agency_info`表中。请检查您的插入语句并确保提供正确且存在的`agency_id`值。
相关问题
用Mysql数据库写“银行信贷管理系统”台帐管理模块的数据表字段名定义见表 2.2.1。请按以下设计完成数据库创建、数据表创建和数据操作任务: 表 2.2.1 字段名定义表 字段名 类型 备注 约束 borrow_id char(10) 借据号 主键 cust_id char(10) 客户编号 非空 Agency_name char(10) 客户经理 非空 pawn_goods_name varchar(60) 押物名称 无 pawn_goods_num int 押物数量 无 contract_date timestamp 签订日期 默认当前日期 表 2.2.2 数据表 borrow_id cust_id Agency_name pawn_goods_name pawn_goods_num contract_date c001 2023001 张阳 数码产品 10 2022-6-8 09:20:05 2023002 李红 生活用品 20 2022-3-5 05:20:05 c003 2023003 李静 数码产品 21 2022-2-6 11:45:05 c004 2023004 王雯 生活用品 32 2022-2-5 09:44:05 c005 2023005 杨晓文 生活用品 33 2022-6-15 09:11:05 1)创建数据库 BankCreditLoanDB; 2)根据表2.2.1,创建数据表T_impawn_info; 3)为表设置主键,主键为cust_id”; 4)签订日期列(contract_date)默认值为当前日期; 5)请修改李静的数据的芽物数量为28; 6)将T_impawn_info表中的所有的押物数量增加1; 7)查询签订日期为2022年2月份的信息; 8)请查询押物数量超过30的数据; 9)请查询押物数量最大的信息。
好的,以下是您的问题解答:
1. 创建数据库 BankCreditLoanDB:
```
CREATE DATABASE BankCreditLoanDB;
```
2. 根据表2.2.1,创建数据表T_impawn_info:
```
USE BankCreditLoanDB;
CREATE TABLE T_impawn_info (
borrow_id char(10),
cust_id char(10) NOT NULL,
Agency_name char(10) NOT NULL,
pawn_goods_name varchar(60) NOT NULL,
pawn_goods_num int NOT NULL,
contract_date timestamp DEFAULT CURRENT_TIMESTAMP
);
```
3. 为表设置主键,主键为cust_id:
```
ALTER TABLE T_impawn_info ADD PRIMARY KEY (cust_id);
```
4. 签订日期列(contract_date)默认值为当前日期:
```
ALTER TABLE T_impawn_info MODIFY COLUMN contract_date timestamp DEFAULT CURRENT_TIMESTAMP;
```
5. 修改李静的数据的芽物数量为28:
```
UPDATE T_impawn_info SET pawn_goods_num = 28 WHERE borrow_id = 'c003';
```
6. 将T_impawn_info表中的所有的押物数量增加1:
```
UPDATE T_impawn_info SET pawn_goods_num = pawn_goods_num + 1;
```
7. 查询签订日期为2022年2月份的信息:
```
SELECT * FROM T_impawn_info WHERE YEAR(contract_date) = 2022 AND MONTH(contract_date) = 2;
```
8. 查询押物数量超过30的数据:
```
SELECT * FROM T_impawn_info WHERE pawn_goods_num > 30;
```
9. 查询押物数量最大的信息:
```
SELECT * FROM T_impawn_info ORDER BY pawn_goods_num DESC LIMIT 1;
```
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'
```
阅读全文