diff --git "a/\345\207\214\345\256\217\344\270\275/20210307-\345\244\232\347\247\215\350\247\243\346\263\225\357\274\210\344\272\224\345\215\201\351\242\230\357\274\211.md" "b/\345\207\214\345\256\217\344\270\275/20210307-\345\244\232\347\247\215\350\247\243\346\263\225\357\274\210\344\272\224\345\215\201\351\242\230\357\274\211.md" new file mode 100644 index 0000000000000000000000000000000000000000..5636c24e1b5809db177afe701175073f35fb1534 --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20210307-\345\244\232\347\247\215\350\247\243\346\263\225\357\274\210\344\272\224\345\215\201\351\242\230\357\274\211.md" @@ -0,0 +1,6 @@ +## 时间:2021年9月7日 上课内容:五十题的多种解法 + +![截图](./imgs/2021-9-7-01.JPG) +![截图](./imgs/2021-9-7-02.JPG) +![截图](./imgs/2021-9-7-03.JPG) +![截图](./imgs/2021-9-7-04.JPG) \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20210902-\346\225\260\346\215\256\345\272\223\351\253\230\347\272\247\350\256\276\350\256\241.md" "b/\345\207\214\345\256\217\344\270\275/20210902-\346\225\260\346\215\256\345\272\223\351\253\230\347\272\247\350\256\276\350\256\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..96239c5fc5f78a04ab991d961737cac4159d5a30 --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20210902-\346\225\260\346\215\256\345\272\223\351\253\230\347\272\247\350\256\276\350\256\241.md" @@ -0,0 +1,14 @@ +#数据库表之间的关系的表示 + + +## 一、一对一的表关系的表示 + 1、通过外键的形式来实现 + 2、通过在另一个表中设置一样的主键来实现 + +## 二、一对多的表关系表示 + 1、通过外键的形式来实现 + +## 三、多对多的表关系表示 + 1、通过额外的一张表,这张表中设置两个字段,分别指向着两张表的主键 + +![截图](./imgs/1.png) diff --git "a/\345\207\214\345\256\217\344\270\275/20210903-50\351\242\230\347\273\203\344\271\240.md" "b/\345\207\214\345\256\217\344\270\275/20210903-50\351\242\230\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..c7f48c3666e347f6819e01bc836a401beda52b16 --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20210903-50\351\242\230\347\273\203\344\271\240.md" @@ -0,0 +1,5 @@ +## 练习五十题 + +![截图](./imgs/五十题练习.png) + +![截图](./imgs/五十题练习2.png) \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20210906-\346\216\222\345\272\217\345\207\275\346\225\260.md" "b/\345\207\214\345\256\217\344\270\275/20210906-\346\216\222\345\272\217\345\207\275\346\225\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..3dacb5761b14acd628434a66e8f0a4d6a3068522 --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20210906-\346\216\222\345\272\217\345\207\275\346\225\260.md" @@ -0,0 +1,11 @@ +![截图](./imgs/2021-09-06.JPG) + +![截图](./imgs/2021.09.06.JPG) + +![截图](./imgs/1.jpg) + +![截图](./imgs/2.jpg) + +![截图](./imgs/3.jpg) + +![截图](./imgs/4.jpg) \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20210909\346\225\260\346\215\256\350\256\276\350\256\241.md" "b/\345\207\214\345\256\217\344\270\275/20210909\346\225\260\346\215\256\350\256\276\350\256\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..197cc499516e9bcb4ee688f9b982d8c8cc6dbae1 --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20210909\346\225\260\346\215\256\350\256\276\350\256\241.md" @@ -0,0 +1,25 @@ +## 数据设计 + +## 学生成绩管理系统数据库设计 + +| 学号 | 姓名 | 班级 | 年级 | 成绩 | 排名 | 课程 | 性别 | 授课老师 | +| - | - | - | - | - | - | - | - | - | +| 01 | 黄子韬 | 软件二班 | 2020 | 100 | 1 | 数据库高级 | 男 | 凌宏丽 | + + + +## 数据库设计的范式(三范式) + +第一范式:1、数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性。满足第一范式是关系模式规范式的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。 +2、两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。 + +第二范式:1、满足第一范式要求表中的所有列,每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。 +例如:一个人同时订几个房间,就会出来一个订单号多条数据,这样子联系人都是重复的,就会造成数据冗余。我们应该把它拆分开来,这样子便实现一条数据做一件事,不掺杂复杂的关系逻辑,对数据表的更新维护也更容易操作。 + +第三范式:1、满足第二范式后,要求:表中的每一列都要与主键直接相关,而不是间接相关(表中的每一列只能依赖于主键)数据不能存在传递关系,即每个属性都跟主键有直接关系而不是间接关系。像:a>b>c 属性之间含有这样的关系,是不符合第三范式的。 + +第二范式和第三范式的本质区别:在于有没有分出两张表 + +## 注意事项: + +必须先满足第一范式才能满足第二范式,必须同时满足第一第二范式才能满足第三范式。 \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20210910-\346\225\260\346\215\256\345\272\223\344\274\232\345\221\230\347\256\241\347\220\206\347\263\273\347\273\237\350\256\276\350\256\241.md" "b/\345\207\214\345\256\217\344\270\275/20210910-\346\225\260\346\215\256\345\272\223\344\274\232\345\221\230\347\256\241\347\220\206\347\263\273\347\273\237\350\256\276\350\256\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..fa5b96da06f7c5207b4736e33f4810f2105e73c4 --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20210910-\346\225\260\346\215\256\345\272\223\344\274\232\345\221\230\347\256\241\347\220\206\347\263\273\347\273\237\350\256\276\350\256\241.md" @@ -0,0 +1,40 @@ +# 数据库会员管理系统设计 + +## 一、数据库需求分析 + 1、管理员管理会员信息 + 2、会员信息包括充值信息,会员卡信息和会员挂失 + + +## 二、建表 + +### 1、会员信息表 + +| 卡号 | 姓名 | 电话 | 性别 | 出生日期 | 身份证号 | 地址 | 等级 | +| - | - | - | - | - | - | - | - | +| 0001 | 黄子韬 | 18577594121 | 男 | 1993.5.2 | 450924xxx | 青岛 | VIP | +| 0002 | 李钟硕 | 14795121503 | 男 | 1993.5.2 | 450924xxx | 韩国 | SVIP | + +### 2、会员卡表 + +| 卡号 | 密码 | 等级 | +| - | - | - | +| 0001 | 123 | VIP | +| 0002 | 123 | SVIP | + +### 3、管理员表 + +| 工号 | 姓名 | 电话 | 性别 | 年龄 | 身份证号 | 密码 | +| - | - | - | - | - | - | - | +| 01 | 张三 | 134xxx | 男 | 18 | 0775xxx | 123 | + +### 4、会员挂失表 + +| 卡号 | 姓名 | 电话 | 性别 | 身份证号 | +| - | - | - | - | - | +| 0001 | 黄子韬 | 18577594121 | 男 | 450924xxx | + +### 5、会员充值表 + +| 卡号 | 充值金额 | 充值时间 | 充值次数 | 剩余金额 | +| - | - | - | - | - | +| 0002 | 100 | 2021 | 2 | 200 | \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20210916-\345\225\206\345\234\272VIP\347\256\241\347\220\206\347\263\273\347\273\237\350\256\276\350\256\241.md" "b/\345\207\214\345\256\217\344\270\275/20210916-\345\225\206\345\234\272VIP\347\256\241\347\220\206\347\263\273\347\273\237\350\256\276\350\256\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..06d99082087bd2cd37175748a574c4a768f085f9 --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20210916-\345\225\206\345\234\272VIP\347\256\241\347\220\206\347\263\273\347\273\237\350\256\276\350\256\241.md" @@ -0,0 +1,90 @@ +# 商场VIP管理系统设计 + +## 一、 + +### 1、商场信息 +### 2、会员信息 +### 3、会员卡信息 +### 4、会员卡类型信息 +### 5、会员积分规则信息 +### 6、会员积分信息 +### 7、会员等级信息 +### 8、会员活动信息 +### 9、会员车辆信息 +### 10、会员卡挂失记录信息 +### 11、会员积分兑换 +### 12、商品信息 +### 13、用户信息 +### 14、角色信息 +### 15、用户角色信息 + +## 二、数据库表的设计 + +1、商场信息表 + +| 商场编号 | 商场名称 | 商场简称 | 商场注册地址 | 商场注册法人 | 办公电话 | +| - | - | - | - | - | - | +| SM0001 | 万宝购物广场 | 万宝 | 龙岩 | 张三 | 0775XXX | +| SM0002 | 万达广场 | 万达 | 龙岩 | 李四 | 0924XXX | + +2、会员信息 + +| 会员编号 | 姓名 | 性别 | 出生年月 | 手机号 | 身份证号 | 住址 | +| - | - | - | - | - | - | - | +| V01 | 黄子韬 | 男 | 1993.5.2 | 185XXX | 30256XXX | 青岛 | +| V02 | 李钟硕 | 男 | 1993.5.2 | 185XXX | 30256XXX | 韩国 | +| V03 | 彭昱畅 | 男 | 1993.5.2 | 185XXX | 30256XXX | 北京 | + +3、会员卡信息 + +| 编号 | VIP卡号 | 会员编号 | 开卡日期 | 发行单位 | 会员卡等级 | +| - | - | - | - | - | - | +| 1 | VIP01 | V01 | 2021.9.9 | 万达 | H01 | +| 2 | VIP02 | V02 | 2021.9.9 | 万达 | H02 | + + +4、会员卡等级表 + +| 编号 | 名称 | 备注 | +| - | - | - | +| H01 | 金卡 | 消费一万或一万以上 | +| H02 | 银卡 | 消费五千 | +| H03 | 铜卡 | 消费三千 | +| H04 | 普通卡 | 消费一千 | + +5、会员积分信息表 + +| 编号 | 会员编号 | 积分 | +| - | - | - | +| 1 | V01 | 5000 | +| 2 | V02 | 3000 | + +### 积分兑换规则: +### 1、消费按1元=10积分 +### 2、积分一年以内不清零、作废、逾期(一年以内要使用完否则清零) +### 3、积分不可转增其他用户 +### 4、买家在完成该笔交易后(支付系统显示该交易状态为“支付成功”后),才能得到此次交易的相应的积分 +### 5、享受折扣9.9折 + + +6、商铺信息表 + +| 编号 | 商店名称 | 商店地址 | +| - | - | - | +| 1 | 施华洛世奇 | 万达金街11-1号 | +| 2 | 梵克雅宝 | 万达二楼 | + + +7、消费信息表 + +| 消费编号 | VIP卡号 | 消费商店 | 消费时间 | 消费金额 | +| - | - | - | - | - | +| 1 | VIP01 | 1 | 2021.9.9 | 1200 | +| 2 | VIP02 | 2 | 2021.9.9 | 800 | + +8、会员车辆信息表 + +| 编号 | 会员编号 | 车牌号 | +| - | - | - | +| 1 | V01 | 鲁A0502 | +| 2 | V02 | 鲁B0502 | \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20210921-\345\225\206\345\234\272VIP\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.md" "b/\345\207\214\345\256\217\344\270\275/20210921-\345\225\206\345\234\272VIP\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..6a9c5e926e43a7ccace533cd49c06b89252ff740 --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20210921-\345\225\206\345\234\272VIP\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.md" @@ -0,0 +1,70 @@ +## 商场VIP数据库设计 日期:2021年九月二十一日 + +1、商场信息表 + +| 商场编号 | 商场名称 | 商场简称 | 商场注册地址 | 商场注册法人 | 办公电话 | +| - | - | - | - | - | - | +| SM0001 | 万宝购物广场 | 万宝 | 龙岩 | 张三 | 0775XXX | +| SM0002 | 万达广场 | 万达 | 龙岩 | 李四 | 0924XXX | + +2、会员信息 + +| 会员编号 | 姓名 | 性别 | 出生年月 | 手机号 | 身份证号 | 住址 | +| - | - | - | - | - | - | - | +| V01 | 黄子韬 | 男 | 1993.5.2 | 185XXX | 30256XXX | 青岛 | +| V02 | 李钟硕 | 男 | 1993.5.2 | 185XXX | 30256XXX | 韩国 | +| V03 | 彭昱畅 | 男 | 1993.5.2 | 185XXX | 30256XXX | 北京 | + +3、会员卡信息 + +| 编号 | VIP卡号 | 会员编号 | 开卡日期 | 发行单位 | 会员卡等级 | +| - | - | - | - | - | - | +| 1 | VIP01 | V01 | 2021.9.9 | 万达 | H01 | +| 2 | VIP02 | V02 | 2021.9.9 | 万达 | H02 | + + +4、会员卡等级表 + +| 编号 | 名称 | 备注 | +| - | - | - | +| H01 | 金卡 | 消费一万或一万以上 | +| H02 | 银卡 | 消费五千 | +| H03 | 铜卡 | 消费三千 | +| H04 | 普通卡 | 消费一千 | + +5、会员积分信息表 + +| 编号 | 会员编号 | 积分 | +| - | - | - | +| 1 | V01 | 5000 | +| 2 | V02 | 3000 | + +### 积分兑换规则: +### 1、消费按1元=10积分 +### 2、积分一年以内不清零、作废、逾期(一年以内要使用完否则清零) +### 3、积分不可转增其他用户 +### 4、买家在完成该笔交易后(支付系统显示该交易状态为“支付成功”后),才能得到此次交易的相应的积分 +### 5、享受折扣9.9折 + + +6、商铺信息表 + +| 编号 | 商店名称 | 商店地址 | +| - | - | - | +| 1 | 施华洛世奇 | 万达金街11-1号 | +| 2 | 梵克雅宝 | 万达二楼 | + + +7、消费信息表 + +| 消费编号 | VIP卡号 | 消费商店 | 消费时间 | 消费金额 | +| - | - | - | - | - | +| 1 | VIP01 | 1 | 2021.9.9 | 1200 | +| 2 | VIP02 | 2 | 2021.9.9 | 800 | + +8、会员车辆信息表 + +| 编号 | 会员编号 | 车牌号 | +| - | - | - | +| 1 | V01 | 鲁A0502 | +| 2 | V02 | 鲁B0502 | \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20210921-\345\225\206\345\234\272VIP\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.sql" "b/\345\207\214\345\256\217\344\270\275/20210921-\345\225\206\345\234\272VIP\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.sql" new file mode 100644 index 0000000000000000000000000000000000000000..f670c99efcd1d1f4e469e00b3a425521914af7a0 --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20210921-\345\225\206\345\234\272VIP\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.sql" @@ -0,0 +1,87 @@ +use master + +go +create database VIP +go + +use VIP +go + + +--̳Ϣ +create table Shopping +( + SID int primary key identity(1,1) not null, + SNum varchar(20) not null, + ShoppingName nvarchar(20) not null, + ShoppingJianC nvarchar(20), + ShoppingAderess nvarchar(50) not null, + ShoppingPeople nvarchar(20) not null, + ShoppingPhone int not null +) + +--Ϣ +insert into Shopping values ('SM0001','򱦹㳡','','','',0775) + +select * from Shopping +--ԱϢ +create table Member +( + MID int primary key identity(1,1) not null, + MNum varchar(50) not null, + MemberName nvarchar(50) not null, + MemberSex char(2) default '' check(MemberSex='' or MemberSex='Ů') not null, + MemberDate datetime not null, + MemberPhone int not null, + MemberNumber nvarchar(100) not null, + MemberAddress nvarchar(100) +) + +insert into Member values('V01','','','1993-5-2',1857759,'450924','ൺ') + +select * from Member +--Աȼ +create table Grade +( + GID int primary key identity(1,1) not null, + GNum nvarchar(10) not null, + GName nvarchar(10) not null, + GBeizhu nvarchar(50) +) +insert into Grade values('H01','','һһ') + +select * from Grade +--ԱϢ +create table Card +( + CID int primary key identity(1,1) not null, + CNumbear char(20) not null, + CNum int references Member(MID), + Ctime datetime , + Clssuing nvarchar(20), + GNum int references Grade(GID), +) +insert into Card values('V01',2,'2021-9-9','',1) + +select * from Member +select * from Card +--ԱϢ +create table Intergral +( + Iid int primary key identity(1,1) not null, + MNum int references Member(MID), + Jifen int not null, +) + +insert into Intergral values(2,5000) + +--Ϣ + +create table Shops +( + SID int primary key identity(1,1) not null, + SName varchar(20) not null, + SAddress varchar(50), +) + +insert into Shops values('','') \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20210923-\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\346\246\202\345\277\265.md" "b/\345\207\214\345\256\217\344\270\275/20210923-\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\346\246\202\345\277\265.md" new file mode 100644 index 0000000000000000000000000000000000000000..38bbae58cc5e07cec00e3a42870a2607551d8c9b --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20210923-\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\346\246\202\345\277\265.md" @@ -0,0 +1,25 @@ +# 数据库设计相关概念 日期:2021年九月二十三日 + +# 为什么要进行数据库的设计 + +## 数据库是存放东西的地方遵循一定规律设计的数据库表,才能进行数据读取,方便数据管理。否则就像进入杂乱的仓库取东西一样,没法啊找到。 + +# 目的:让数据的存储和获取在满足应用的需求的同时,简化或者规范数据在数据库里的排列形式 + +# 数据持久化 + +## 数据的持久化就是将内存中的描述数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。 + +## 数据持久化对象的基本操作有:保存、更新、删除、查询等。 + +## 数据的持久化,有很多种方法,并不是只有数据库存储一种,还有比如文件存储(文本文件、excel、word文件) + +## 数据的持久化其次就是相对于数据的易失性来说的,比如说在内存当中,只要断电,数据即消失。 + +## 只有保存在硬盘上的数据,才不会随便丢失 + +## 硬盘上保有数据,就是把数据存储在文件当中 + +## 因为不同的需要,所以,操作系统中有了存储不同数据的文件,一些文件通常使用拓展名来区分保存的数据类型 + +## 缓存 redis 内存数据库 靠近处理中心(如CPU) \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20210924-\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\345\256\214\345\226\204.md" "b/\345\207\214\345\256\217\344\270\275/20210924-\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\345\256\214\345\226\204.md" new file mode 100644 index 0000000000000000000000000000000000000000..2d83de75993bffb4f04bb64b54e4858b64c22a7b --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20210924-\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\345\256\214\345\226\204.md" @@ -0,0 +1,7 @@ +# 数据库完善 2021年九月二十四日 + + +![截图](./imgs/数据库完善1.png) +![截图](./imgs/数据库完善2.png) +![截图](./imgs/数据库完善3.png) +![截图](./imgs/数据库完善4.png) diff --git "a/\345\207\214\345\256\217\344\270\275/20210927-VIP\347\256\241\347\220\206\347\263\273\347\273\237\344\270\232\345\212\241\346\250\241\346\213\237.md" "b/\345\207\214\345\256\217\344\270\275/20210927-VIP\347\256\241\347\220\206\347\263\273\347\273\237\344\270\232\345\212\241\346\250\241\346\213\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..ebe4e0b767b964f95690a2d439498b347274546a --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20210927-VIP\347\256\241\347\220\206\347\263\273\347\273\237\344\270\232\345\212\241\346\250\241\346\213\237.md" @@ -0,0 +1,126 @@ +# 数据库系统业务模拟 日期:2021年九月二十七日 + +``` +use master + +go +create database VIP~ +go + +use VIP +go + + +--商场信息表 +create table Shopping +( + SID nvarchar(20) primary key not null, + ShoppingName nvarchar(20) not null, + ShoppingJianC nvarchar(20), + ShoppingAderess nvarchar(50) not null, + ShoppingPeople nvarchar(20) not null, + ShoppingPhone int not null +) + +--插入信息 +insert into Shopping values ('SM0001','万宝购物广场','万宝','龙岩','张三',0775) + +select * from Shopping +--会员信息表 +create table Member +( + MID nvarchar(30) primary key not null, + MemberName nvarchar(50) not null, + MemberSex char(2) default '男' check(MemberSex='男' or MemberSex='女') not null, + MemberDate datetime not null, + MemberPhone int not null, + MemberNumber nvarchar(100) not null, + MemberAddress nvarchar(100) +) + +insert into Member values('V01','黄子韬','男','1993-5-2',1857759,'450924','青岛') + +select * from Member +--会员卡等级表 +create table Grade +( + GID nvarchar(20) primary key not null, + GName nvarchar(10) not null, + GBeizhu nvarchar(50) +) +insert into Grade values('H01','金卡','消费一万或一万以上') + +select * from Grade +--会员卡信息 +create table Card +( + CID nvarchar(20) primary key not null, + MID nvarchar(30) foreign key(MID) references Member(MID), + Ctime datetime , + Clssuing nvarchar(20), + GID nvarchar(20) foreign key(GID) references Grade(GID), +) +insert into Card values('VIP01','V01','2021-9-9','万达','H01') + +select * from Member +select * from Card +--会员积分信息表 +create table Intergral +( + Iid int primary key identity(1,1) not null, + MNum int references Member(MID), + Jifen int not null, +) + +insert into Intergral values(2,5000) + +--商铺信息表 + +create table Shops +( + SID int primary key identity(1,1) not null, + SName varchar(20) not null, + SAddress varchar(50), +) + +insert into Shops values('卡地亚','万达') + +--用户表 +create table UserTable +( + UserId nvarchar(50) not null, + Password nvarchar(50) not null +) + + +--登录 +select * from UserTable where UserId='admin' and Password='123' + +--如何应对登录的用户可能被注销、禁用等情况 +--1、可以先在数据表中删除被禁用、注销的用户名 +delete from UserTable where UserId='hzt' + +--2、随之重新注册用户 + +--用户登录时如果忘记密码,实现找回密码 +--1、可以在数据表中,查找用户名即可找到对应的密码 +select * from UserTable where UserId='admin' + + +--注册 + +--单个注册 +insert into UserTable values('admin','123') + +--批量注册 +insert into UserTable values('admin','123'),('hzt','123'),('pyc','123') + +--用户注册逻辑 +--1、判断当前注册的用户名是否存在,如果存在则返回注册失败;反之,则注册成功 +--可以使用unique语句来判断 +alter table UserTable add constraint UQ_UserId unique(UserId) + +--2、判断重复输入的密码是否一样,如果不一样,则重新输入;反之,注册成功,在数据表中添加一条数据 + + +``` \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20210928-VIP\347\256\241\347\220\206\347\263\273\347\273\237\344\270\232\345\212\241\346\250\241\346\213\2372.md" "b/\345\207\214\345\256\217\344\270\275/20210928-VIP\347\256\241\347\220\206\347\263\273\347\273\237\344\270\232\345\212\241\346\250\241\346\213\2372.md" new file mode 100644 index 0000000000000000000000000000000000000000..b3abf0cc91697e4dac121680ecc48ff8e429231c --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20210928-VIP\347\256\241\347\220\206\347\263\273\347\273\237\344\270\232\345\212\241\346\250\241\346\213\2372.md" @@ -0,0 +1,51 @@ +# VIP管理系统业务模拟完善 时间:2021年九月二十八日 + +``` +--更近一步,就是当前登录的用户名已经被注销、禁用等情况,如何应对 +--1、根据提供的用户名,查询出满足条件的记录 +select * from UserTable where UserId='admin' +--2、判断查询到的记录的状态(如之前提过的IsActived、IsDeleted等等,也可以给用户增加额外的状态字段),给出已经被注销、禁用、删除等提示 +--3、如果这条记录没有被注销、禁用、删除的情况则判断密码是不是和查询到的这条记录匹配,是则登录成功,否则提示登录失败 + + + +--注册通用逻辑 +--1、判断当前注册的用户名是否已经存在,是则不允许再注册,返回注册失败信息;否则可以继续往下走 +/* +declare @username nvarchar(80) +declare @tmptable table (id int,Username nvarchar(80),password nvarchar(80)) +declare @count int +insert into @tmptable +select *count(*)from User where Username=@username +if(@count>0) + begin + 登录成功 + end +else + begin + 登录失败 + end +*/ + +--伪代码 +/* +定义用户名变量=传输过来的用户名 +根据用户名变量查询用户表中有没有同名的记录 +如果有,则提示不能注册,返回信息, +如果没有,则可以继续往下 +*/ + + +--关于会员表的使用场景 +--1、登记会员信息 +insert into Card values('V04','张三','男','1998.2.3','150774','450924','北京') + +--2、根据名字查找出符合的会员信息 +select * from Card where MemberName='张三' + +--3、挂失时根据卡号查找相对于的会员信息进行挂失 +select MID from Card + +--4、会员卡信息中的某一字段需要进行修改 +update Card set MemberName='李四' where MID=1 +``` diff --git "a/\345\207\214\345\256\217\344\270\275/20210930-VIP\346\250\241\346\213\237\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.md" "b/\345\207\214\345\256\217\344\270\275/20210930-VIP\346\250\241\346\213\237\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..1062cd60184450bafff236a67285051c534b71f4 --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20210930-VIP\346\250\241\346\213\237\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.md" @@ -0,0 +1,73 @@ +# VIP模拟数据库设计 日期:2021年九月三十日 + +``` +1、判断密码和重复密码是否一致,是则可以注册,并在相应数据表中插入一条记录,否则返回失败信息 +declare @username nvarchar(80) +declare @password nvarchar(80),@cofirmPassword nvarchar(80) +declare @rowpassword nvarchar(80) +declare @tmpTable table (id int,Username nvarchar(80),Password nvarchar(80)) +declare @count int +declare @res nvarchar(80) + +insert into @tmpTable +select @count=count(*),@rowPassword=Password from Users where Username=@username + +if(@count>0) + begin + set @res='当前用户名已被注册,请重试!' + end +else + begin + if(@password=@cofirmPassword) + begin + insert into Users (Username,Password) values(@username,@password) + set @res='用户注册成功!' + end + else + begin + set @res='两次输入的密码不一致,请重试!' + end + end + +``` +``` + 2、如果根据提供的用户名,找到的记录数不为零,则表明用户名是对的,可以继续往下判断;否则直接提示用户名或密码错误 +if(@count>0) + begin + if(@isDeleted=1) --如果删除标记为真,则表明当前用户已经被删除,作出提示;否则用户未被删除 + begin + set @res='当前用户已经被删除,有任何问题请联系管理员@_@' + end + else + begin + if(@isActived=0) --如果当前用户未启用/激活,则提示信息用户未启用,登录失败;否则用户已经禁用 + begin + set @res='用户已禁用,有任何问题请联系管理员' + end + else + begin + if(@password=@rowPassword) -- 如果传进来的密码和在记录中获取的密码相等,则认为登录成功,作出提示;否则登录失败,提示相应信息 + begin + set @res='登录成功' + end + else + begin + set @res='用户名或者密码错误,请确认后重试。。。' + end + end + + end + + end +else + begin + set @res='用户名或者密码错误,请确认后重试。。。' + end +``` +``` +declare @password nvarchar(80) = \'1' or 1=1\` + +select * from Users +where (Username='admin' and Password='1') or 1=1 + +``` \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20211004-\345\255\230\345\202\250\350\277\207\347\250\213.md" "b/\345\207\214\345\256\217\344\270\275/20211004-\345\255\230\345\202\250\350\277\207\347\250\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..30a82441ffb49fb9562867dccf4ef765d627bcb9 --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20211004-\345\255\230\345\202\250\350\277\207\347\250\213.md" @@ -0,0 +1,83 @@ +# 存储过程 日期:2021.10.04 + +## 存储过程的命名规则 +``` +注释:假如存储过程以sp_ 为前缀开始命名那么会运行的稍微的缓慢,这是因为SQL Server将首先查找系统存储过程,所以我们决不推荐使用sp_作为前缀。 + +存储过程的命名有这个的语法: + +[proc] [MainTableName] by[FieldName(optional)] [Action] + +(1) 所有的存储过程必须有前缀'proc'. 所有的系统存储过程都有前缀"sp_", 推荐不使用这样的前缀因为会稍微的减慢。 + +(2) 表名就是存储过程访问的对象 + +(3)如果存储过程返回一条记录那么后缀是:Select + +(4)如果存储过程插入数据那么后缀是:Insert + +(5)如果存储过程更新数据那么后缀是:Update + +(6)如果存储过程有插入和更新那么后缀是:Save + +(7)如果存储过程删除数据那么后缀是:Delete + +(8)如果存储过程更新表中的数据 (ie. drop and create) 那么后缀是:Create + +(9)如果存储过程返回输出参数或0,那么后缀是:Output + +``` +## 有参的存储过程最多可以有2100个参数 + +```sql +-- 使用语句创建与执行无参数存储过程 + +create proc proc_SelectStudentInfo +as +begin + select * from StudentInfo +end + +exec proc_SelectStudentInfo + +--使用语句命令创建与执行有参数存储过程 +go +create proc proc_SelectStudentInfoWithParameter +@name nvarchar(80) +as +begin + select * from StudentInfo + where StudentName like @name +end +go + +--有多个参数的存储过程 +create proc proc_SelectStudentInfoWithSomeParameters +@name nvarchar(80), +@code nvarchar(80) +as +begin + select * from StudentInfo + where StudentName like @name or StudentCode like @code +end + + +--有默认值的存储过程 +go +create proc proc_SelectStudentInfoWithAnyParameters +@code nvarchar(80)='1', +@name nvarchar(80)='%李%', +@birthday date='2021-10-04', +@sex char='f', +@classId int='1' +as +begin + select * from StudentInfo + where StudentCode like @code + or StudentName like @name + or Birthday<@birthday + or sex=@sex + or ClassId=@ClassId +end + +``` \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20211005-\346\225\260\346\215\256\345\272\223\345\255\230\345\202\250\350\277\207\347\250\213\344\271\213\350\276\223\345\207\272.md" "b/\345\207\214\345\256\217\344\270\275/20211005-\346\225\260\346\215\256\345\272\223\345\255\230\345\202\250\350\277\207\347\250\213\344\271\213\350\276\223\345\207\272.md" new file mode 100644 index 0000000000000000000000000000000000000000..84a2a9e3e4bb62115ef7e04001e6d665f0bea721 --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20211005-\346\225\260\346\215\256\345\272\223\345\255\230\345\202\250\350\277\207\347\250\213\344\271\213\350\276\223\345\207\272.md" @@ -0,0 +1,70 @@ +# 数据库存储过程之输出 时间:2021.10.05 + +```sql +--数据库存储过程单个参数输出 +create proc proc_StudentInfo +@code nvarchar(20) output +as +begin + select @code + select @code=StudentCode from StudentInfo + select @code +end + +go +declare @code nvarchar(20)='我和我的祖国' +exec proc_StudentInfo @code output +select @code +go + +--数据库存储过程多个参数输出 +alter proc proc_SelectStudentInfo +@classid nvarchar(80), +@name nvarchar(80) output, +@code nvarchar(80) output +as +begin + select @name=StudentName,@code=StudentCode from StudentInfo + where @classid=ClassId +end + +go +declare @classid nvarchar(80),@name nvarchar(80),@code nvarchar(80) +set @classid='1' +exec proc_SelectStudentInfo @classid,@name output,@code output +print @classid+'我的姓名是'+@name+'我的学号是'+@code +go + +drop proc proc_SelectStudentInfo + +--自定义函数(标量值函数、表值函数) +--1、标量函数,返回单个值,表值函数返回表数据 +--创建标量函数,返回两个数之间的较大者 +create function dbo.F3_GetMax --例子 +( + + @a int, + @b int +) + +returns int --返回类型为int +as +begin + declare @max int; + if(@a>@b) + begin + set @max=@a; + end + else + begin + set @amax=@b + end + return @max;--最后return返回@max中的值 + end +--调用函数 +select dbo.F3_GetMax(2,3) + +--表值函数 +--1、表值函数有分为:内联表值函数和多语句表值函数 + +``` \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20211007-\346\240\207\351\207\217\345\207\275\346\225\260\345\222\214\350\241\250\345\200\274\345\207\275\346\225\260.md" "b/\345\207\214\345\256\217\344\270\275/20211007-\346\240\207\351\207\217\345\207\275\346\225\260\345\222\214\350\241\250\345\200\274\345\207\275\346\225\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..a28c97e80cef92b609d0ebad4f9c99bbe02a9bfa --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20211007-\346\240\207\351\207\217\345\207\275\346\225\260\345\222\214\350\241\250\345\200\274\345\207\275\346\225\260.md" @@ -0,0 +1,144 @@ +# 标量函数和表值函数 时间:2021.10.07 + +```sql + + +--标量函数 返回单个值 + +/*定义语法 +create function 函数名 +(@参数) +returns 返回类型 +as +begin + SQL语句 + return; +end + +*/ + +--无参标量函数 +go +create function fn_GetNum +( + +) +returns int +as +begin + declare @result int=3 + return @result --返回result +end + +go +select dbo.fn_GetNum()--dbo.和括号不能少 + + +--有参标量函数 +go +create function fu_GetADecimal +( + @result int +) +returns int +as +begin + return @result +end + +go +select dbo.fu_GetADecimal(3) + + +--表值函数的定义和使用 + +--单语句表值函数(内联表值函数) +/* +内联表值函数以表的形式进行返回,函数体不需要像标量值表值函数一样使用begin/end进行包围, +其返回值是由一个位于return子句中的select命令从数据库中筛选出来 + + +语法 +create function 函数名 +(@参数) +returns table +as + return + ( + SQL语句 + ) +*/ + +--无参的内联表值函数 +go +create function fn_StudentInfoSelect +( + +) +returns table +as + return + ( + select * from StudentInfo + ) + go + + select * from dbo.fn_StudentInfoSelect() + + --公用表表达式 + + go + create function fn_Table + ( + + ) + returns table + as + return + ( + with CTE_A + as + ( + + select * from StudentInfo + + )select * from CTE_A + ) +go + +select * from dbo.fn_Table() + + +--有参内联表值函数 + +go +create function fn_StudentInfoSelectById +( + @id int +) +returns table +as + return + ( + select * from StudentInfo + where Id=@id + ) + +go +select * from dbo.fn_StudentInfoSelectById(10) + +--多语句表值函数 +/* +多语句表值函数可以看做标量函数与内联表值函数的结合体 + +create function 函数名(参数) +returns 表变量名称(表变量字段定义) +as +begin + SQL语句 + return; +end +*/ + + +``` \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20211008-CTE\351\200\222\345\275\222.md" "b/\345\207\214\345\256\217\344\270\275/20211008-CTE\351\200\222\345\275\222.md" new file mode 100644 index 0000000000000000000000000000000000000000..53b4918a647bfe370cb4284a898db7f76fc1513a --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20211008-CTE\351\200\222\345\275\222.md" @@ -0,0 +1,45 @@ +# 学习多语句表值函数和CTE递归 时间:2021.10.08 + +## CTE递归查询原理 +1、递归调用是指自己调用自己,使用CTE实现递归查询必须满足三个条件:初始条件,递归调用表达式,终止条件。 + +## 递归查询至少包含两个子查询 +1、第一个子查询称作定点子查询:定点查询只是一个返回有效表的查询,用于设置递归的初始值。 +2、第二个子查询称作递归子查询:该子查询调用CTE名称,触发递归查询,实际上是递归子查询调用递归子查询。 +3、两个子查询使用union all,求并集 + +# CTE的递归终止条件 +递归查询没有显式的递归终止条件,只有当递归子查询返回空结果集(没有数据行返回)或是超出了递归次数的最大限制时,才停止递归。 + +```sql +--多语句表值函数 +go +create function fn_GetDoubleTable +( + @id int +) +returns @StudentInfo table +( + StudentName nvarchar(80) +) +as +begin + insert into @StudentInfo(StudentName) + select StudentName from StudentInfo where @id=Id + return +end + +select StudentName from fn_GetDoubleTable(4) + + +--CTE + ;with CTE_A + as + ( + select Code,AreaName,AreaType,ParentCode from Area where Code=1 + union all + select a.Code,a.AreaName,a.AreaType,a.ParentCode from Area a,CTE_A b + where a.ParentCode=b.code + )select * from CTE_A + +``` \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20211011-\350\247\246\345\217\221\345\231\250.md" "b/\345\207\214\345\256\217\344\270\275/20211011-\350\247\246\345\217\221\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..57ba99742eb68fbbae6cba9b7167673cef2b4eef --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20211011-\350\247\246\345\217\221\345\231\250.md" @@ -0,0 +1,77 @@ +## 关于触发器 时间:2021.10.11 + +```sql + + + +--触发器 +/* +一、什么是触发器 +1、触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。 + +2、 触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check约束更加复杂的约束上面。触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作。诸如:update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器。SQL Server 2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句。 + + DML触发器分为: + + 1、 after触发器(之后触发) + + a、 insert触发器 + + b、 update触发器 + + c、 delete触发器 + + 2、 instead of 触发器 (之前触发) + + 其中after触发器要求只有执行某一操作insert、update、delete之后触发器才被触发,且只能定义在表上。而instead of触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身。既可以在表上定义instead of触发器,也可以在视图上定义。 + +二、创建触发器的语法 +create trigger 触发器名称 +on 表名 --在某某表中创建触发器 +for (insert、update、delete) --为什么事件触发 +as --事件触发后所要做的事情 +begin + + +end +*/ + + +--执行update触发器 + +select * from StudentInfo +select * from StudentCourseScore + +go +create trigger tri_Studentupdate +on StudentInfo +for update +as + if update(Id) +begin + select * from StudentInfo +end + +drop trigger tri_Studentupdate --删除触发器 + +update StudentInfo set Sex='m' where Id=1 + + +--insert触发器 +go +create trigger tr_Teachers +on Teachers +after insert +as +begin + declare @name nvarchar(80) + select @name from inserted +end + +drop trigger tr_Teachers +select * from Teachers + +insert into Teachers values('马六') + + +``` \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20211013-\347\264\242\345\274\225.md" "b/\345\207\214\345\256\217\344\270\275/20211013-\347\264\242\345\274\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..e1f5c290a46492fa236a259b6d519af7baf48b72 --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20211013-\347\264\242\345\274\225.md" @@ -0,0 +1,97 @@ +## 关于索引 时间:2021.10.13 + +```sql + +select * from CourseInfo + +go +alter trigger tr_StudentCourseScoreForInsert +on StudentCourseScore +instead of insert +as +begin + + declare @Score int,@StudentId int,@CourseId int --声明变量(如果在这个表中要去调用这个字段就要去声明一个变量) + select @Score=Score,@StudentId=StudentId,@CourseId=CourseId from StudentCourseScore + if @Score>=0 and @Score<=100 + begin + insert into StudentCourseScore(StudentId,CourseId,Score) values(@StudentId,@CourseId,@Score) + end + else + begin + print '成绩不在0~100的范围内,请确认后重试' + end +end +set nocount off +insert into StudentCourseScore(StudentId,CourseId,Score) values(2,22,999) +set nocount on + +--索引 +/* +聚集索引 clustered +非聚集索引 nonclustered + +create index 索引名称 +on 表名(字段 asc) + +索引是为了加快查询效率 +*/ + +--为Id列创建唯一性聚集索引 + create unique nonclustered index nonclusteredIndex_Id + on CourseInfo + (Id asc) + +--删除索引 +drop index nonclusteredIndex_Id on CourseInfo + + +--创建一个表随机生成数据 + +create table NumInfo +( + Id int primary key not null, + NumName nvarchar(80) not null, + Sex char(2) not null +) + +declare @i int ,@sex char(2),@s int +set @i=1 + +declare @fname table(id int primary key identity(1,1),Name nvarchar(20)) +declare @lname table(id int primary key identity(1,1),Name nvarchar(20)) + +insert @fname values +('赵'),('钱'),('孙'),('李'),('周'),('吴'),('郑'),('王'),('冯'),('陈'),('楮'),('卫'),('蒋'),('沈'),('韩'),('杨'), + ('朱'),('秦'),('尤'),('许'),('何'),('吕'),('施'),('张'),('孔'),('曹'),('严'),('华'),('金'),('魏'),('陶'),('姜'), + ('彭'),('郎'),('鲁'),('韦'),('昌'),('马'),('苗'),('凤'),('花'),('方'),('俞'),('任'),('袁'),('柳'),('鲍'),('史'), + ('唐') ,('滕'),('殷'),('罗'),('毕'),('郝'),('邬'),('安'),('常'),('乐'),('于'),('时'),('傅'),('皮'),('卞'),('齐'), + ('康'),('伍'),('余'),('元'),('卜'),('顾'),('孟'),('平'),('黄'),('和'),('穆'),('萧'),('尹'),('司马'),('上官'), + ('欧阳'),('夏侯'),('诸葛'),('闻人'),('东方'),('赫连'),('皇甫'),('尉迟'),('公羊'),('濮阳'),('淳于'),('单于'), + ('太叔'),('申屠'),('公孙'),('仲孙') , ('轩辕') ,('令狐'),('钟离'),('宇文') + + insert @lname values + ('爱'),('安'),('百'),('邦'),('宝'),('保'),('抱'),('贝'),('倍'),('蓓'),('本'), +('必'),('碧'),('璧'),('斌'),('冰'),('兵'),('炳'),('步'),('彩'),('曹'),('昌'),('长'),('常'),('超'), +('朝'),('陈'),('晨'),('成'),('呈'),('承'),('诚'),('崇'),('楚'),('传'),('春'),('纯'),('翠'),('村'), +('殿'),('丁'),('定'),('东'),('冬'),('二'),('凡'),('方'),('芳'),('昉'),('飞'),('菲'),('纷'),('芬'), +('奋'),('风'),('峰'),('锋'),('凤'),('芙'),('福'),('付'),('复'),('富'),('改'),('刚'),('高'),('阁'), +('铬'),('根'),('庚'),('耕'),('公'),('功'),('冠'),('光'),('广'),('归'),('桂'),('国'),('海'),('寒'), +('翰'),('昊'),('浩'),('荷'),('红'),('宏'),('洪'),('鸿'),('厚'),('华'),('存'),('大'),('丹'),('道'), +('德'),('登'),('砥'),('典'),('佃'),('牛') + +while @i<=1000 + begin + set @s=cast(rand()*1000as int)%2 + if @s=0 + set @sex='男' + else if @s=1 + set @sex='女' + insert into NumInfo values(@i,(select Name from @fname where id=(round(99*rand(),0)))+rtrim((select Name from @lname where id=(round(99*rand(),0) ))),@sex) + set @i=@i+1 + end + + +select * from NumInfo + +``` \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20211014-\351\232\217\346\234\272\346\225\260.md" "b/\345\207\214\345\256\217\344\270\275/20211014-\351\232\217\346\234\272\346\225\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..33b37c730a8bb8ec8a2aac8f3129bfb35ec26dd5 --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20211014-\351\232\217\346\234\272\346\225\260.md" @@ -0,0 +1,83 @@ +# 学习随机数 时间:2021.10.14 + +```sql + +create database DbTest +go + +use DbTest + +--创建一个存储过程 +go +create proc proc_CreatePersonalInfoAndInsert +@rowCount int=100 +as +begin + set nocount on + if OBJECT_ID('PersonalInfo','U') is not null + begin + drop table PersonalInfo + end + create table PersonalInfo + ( + Id int primary key identity, + Name nvarchar(80) not null, + Birthday date not null default(getdate()) + ) + declare @i int=0,@name nvarchar(80),@lastName nvarchar(80),@firstName nvarchar(80) + while @i<@rowCount + begin + exec proc_GererateRandLastName @lastName output + exec proc_GererateRandFirstName @firstName output + set @name=@lastName+@firstName + insert into PersonalInfo(Name)values(@name) + set @i=@i+1 + end + set nocount off +end + +--创建一个随机获得姓氏的存储过程或者函数 +go +alter proc proc_GererateRandLastName +@name nvarchar(80) output +as +begin + declare @str nvarchar(80)='赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯昝管卢莫经房裘缪干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁荀羊於惠甄曲家封芮羿储靳汲邴糜松井段富巫乌焦巴弓牧隗山谷车侯宓蓬全郗班仰秋仲伊宫宁仇栾暴甘钭厉戎祖武符刘景詹束龙叶幸司韶郜黎蓟薄印宿白怀蒲邰从鄂索咸籍赖卓蔺屠蒙池乔阴鬱胥能苍双闻莘党翟谭贡劳逄姬申扶堵冉宰郦雍郤璩桑桂濮牛寿通边扈燕冀郏浦尚农温别庄晏柴瞿阎充慕连茹习宦艾鱼容向古易慎戈廖庾终暨居衡步都耿满弘匡国文寇广禄阙东欧殳沃利蔚越夔隆师巩厍聂晁勾敖融冷訾辛阚那简饶空曾毋沙乜养鞠须丰巢关蒯相查后荆红游竺权逯盖益桓公万俟司马上官欧阳夏侯诸葛闻人东方赫连皇甫尉迟公羊澹台公冶宗政濮阳淳于单于太叔申屠公孙仲孙轩辕令狐钟离宇文长孙慕容鲜于闾丘司徒司空丌官司寇仉督子车颛孙端木巫马公西漆雕乐正壤驷公良拓跋夹谷宰父谷梁晋楚闫法汝鄢涂钦段干百里东郭南门呼延归海羊舌微生岳帅缑亢况郈有琴梁丘左丘东门西门商牟佘佴伯赏南宫墨哈谯笪年爱阳佟第五言福百家姓终' + declare @ranIndex int=rand()*len(@str) + set @name=SUBSTRING(@str,@ranIndex,1) + +end + +--获取随机姓氏的步骤 +declare @res nvarchar(80) +exec proc_GererateRandLastName @res output +select @res + +go +create proc proc_GererateRandFirstName +@name nvarchar(80) output +as +begin + declare @str nvarchar(80)='东西南北中春夏秋冬梅兰菊竹上下左右宇宙洪荒宝灵天地琴棋书画晨霞彩风霜雪雨雷闪磊涯海水木林森树草花果德智体美劳礼仪信谦廉素愿薇采财旺福美寿康安平健贤思年幕曼蒂因增禄观伟刚勇毅俊峰强军平保东文辉力明永健世广志义兴良海山仁波宁贵福生龙元全国胜学祥才发武新利清飞彬富顺信子杰涛昌成康星光天达安岩中茂进林有坚和彪博诚先敬震振壮会思群豪心邦承乐绍功松善厚庆磊民友裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭鹏泽晨辰士以建家致树炎德行时泰盛雄琛钧晨轩清睿宝涛华国亮新凯志明伟嘉东洪建文子云杰兴友才振辰航达鹏宇衡佳强宁丰波森学民永翔鸿海飞义生凡连良乐勇辉龙川宏谦锋双霆玉智增名进德聚军兵忠廷先江昌政君泽超信腾恒礼元磊阳月士洋欣升恩迅科富函业胜震福瀚瑞朔津韵荣为诚斌广庆成峰可健英功冬锦立正禾平旭同全豪源安顺帆向雄材利希风林奇 易来咏岩启坤昊朋和纪艺昭映威奎帅星春营章高伦庭蔚益城牧钊刚洲家晗迎罡浩景珂策皓栋起棠登越盛语钧亿基理采备纶献维瑜齐凤毅谊贤逸卫万臻儒钢洁霖隆远聪耀誉继珑哲岚舜钦琛金彰亭泓蒙祥意鑫朗晟晓晔融谋宪励璟骏颜焘垒尚镇济雨蕾韬选议曦奕彦虹宣蓝冠谱泰泊跃韦怡骁俊沣骅歌畅与圣铭溓滔溪巩影锐展笑祖时略敖堂崊绍崇悦邦望尧珺然涵博淼琪群驰照传诗靖会力大山之中方仁世梓竹至充亦丞州言佚序宜秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芬芳燕彩春菊兰凤洁梅琳素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧璐娅琦晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇菁梦岚苑筠柔竹霭凝晓欢霄枫芸菲寒欣滢伊亚宜可姬舒影荔枝思丽秀飘育馥琦晶妍茜秋珊莎锦黛青倩婷宁蓓纨苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希婷倩睿瑜嘉君盈男萱雨乐欣悦雯晨珺月雪秀晓然冰新淑玟萌凝文展露静智丹宁颖平佳玲彤芸莉璐云聆芝娟超香英菲涓洁萍蓉潞笑迪敏靓菁慧涵韵琳燕依妙美宜尚诗钰娜仪娇谊语彩清好睻曼蔓茜沁韶舒盛越琪霞艺函迎虹爽瑞珏桐筱苹莹名晗甜晴亭吉玉晶妍凤蒙霖希宣昕丽心可旻阳真蓝畅荣岚乔育芷姿妹姗瑾奕兰航蕾艳怡青珊才小子允加巧冉北朵多羽如帆伶采西贝其春易咏亚明秋泓伦哲益轩容玹津启婧晟婉常浩景茗尧雅杰媛诒翔为捷钧毓意琸靖渺熙微祺梦赫菡纶铭齐华菏毅瑶品梓国卿振卫叶亿娆漫兴蓓融嫒锦科润霏灿忆聪怿蕊谨丰丛璇议馨瀚潇莺珑俪骄骁灵忻昭金昊志辰安凡禾竹愉丫珂洺苒若偌珮棋淇群会维影逸娴赏霄辉莲优瑷朦涛' + declare @rndNameLen int=convert(int,rand()*2)+1 + declare @rndIndex1 int,@rndIndex2 int + + --判断名字数量为1 则取单名;否则取双名 + if @rndNameLen=1 + begin + set @rndIndex1=rand()*len(@str) + set @name=SUBSTRING(@str,@rndIndex1,1) + end + else + begin + set @rndIndex1=RAND()*len(@str) + set @rndIndex2=RAND()*len(@str) + set @name=SUBSTRING(@str,@rndIndex1,1)+SUBSTRING(@str,@rndIndex2,1) + end +end + +declare @res nvarchar(80) +exec proc_GererateRandFirstName @res output +select @res + +``` \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20211015-\346\270\270\346\240\207.md" "b/\345\207\214\345\256\217\344\270\275/20211015-\346\270\270\346\240\207.md" new file mode 100644 index 0000000000000000000000000000000000000000..756af74861c9536ea29f08700cb89bfacda506c2 --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20211015-\346\270\270\346\240\207.md" @@ -0,0 +1,63 @@ +# 学习游标 日期:20212.10.15 + +```sql + +--认识游标 +/* +一、游标是SQL Server的一种数据访问机制,它允许用户访问单独的数据行。用户可以对每一行进行单独的处理从而降低系统开销和潜在的阻隔情况,用户也可以使用这些数据生成的SQL代码并立即执行或输出。 +二、游标的优点 +select 语句返回的是一个结果集,但有时候应用程序并不总是能对整个结果集进行有效的处理,游标便提供了这样一种机制,它能从包括多条记录的结果集中每次提取一条记录,游标总是与一条SQL选择语句相关联,由结果集和指向特定记录的游标位置组成 +使用游标有以下优点: +1、允许程序对由select查询语句返回的行集中的每一次执行相同或不同的操作,而不是对整个集合执行同一个操作。 +2、提供对基于游标位置中的行进行删除和更新的能力。 +3、游标作为数据库管理系统和应用程序设计之间的桥梁,将两种处理方式连接起来。 +*/ + +/* + 提取数据 + 当用open语句打开了游标并在数据库中执行了查询后,不能立即利用在查询结果集中的数据。必须用fetch语句来取得数据。 + 一条fetch语句一次可以将一条记录放入程序员指定的变量中。事实上,fetch语句是游标使用的核心。使用游标,我们只能逐条记录的得到查询结果。 + 已经声明并打开一个游标后,我们就可以将数据放入任意的变量中。在fetch语句中可以指定游标的名称和目标变量的名称 + */ + + +--声明称为@StudentName的游标变量 +declare @StudentName cursor --声明游标变量 +declare cursor_StudentName cursor for --创建游标 + select * from StudentInfo +open cursor_StudentName --打开游标 +set @StudentName=cursor_StudentName --为游标变量赋值 + fetch next from @StudentName --从游标变量中读取值 +while @@FETCH_STATUS=0 --判断fetchyu语句是否执行成功 +begin + fetch next from @StudentName --读取游标变量中的数据 + end + close @StudentName --关闭游标 + deallocate @StudentName --释放游标 + + deallocate cursor_StudentName + + + +declare cur_StudentInfo1 cursor +for + select * from StudentInfo + + +declare cur_StudentInfo1 cursor for --创建游标 + select * from StudentInfo +for read only +go +open cur_StudentInfo1 --打开游标 +fetch next from cur_StudentInfo1 +while @@FETCH_STATUS=0 -- +begin + fetch next from cur_StudentInfo1 +end +close cur_StudentInfo1 --关闭游标 +deallocate cur_StudentInfo1 --释放游标也可以删除游标 + +deallocate cur_StudentInfo1 + + +``` \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/20211018-\344\272\213\345\212\241.md" "b/\345\207\214\345\256\217\344\270\275/20211018-\344\272\213\345\212\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..00c2ebae1959d081cb0c01f62e240dffb7d0ef9d --- /dev/null +++ "b/\345\207\214\345\256\217\344\270\275/20211018-\344\272\213\345\212\241.md" @@ -0,0 +1,67 @@ +# 学习事务 日期:2021.10.18 + +```sql + +/* 事务 + 一、事务的ACID特性 + 1、原子性(Atomicity) + 2、一致性(Consistency) + 3、隔离性(Isolation) + 4、持续性(Durability) + + 二、在SQL Server 中数据库分三种: + 1、自动提交事务:这是SQL server的默认模式,它将每条单独的T—SQL语句视为 + 一个事务,如果执行成功,则自动提交;如果错误,则自动回滚 + + 2、显示事务:用begintransaction明确指定事务的开始,这是最常用的事务类型。 + + 3、隐性事务:通过set implicit_transactions on 语句,将隐性事务模式设置为打开, + 下一个语句自动启动一个新事物(不需要begin transaction)每个事务仍以commit或rollback语句显示完成。再下一个transact-SQL语句又将启动一个新事物。 + + 通过set implicit_transactions off把隐性事务模式关闭。(隐性事务会占用大量资源,一般都不推荐使用) + + T-SQL使用下列语句来管理事务: + 1、开始事务:begin transaction + 2、提交事务:commit transaction + 3、回滚(撤销事务):rollback transaction + 4、存储点语句:save transaction + + + 所谓事务存储点就是在事务过程当中插入若干个标记,当事务执行中出现错误时 + 可以不撤销整个事务,只是撤销部分事务,将事务退回到某个事务存储点。一但事务提交或回滚,则事务结束。 +*/ + +select * from CourseInfo +select * from StudentCourseScore +select * from StudentInfo +select * from Teachers + + --创建一个事务,把学号为01的姓名赵雷改为赵磊、学号04的姓名李云改为 + +--李云1,以上两个操作任意一个操作失败,事务回滚,查看事务执行结果。 + +begin transaction tr_StudentInfo +update StudentInfo +set StudentName='赵磊' where StudentCode=01 + +update StudentInfo +set StudentName='李云1' where StudentCode=04 +if @@ERROR!=0 + rollback transaction +else + commit transaction tr_StudentInfo + + + +/*分页的四种方法 + +方法一、三重循环 +方法二、利用max(主键) +方法三、利用row_number关键字 +方法四、offset/fetch next + + +*/ + + +``` \ No newline at end of file diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/1.jpg" "b/\345\207\214\345\256\217\344\270\275/imgs/1.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..e0ac38e7fbf89459802966e1602c42be8c05c76c Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/1.jpg" differ diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/1.png" "b/\345\207\214\345\256\217\344\270\275/imgs/1.png" new file mode 100644 index 0000000000000000000000000000000000000000..657980d46d55128595730481b59b9fc3ad5e71a1 Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/1.png" differ diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/2.jpg" "b/\345\207\214\345\256\217\344\270\275/imgs/2.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..01a245afce0204926d511d073d42e2d15da23f55 Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/2.jpg" differ diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/2021-09-06.JPG" "b/\345\207\214\345\256\217\344\270\275/imgs/2021-09-06.JPG" new file mode 100644 index 0000000000000000000000000000000000000000..c547240926eb7bd4136ea3ea688234e3d54cd0b3 Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/2021-09-06.JPG" differ diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/2021-9-7-01.JPG" "b/\345\207\214\345\256\217\344\270\275/imgs/2021-9-7-01.JPG" new file mode 100644 index 0000000000000000000000000000000000000000..b207d156033c61c61bb938f11df8a92872148105 Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/2021-9-7-01.JPG" differ diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/2021-9-7-02.JPG" "b/\345\207\214\345\256\217\344\270\275/imgs/2021-9-7-02.JPG" new file mode 100644 index 0000000000000000000000000000000000000000..c27d22b4c5c0afc93d0817f31e093283f613f493 Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/2021-9-7-02.JPG" differ diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/2021-9-7-03.JPG" "b/\345\207\214\345\256\217\344\270\275/imgs/2021-9-7-03.JPG" new file mode 100644 index 0000000000000000000000000000000000000000..c1d89459e78170aab5c0783b4f3abe05bbed96ef Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/2021-9-7-03.JPG" differ diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/2021-9-7-04.JPG" "b/\345\207\214\345\256\217\344\270\275/imgs/2021-9-7-04.JPG" new file mode 100644 index 0000000000000000000000000000000000000000..ce8f73eb2d9f2344b612c7c4fe3b720391321350 Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/2021-9-7-04.JPG" differ diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/2021.09.06.JPG" "b/\345\207\214\345\256\217\344\270\275/imgs/2021.09.06.JPG" new file mode 100644 index 0000000000000000000000000000000000000000..7e5f930051f915237126a2bbf81953548eff8f17 Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/2021.09.06.JPG" differ diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/3.jpg" "b/\345\207\214\345\256\217\344\270\275/imgs/3.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..50788e16f1ab64e05048c9bb192c84328addd55c Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/3.jpg" differ diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/4.jpg" "b/\345\207\214\345\256\217\344\270\275/imgs/4.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..251d441d287ba062579895f9010df3d3e2373ced Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/4.jpg" differ diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/\344\272\224\345\215\201\351\242\230\347\273\203\344\271\240.png" "b/\345\207\214\345\256\217\344\270\275/imgs/\344\272\224\345\215\201\351\242\230\347\273\203\344\271\240.png" new file mode 100644 index 0000000000000000000000000000000000000000..d57a0e322dbac680e869af5705de122bb6084452 Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/\344\272\224\345\215\201\351\242\230\347\273\203\344\271\240.png" differ diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/\344\272\224\345\215\201\351\242\230\347\273\203\344\271\2402.png" "b/\345\207\214\345\256\217\344\270\275/imgs/\344\272\224\345\215\201\351\242\230\347\273\203\344\271\2402.png" new file mode 100644 index 0000000000000000000000000000000000000000..b93de3a5b49317f66e95814fe83b7dd55fb2336f Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/\344\272\224\345\215\201\351\242\230\347\273\203\344\271\2402.png" differ diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/\346\225\260\346\215\256\345\272\223\345\256\214\345\226\2041.png" "b/\345\207\214\345\256\217\344\270\275/imgs/\346\225\260\346\215\256\345\272\223\345\256\214\345\226\2041.png" new file mode 100644 index 0000000000000000000000000000000000000000..c348410389e71505bd69730d1d6c55948b0a4b26 Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/\346\225\260\346\215\256\345\272\223\345\256\214\345\226\2041.png" differ diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/\346\225\260\346\215\256\345\272\223\345\256\214\345\226\2042.png" "b/\345\207\214\345\256\217\344\270\275/imgs/\346\225\260\346\215\256\345\272\223\345\256\214\345\226\2042.png" new file mode 100644 index 0000000000000000000000000000000000000000..e1993f6f8015b19081d9e5b87b188cad5ef627b4 Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/\346\225\260\346\215\256\345\272\223\345\256\214\345\226\2042.png" differ diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/\346\225\260\346\215\256\345\272\223\345\256\214\345\226\2043.png" "b/\345\207\214\345\256\217\344\270\275/imgs/\346\225\260\346\215\256\345\272\223\345\256\214\345\226\2043.png" new file mode 100644 index 0000000000000000000000000000000000000000..596f69b5e5c6b7270b61d0ebfcac0924e684a42b Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/\346\225\260\346\215\256\345\272\223\345\256\214\345\226\2043.png" differ diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/\346\225\260\346\215\256\345\272\223\345\256\214\345\226\2044.png" "b/\345\207\214\345\256\217\344\270\275/imgs/\346\225\260\346\215\256\345\272\223\345\256\214\345\226\2044.png" new file mode 100644 index 0000000000000000000000000000000000000000..8bed54aeb0f3e42224012b610b9abcb243264fdf Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/\346\225\260\346\215\256\345\272\223\345\256\214\345\226\2044.png" differ diff --git "a/\345\207\214\345\256\217\344\270\275/imgs/\346\225\260\346\215\256\345\272\223\351\253\230\347\272\247.png" "b/\345\207\214\345\256\217\344\270\275/imgs/\346\225\260\346\215\256\345\272\223\351\253\230\347\272\247.png" new file mode 100644 index 0000000000000000000000000000000000000000..657980d46d55128595730481b59b9fc3ad5e71a1 Binary files /dev/null and "b/\345\207\214\345\256\217\344\270\275/imgs/\346\225\260\346\215\256\345\272\223\351\253\230\347\272\247.png" differ