From 7b63a596cd903f747a459a76f0db28d9118b8f99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=B9=B3?= <2466629710@qq.com> Date: Tue, 27 Sep 2022 16:53:19 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 寮犲钩 <2466629710@qq.com> --- ...7\347\250\213\344\275\234\344\270\232.sql" | 157 ++++++++++++++++++ ...1\345\231\250\344\275\234\344\270\232.sql" | 95 +++++++++++ 2 files changed, 252 insertions(+) create mode 100644 "35-\345\274\240\345\271\263/\344\275\234\344\270\232/2022-09-26\345\255\230\345\202\250\350\277\207\347\250\213\344\275\234\344\270\232.sql" create mode 100644 "35-\345\274\240\345\271\263/\344\275\234\344\270\232/2022-09-27\350\247\246\345\217\221\345\231\250\344\275\234\344\270\232.sql" diff --git "a/35-\345\274\240\345\271\263/\344\275\234\344\270\232/2022-09-26\345\255\230\345\202\250\350\277\207\347\250\213\344\275\234\344\270\232.sql" "b/35-\345\274\240\345\271\263/\344\275\234\344\270\232/2022-09-26\345\255\230\345\202\250\350\277\207\347\250\213\344\275\234\344\270\232.sql" new file mode 100644 index 0000000..05ef368 --- /dev/null +++ "b/35-\345\274\240\345\271\263/\344\275\234\344\270\232/2022-09-26\345\255\230\345\202\250\350\277\207\347\250\213\344\275\234\344\270\232.sql" @@ -0,0 +1,157 @@ +create database BankTest; +go +use banktest; +go +--账户信息表:存储个人信息 +create table AccountInfo +( + AccountId int primary key identity(1,1), --账户编号 + AccountCode varchar(20) not null, --身份证号码 + AccountPhone varchar(20) not null, --电话号码 + RealName varchar(20) not null, --真实姓名 + OpenTime smalldatetime not null, --开户时间 +) +--银行卡表:存储银行卡信息 +create table BankCard +( + CardNo varchar(30) primary key, --银行卡卡号 + AccountId int not null, --账户编号(与账户信息表形成主外键关系) + CardPwd varchar(30) not null, --银行卡密码 + CardMoney money not null, --银行卡余额 + CardState int not null,--1:正常,2:挂失,3:冻结,4:注销 + CardTime smalldatetime default(getdate()) --开卡时间 +) +--交易信息表(存储存钱和取钱的记录) +create table CardExchange +( + ExchangeId int primary key identity(1,1), --交易自动编号 + CardNo varchar(30) not null, --银行卡号(与银行卡表形成主外键关系) + MoneyInBank money not null, --存钱金额 + MoneyOutBank money not null, --取钱金额 + ExchangeTime smalldatetime not null, --交易时间 +) +--转账信息表(存储转账信息记录) +create table CardTransfer +( + TransferId int primary key identity(1,1),--转账自动编号 + CardNoOut varchar(30) not null, --转出银行卡号(与银行卡表形成主外键关系) + CardNoIn varchar(30) not null, --转入银行卡号(与银行卡表形成主外键关系) + TransferMoney money not null,--交易金额 + TransferTime smalldatetime not null, --交易时间 +) +--状态信息变化表(存储银行卡状态变化的记录,状态有1:正常,2:挂失,3:冻结,4:注销) +create table CardStateChange +( + StateId int primary key identity(1,1),--状态信息自动编号 + CardNo varchar(30) not null, --银行卡号(与银行卡表形成主外键关系) + OldState int not null, --银行卡原始状态 + NewState int not null, --银行卡新状态 + StateWhy varchar(200) not null, --状态变化原因 + StateTime smalldatetime not null, --记录产生时间 +) + + + +--为刘备,关羽,张飞三个人进行开户开卡的操作 +--刘备身份证:420107198905064135 +--关羽身份证:420107199507104133 +--张飞身份证:420107199602034138 +insert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime) +values('420107198905064135','13554785425','刘备',GETDATE()) +insert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState) +values('6225125478544587',1,'123456',0,1) + +insert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime) +values('420107199507104133','13454788854','关羽',GETDATE()) +insert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState) +values('6225547858741263',2,'123456',0,1) + +insert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime) +values('420107199602034138','13456896321','张飞',GETDATE()) +insert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState) +values('6225547854125656',3,'123456',0,1) + +select * from AccountInfo +select * from BankCard + + + +--进行存钱操作,刘备存钱2000元,关羽存钱:8000元,张飞存钱:500000元 +select * from AccountInfo +update BankCard set CardMoney = CardMoney + 2000 where CardNo = '6225125478544587' +insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime) +values('6225125478544587',2000,0,GETDATE()) + +update BankCard set CardMoney = CardMoney + 8000 where CardNo = '6225547858741263' + +insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime) +values('6225547858741263',8000,0,GETDATE()) + +update BankCard set CardMoney = CardMoney + 500000 where CardNo = '6225547854125656' +insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime) +values('6225547854125656',500000,0,GETDATE()) + +--转账:刘备给张飞转账1000元 +update BankCard set CardMoney = CardMoney -1000 where CardNo = '6225125478544587' +update BankCard set CardMoney = CardMoney + 1000 where CardNo = '6225547854125656' + +insert into CardTransfer(CardNoOut,CardNoIn,TransferMoney,TransferTime) +values('6225125478544587','6225547854125656',1000,GETDATE()) + + + +select * from AccountInfo --个人信息 +select * from BankCard --银行卡信息 +select * from CardStateChange --银行卡状态更改表 +select * from CardTransfer --转账表 +select * from CardExchange --交易记录 + + +--1. 定义存储过程实现查询出账户余额最低的银行卡账户信息,显示银行卡号,姓名,账户余额 +go +create proc proc_GetMinMoney +as +select top 1 CardNo,RealName,CardMoney from BankCard +inner join AccountInfo on BankCard.AccountId = AccountInfo.AccountId +order by CardMoney +go + +exec proc_GetMinMoney + +--2. 模拟银行卡存钱操作,传入银行卡号,存钱金额,实现存钱操作 +go +create proc proc_inMoney +@carid varchar(30), +@inmoney money +as + insert into CardExchange values(@carid,@inmoney,0,GETDATE()) + update BankCard set CardMoney = CardMoney + @inmoney where CardNo = @carid +go + +exec proc_inMoney '6225125478544587',5000 + +--3. 模拟银行卡取钱操作,传入银行卡号,取钱金额,实现取钱操作,取钱成功,返回1,取钱失败返回-1 +go +create proc proc_outMoney +@carid varchar(30), +@outmoney money +as +if @outmoney<(select CardMoney from BankCard where CardNo = @carid ) +begin + insert into CardExchange values(@carid,0,@outmoney,GETDATE()) + update BankCard set CardMoney = CardMoney - @outmoney where CardNo = @carid + return 1 +end +else +begin +return -1 +end +go +declare @num int +exec @num = proc_outMoney '6225125478544587',5000 +print @num + +--4. **查询出某时间段的银行存取款信息以及存款总金额**,取款总金额,传入开始时间,结束时间,显示存取款交易信息的同时,返回存款总金额,取款总金额。 + + +--5. **密码升级**,传入用户名和密码,如果用户名密码正确,并且密码长度<8,自动升级成8位密码 \ No newline at end of file diff --git "a/35-\345\274\240\345\271\263/\344\275\234\344\270\232/2022-09-27\350\247\246\345\217\221\345\231\250\344\275\234\344\270\232.sql" "b/35-\345\274\240\345\271\263/\344\275\234\344\270\232/2022-09-27\350\247\246\345\217\221\345\231\250\344\275\234\344\270\232.sql" new file mode 100644 index 0000000..b781be9 --- /dev/null +++ "b/35-\345\274\240\345\271\263/\344\275\234\344\270\232/2022-09-27\350\247\246\345\217\221\345\231\250\344\275\234\344\270\232.sql" @@ -0,0 +1,95 @@ +create database texta +go +use texta +go +drop database texta +--部门 +create table Department +( + DepartmentId varchar(10) primary key , --主键,自动增长 + DepartmentName nvarchar(50), --部门名称 +) +--人员信息 +create table People +( + PeopleId int primary key identity(1,1), --主键,自动增长 + DepartmentId varchar(10), --部门编号,外键,与部门表关联 + PeopleName nvarchar(20), --人员姓名 + PeopleSex nvarchar(2), --人员性别 + PeopleSalary money, --薪水 +) +insert into Department(DepartmentId,DepartmentName) +values('001','总经办') +insert into Department(DepartmentId,DepartmentName) +values('002','市场部') +insert into Department(DepartmentId,DepartmentName) +values('003','人事部') +insert into Department(DepartmentId,DepartmentName) +values('004','财务部') + +insert into People(DepartmentId,PeopleName,PeopleSex,PeopleSalary) +values('001','刘备','男',8000) +insert into People(DepartmentId,PeopleName,PeopleSex,PeopleSalary) +values('001','关羽','男',5000) +insert into People(DepartmentId,PeopleName,PeopleSex,PeopleSalary) +values('002','张飞','男',3000) + +select * from Department +select * from People + +--(1)假设有部门表和员工表,在添加员工的时候,该员工的部门编号如果在部门表中找不到, +--则自动添加部门信息,部门名称为"新部门"。 +create trigger tei_getinfo +on people after insert +as +begin + if not exists (select * from Department where DepartmentId = (select DepartmentId from inserted)) + begin + insert into Department values((select DepartmentId from inserted),'新部门') + --select * from Department + --select * from People + end +end + +insert into People values('001','曹操','男',6000) +insert into People values('005','吕布','女',9000) + +--(2)触发器实现,删除一个部门的时候将部门下所有员工全部删除。 +create trigger tri_delete +on Department after delete +as +begin + delete from People where DepartmentId = (select DepartmentId from deleted) +end + +delete from Department where DepartmentName = '财务部' + +--(3)创建一个触发器,删除一个部门的时候判断该部门下是否有员工,有则不删除,没有则删除。 +create trigger tri_deletess +on Department after delete +as +begin + if not exists(select * from Department where DepartmentId =(select DepartmentId from deleted)) + begin + delete from Department where DepartmentId = (select DepartmentId from inserted) + end + else + begin + rollback transaction + end + +end + +delete from Department where DepartmentName = '市场部' +--(4)修改一个部门编号之后,将该部门下所有员工的部门编号同步进行修改 +create trigger tri_updates +on Department after update +as +begin +declare @a varchar(10) = (select DepartmentId from inserted) +declare @b varchar(10) = (select DepartmentId from deleted) +update Department set DepartmentId = @a where DepartmentId = @b + +end + +update People set DepartmentId = '100' where DepartmentId = '001' \ No newline at end of file -- Gitee