mysql数据库完整实例-“汽车维修”

news2024/11/25 19:15:16

mysql数据库创建,编写,查询,自定义函数实战案例

创建汽车修理数据库,并完成数据库编写:

本文分三个部分,第一部分为数据库的创建编写和基础查询,第二部分为关联查询等复杂查询方法,第三部分为存储过程的创建和自定义函数方法,难度逐渐提高,建议初学者可以分层次学习掌握,高手也可以通过目录快速查询。程序都有注释,这里不多赘述了,如果觉得写的还可以,麻烦点赞关注一下哦,您的关注是我最大的动力!

软件版本: Mysql 8.0         Navicat for mysql 16.1.3

目录

第一部分:数据库及表文件的建立和基本操作

1.由提供的表格建立包含在QCXL数据库中的汽车维修表QCWX。

2.显示QCWX的结构。

3.查询记录:

  3.1显示QCWX表的所有记录;

  3.2显示维修编号为‘1003’的记录;

  3.3查询所有维修价格在1000以上维修记录的维修编号、修理项目及送修日期;

  3.4查询所有送修日期在2022年11月的维修编号、车牌号、是否完成及维修说明;

  3.5显示所有未完成的维修记录信息。

4.增加一个“送修车间”的字段,字段属性及值自定。

5.将sfwc字段的值为‘T’的修改为‘维修完成’,sfwc字段的值为‘F’的修改为‘维修未完成’。

6.用修改命令将所有2022年10月送修但未完成的维修费用打8折。

7.复制QCWX表的结构

8.复制表QCWX结构及2022年11月的维修记录。

9.创建按照wxfy升序排列的索引。

10.创建按照sfwc升序排列、再按照wxfy降序排序的索引。

第二部分:数据库及表的查询和应用

11. 创建如下结构的零件库存表(LJKC)。

12.为零件库存表(ljkc)的库存量( kcl)设置索引,要求降序排列。

13.为零件库存表(ljkc)的标准件(bzj)和价格(jg)设置索引。

14.删除题3建立的索引。

15.用SELECT语句显示从第2条记录到第6条记录的ljh,ljmc,kcl,rkri, 查询结果用中文名表示各字段变量名,即显示为:零件号,零件名称,库存量,入库日期,并要求显示结果按“入库日期”降序排列。

16.创建视图获取零件库存表(ljkc)中2022年9月入库的零件数据,并将字段名改为中文。

17.通过视图向ljkc表中添加一条记录,数据自拟。

18.删除题7添加的记录。

19.查询零件库存表(ljkc)中500<1000之间的零件信息。<>

20.为LJKC表取别名为KC,查询零件号为“20003”的入库日期。

21.查询汽车维修表(QCWX)中以字母‘A’开头的车牌号的记录相关信息。

22.查询送修日期在2022 年10月且已完成维修的汽车信息。

23.查询修理项目为“大修”或“换轮胎”的记录。

24.查询汽车维修表(QCWX)中最高的维修费用、最低维修费用及平均维修费用。

25.建立如下结构的零件明细表(LJMX)。其关系模式为:LJMX(wxbh,ljbh,sysl)。

25.1.查询零件明细表(LJMX)中每条维修记录使用零件的总数量。

25.2. 查询维修编号为“1001”的车牌号、送修日期、使用零件编号及每种零件的使用数量。

25.3. 查询汽车维修表(QCWX)中维修费用在500元以上的维修编号、修理项目、维修费用及零件明细表(LJMX)中的零件编号、使用数量及零件库存表(LJKC)的零件号、零件名称及价格。

26.创建新表(zhb),要求该表包括以下字段:零件编号,零件名称,价格,库存量,标准件,入库日期、维修编号、使用数量;并要求该表中包含所有合理的记录。

第三部分:自定义函数和存储过程创建

27.创建存储过程 proc_sum(IN n INT,OUT sum INT):求出 n(n>0)内所有质数并输出,同时计算所有质数之和,并输出结果。

28.已知数据库 QCXL 中有以下三个表:

28.1.创建一个存储过程,对汽车维修表(QCWX)中的零件数量(ljsl)进行修改:对于未完成维修的记录,零件数量修改为 0;对于已完成维修的记录,其零件数量由零件明细表中统计录入。

28.2.创建一个存储过程 proc_insert( ):向零件明细表(LJMX)中插入一条记录,数据自拟。创建另一存储过程 proc_query( ):调用已创建好的存储过程 proc_insert(),并查询 wxbh 为’101’和’1006’的记录信息。

28.3.创建存储过程,更新零件库存表:库存量(kcl)=库存量(kcl)-使用数量(sysl),并查询库存量(kcl)少于 20 的零件信息。

28.4.创建自定义函数 func_count(IN wxbh INT):要求根据维修编号统计使用零件个数并返回。

29.在 STUDENT 数据库中,创建名称为 USER 的表,包含三个字段:用户编号(uid, INT, AUTO_INCREMENT NOT NULL PRIMARY KEY ), 用 户 名 (user,VARCHAR(10)) , 密 码(password,VARCHAR(10)),任意输入三条记录。再创建一个用户权限验证自定义函数,包含两个参数:用户名和用户密码,根据表 USER 中记录,判断输入用户的登录信息:合法返回 1,否则返回 0。

全代码展示

总结


第一部分:数据库及表文件的建立和基本操作

1.由提供的表格建立包含在QCXL数据库中的汽车维修表QCWX。

 其表结构如下: 

字段名

数据类型

长度

是否空值

主键外键

备注

wxbh

CHAR

4

NO

主键

维修编号

cph

CHAR

8

NO

车牌号

xlxm

VARCHAR

10

修理项目

sxrq

DATE

送修日期

wxfy

DECIMAL

DECIMAL(8,1)

维修费用

ljsl

INT

4

零件数量

sfwc

CHAR

1

是否完成

wxsm

VARCHAR

20

维修说明

汽车维修表

wxbh

cph

xlxm

sxrq

wxfy

ljsl

sfwc

wxsm

1001

C3542186

大修

2022-10-03

21000

15

T

车祸送修

1002

K3337667

转动轴

2022-10-07

4800

2

F

换转动轴

1003

A2020203

火花塞

2022-10-09

280

8

T

保养

1004

B3456782

刹车

2022-11-01

360

5

F

前轮刹车片磨损

1005

H2105100

反光镜

2022-11-12

800

2

T

反光镜碎裂

1006

A1212568

换轮胎

2022-11-15

1400

2

T

换后面两条轮胎

create database QCXL;

#用create database语句创建数据库,命名为qcxl

use QCXL;

#用use语句使用该数据库

create table qcwx(
wxbh char(4) not null primary key comment'维修编号',
cph char(8) not null comment'车牌号',
xlxm varchar(10) comment'修理项目',
sxrq date comment'送修日期',
wxfy decimal(8,1) comment'维修费用',
ljsl int(4) comment'零件数量',
sfwc char(1) comment'是否完成',
wxsm varchar(20) comment'维修说明'
);

#在该数据库下创建表,命名为qcwx,并创建数据库结构。

engine=InnoDB default charset=utf8;

#定义格式,搜索引擎默认,编码格式默认,一般会默认不需要这个语句

alter table qcwx convert to character set utf8;

#如果还不能输入汉字说明定义无效可以用这个,一般5以前的版本会出现这个问题

insert into qcwx values('1001','C3542186','大修','2022-10-03','21000','15','T','车祸送修');
insert into qcwx values('1002','K3337667','传动轴','2022-10-07','4800','2','F','换传动轴');
insert into qcwx values('1003','A2020203','火花塞','2022-10-09','280','8','T','保养');
insert into qcwx values('1004','B3456782','刹车','2022-11-01','360','5','F','前轮刹车片磨损');
insert into qcwx values('1005','H2105100','反光镜','2022-11-12','800','2','T','反光镜碎裂');
insert into qcwx values('1006','A1212568','换轮胎','2022-11-15','1400','2','T','换后面两条轮胎');

#录入六行数据。

2.显示QCWX的结构。

desc qcwx;

#查询表结构,看结构是否正确,注意这里用desc查询只显示结构没有内容。

3.查询记录:

  3.1显示QCWX表的所有记录;

Select*from qcwx;

#select语句查询表内容

  3.2显示维修编号为‘1003’的记录;

Select*from qcwx where wxbh=1003;

#查询编号1003列

  3.3查询所有维修价格在1000以上维修记录的维修编号、修理项目及送修日期;

Select wxbh,xlxm,sxrq from qcwx where wxfy>'1000';

#查询维修费用大于1000的几个项目

  3.4查询所有送修日期在2022年11月的维修编号、车牌号、是否完成及维修说明;

Select wxbh,cph,sfwc,wxsm from qcwx where sxrq like '2022-11%';

#查询2022年11月的记录,like可用于通配符的查询,%为通配符

  3.5显示所有未完成的维修记录信息。

Select wxbh,cph,sfwc,wxsm from qcwx where sfwc='F';

#查询未完成的记录

4.增加一个“送修车间”的字段,字段属性及值自定。

alter table qcwx
add column sxcj char(8) comment'送修车间';

#alter修改表结构,add column结构增加一个字段

5.将sfwc字段的值为‘T’的修改为‘维修完成’,sfwc字段的值为‘F’的修改为‘维修未完成’。

alter table qcwx
modify column sfwc char(10);

#这里隐含了一步,首先要修改表,更改qcwx字段的字符长度。为下面的修改做准备

update qcwx set sfwc ='维修完成' where sfwc='T';
update qcwx set sfwc ='维修未完成' where sfwc='F';

#用UPDATE命令修改QCWX中的记录,更新T和F的值,注意怎么使用函数。

6.用修改命令将所有2022年10月送修但未完成的维修费用打8折。

update qcwx set wxfy=wxfy*0.8 where sxrq like '2022-10%' and sfwc='维修未完成';

#更新特定条件的值

7.复制QCWX表的结构

create table qcwx1 select*from qcwx where 1=2;

#仅复制表结构,注意如果去掉where 1=2 就是完整复制表。新表命名为qcwx1

8.复制表QCWX结构及2022年11月的维修记录。

create table qcwx2 as(

select*from qcwx where sxrq like '2022-11%'

);

#复制表的一部分内容到新表。新表命名为qcwx2

9.创建按照wxfy升序排列的索引。

Create index wxfy_index1 on qcwx(wxfy asc);

#创建索引,asc表示升序,命名为wxfy_index1

10.创建按照sfwc升序排列、再按照wxfy降序排序的索引。

Create index wxfy_index2 on qcwx(sfwc asc,wxfy desc);

#创建索引,在sfwc升的基础上令wxfy降序,desc表示降序,命名为wxfy_index2

当前数据库所有文件如下,注意,索引是包含在表里的,不具备单独的文件。

也可以用Navicat来直观创建和查看表格,这里主要面向编程开发,就不演示图形界面了

第二部分:数据库及表的查询和应用

11. 创建如下结构的零件库存表(LJKC)。

打开实例一创建的数据库文件:汽修厂数据库文件QCXL(汽车修理),创建如下结构的零件库存表(LJKC)。其关系模式为:LJKC(ljh,ljmc,jg,kcl,bzj,rkri,cjdm)。

字段名

数据类型

长度

是否空值

主键外键

备注

ljh

CHAR

5

NO

主键

零件号

ljmc

VARCHAR

20

NO

零件名称

jg

DECIMAL

DECIMAL (7,2)

零件价格

kcl

INT

3

库存量

bzj

tinyint

1

标准件

rkri

date

入库日期

cjdm

CHAR

4

厂家代码

零件库存表(LJKC)

ljh

ljmc

jg

kcl

bzj

rkri

cjdm

20001

前灯

350

42

0

2022-09-01

5001

20002 

方向盘

580

15

1

2022-09-15

5002

20003

离合器

750

8

0

2022-09-21

5003

20004

火花塞

120

285

1

2022-09-24

5003

20005

反光镜

180

86

0

2022-10-08

5001

20006

刹车片

268

135

0

2022-10-26

5006

20007

轮胎

780

500

1

2022-11-01

5008

20008

转动轴

1200

21

0

2022-11-13

5008

create table ljkc(
ljh char(5) not null primary key comment'零件号',
ljmc varchar(20) not null comment'零件名称',
jg decimal(7,2) comment'零件价格',
kcl int(3) comment'库存量',
bzj tinyint(1) comment'标准件',
rkri date comment'入库日期',
cjdm char(4) comment'厂家代码'
);

#创建表结构

insert into ljkc values('20001','前灯','350','42','0','2022-09-01','5001');
insert into ljkc values('20002','方向盘','580', '15','1','2022-09-15','5002');
insert into ljkc values('20003','离合器','750', '8','0','2022-09-21','5003');
insert into ljkc values('20004','火花塞','120', '285','1','2022-09-24','5004');
insert into ljkc values('20005','反光镜','180', '86','0','2022-10-08','5005');
insert into ljkc values('20006','刹车片','268', '135','0','2022-10-26','5006');
insert into ljkc values('20007','轮胎','780','500','1','2022-11-01','5007');
insert into ljkc values('20008','传动轴','1200','21','0','2022-11-13','5008');

#输入数据

select*from ljkc;

#查看表

12.为零件库存表(ljkc)的库存量( kcl)设置索引,要求降序排列。

create index kcl_index1 on ljkc (kcl desc);

13.为零件库存表(ljkc)的标准件(bzj)和价格(jg)设置索引。

create index bzjjg_index2 on ljkc (bzj asc,jg desc);

14.删除题3建立的索引。

drop index bzjjg_index2 on ljkc;

15.用SELECT语句显示从第2条记录到第6条记录的ljh,ljmc,kcl,rkri, 查询结果用中文名表示各字段变量名,即显示为:零件号,零件名称,库存量,入库日期,并要求显示结果按“入库日期”降序排列。

select ljh as'零件号',ljmc as'零件名称',kcl as'库存量',rkri as'入库日期'  
from ljkc order by rkri desc limit 1,5;

16.创建视图获取零件库存表(ljkc)中2022年9月入库的零件数据,并将字段名改为中文。

create view ljkcview as select * from ljkc where rkri like '2022-09%';

#注意视图的创建方法

17.通过视图向ljkc表中添加一条记录,数据自拟。

insert into ljkcview values('20009','发动机','2200','22','0','2022-09-13','5009');

select*from ljkcview;

18.删除题7添加的记录。

delete from ljkcview where ljh=20009;

select*from ljkcview;

19.查询零件库存表(ljkc)中500<jg<1000之间的零件信息。

select*from ljkc where jg>500 and jg<1000;

20.为LJKC表取别名为KC,查询零件号为“20003”的入库日期。

rename table ljkc to kc;
select rkri from kc where ljh=20003;

#用rename来重命名表名

汽车维修表(QCWX)(第一部分创建)

wxbhcphxlxmsxrqwxfyljslsfwcwxsmsxcj
1001C3542186大修2022/10/32100015维修完成车祸送修维修1车间
1002K333-667转动轴2022/10/748002维修未完成换转动轴维修2车间
1003A2020203火花塞2022/10/92808维修完成保养维修3车间
1004B3456782刹车2022/11/13605维修未完成前轮刹车片磨损维修1车间
1005H210-100反光镜2022/11/128002维修完成反光镜碎裂维修3车间
1006A1212568换轮胎2022/11/1514002维修完成换后面两条轮胎维修3车间

21.查询汽车维修表(QCWX)中以字母‘A’开头的车牌号的记录相关信息。

select*from qcwx where cph like 'A%';

22.查询送修日期在2022 年10月且已完成维修的汽车信息。

select*from qcwx where sxrq like '2022-10%' and sfwc='维修完成';

23.查询修理项目为“大修”或“换轮胎”的记录。

select*from qcwx where xlxm= '大修' or xlxm='换轮胎';

24.查询汽车维修表(QCWX)中最高的维修费用、最低维修费用及平均维修费用。

select max(wxfy) as '最高费用'from qcwx;
select min(wxfy) as '最低费用'from qcwx;
select avg(wxfy) as '平均费用'from qcwx;

25.建立如下结构的零件明细表(LJMX)。其关系模式为:LJMX(wxbh,ljbh,sysl)。

字段名

数据类型

长度

是否空值

主键外键

备注

wxbh

CHAR

4

NO

外键

维修编号

ljbh

CHAR

5

NO

外键

零件编号

sysl

INT(2)

使用数量

零件明细表(LJMX)

wxbh

ljbh

sysl

1001

20003

4

1001

20006

4

1001

20001

2

1003

20004

1

1004

20006

1

1006

20007

2

create table ljmx(
wxbh char(4) not null comment '维修编号',
ljh char(5) not null comment '零件号 ',
sys int(2) comment '使用数量',
constraint ljmx_qcwx
foreign key(wxbh)
references qcwx(wxbh),
constraint ljmx_kc
foreign key(ljh)
references kc(ljh)


 

insert into ljmx values('1001','20003','4');
insert into ljmx values('1001','20006','4');
insert into ljmx values('1001','20001','2');
insert into ljmx values('1003','20004','1');
insert into ljmx values('1004','20006','1');
insert into ljmx values('1006','20007','2');

25.1.查询零件明细表(LJMX)中每条维修记录使用零件的总数量。

select sum(sys) as '使用零件总数量' from ljmx group by wxbh;  

25.2. 查询维修编号为“1001”的车牌号、送修日期、使用零件编号及每种零件的使用数量。

select cph,sxrq,ljh,sys from ljmx inner join qcwx
where qcwx.wxbh=ljmx.wxbh and qcwx.wxbh=1001;

25.3. 查询汽车维修表(QCWX)中维修费用在500元以上的维修编号、修理项目、维修费用及零件明细表(LJMX)中的零件编号、使用数量及零件库存表(LJKC)的零件号、零件名称及价格。

Select q.wxbh,q.xlxm,q.wxfy,l.ljbh,l.sys,k.ljh,k.ljmc,k.jg
From (ljmx as l left join kc as k on k.ljh=l.ljbh)
Left join qcwx as q on q.wxbh=l.wxbh
Where q.wxfy>500;

#注意这里是左连接的三表联合查询

26.创建新表(zhb),要求该表包括以下字段:零件编号,零件名称,价格,库存量,标准件,入库日期、维修编号、使用数量;并要求该表中包含所有合理的记录。

alter table ljmx change ljh ljbh char(5);

#这个是为了防止下面编号冲突,修改表结构中字段名称的代码

create table zhb as(
select ljh,ljmc,jg,kcl,bzj,rkri,ljmx.wxbh,sys
from kc
left join ljmx on kc.ljh=ljmx.ljbh
);

第三部分:自定义函数和存储过程创建

27.创建存储过程 proc_sum(IN n INT,OUT sum INT):求出 n(n>0)内所有质数并输出,同时计算所有质数之和,并输出结果。

delimiter $
drop table if exists procsum$
create table procsum(
num int not null comment'任意大于0的数',
zs int not null primary key comment'所有小于n的质数',
s int not null comment'质数之和'
);$

drop procedure if exists proc_sum$
create procedure proc_sum(in n int, out sum int)
begin
declare number int default 2;
declare temp int default 2;
set sum =0;
while number<n do
set temp=2;
label: while temp<number do
if number%temp=0 then
leave label;
end if;
set temp = temp+1;
end while;
if temp = number then
set sum=sum+number;
insert into procsum values(n,number,sum);
end if;
set number = number+1;
end while;
Select*from procsum;
end$

call proc_sum(100,@sum)$

#这里首先创建了一个表,然后创建了一个存储过程,将存储过程生成的内容写入表中并展示,最后用call语句调用该函数

select*from information_schema.routines
where routine_name='proc_sum';$

#通过这个语句可查看函数;

#结果如下

28.已知数据库 QCXL 中有以下三个表:

汽车维修表(QCWX)(第一部分创建)

wxbhcphxlxmsxrqwxfyljslsfwcwxsmsxcj
1001C3542186大修2022/10/32100015维修完成车祸送修维修 1 车间
1002K333-667转动轴2022/10/748002维修未完成换转动轴维修 2 车间
1003A2020203火花塞2022/10/92808维修完成保养维修 3 车间
1004B3456782刹车2022/11/13605维修未完成前轮刹车片磨损维修 1 车间
1005H210-100反光镜2022/11/128002维修完成反光镜碎裂维修 3 车间
1006A1212568换轮胎2022/11/1514002维修完成换后面两条轮胎维修 3 车间

零件库存表(LJKC)(第二部分创建)

ljhljmcjgkclbzjrkricjdm
20001前灯3504202022/9/15001
20002方向盘5801512022/9/155002
20003离合器750802022/9/215003
20004火花塞12028512022/9/245003
20005反光镜1808602022/10/85001
20006刹车片26813502022/10/265006
20007轮胎78050012022/11/15008
20008转动轴12002102022/11/135008

零件明细表(LJMX)(第二部分创建)

wxbh

ljbh

sysl

1001

20003

4

1001

20006

4

1001

20001

2

1003

20004

1

1004

20006

1

1006

20007

2

28.1.创建一个存储过程,对汽车维修表(QCWX)中的零件数量(ljsl)进行修改:对于未完成维修的记录,零件数量修改为 0;对于已完成维修的记录,其零件数量由零件明细表中统计录入。

Drop procedure if exists proc_xg$
create procedure proc_xg()
Begin
Update qcwx set ljsl=0 Where sfwc='维修未完成';
Update qcwx as q,ljmx as l 
set q.ljsl=l.sys
Where q.wxbh=l.wxbh and q.sfwc='维修完成';
Select*from qcwx;
end$

call proc_xg()$

#修改表格数据要注意两者的先后关系

#结果如下

28.2.创建一个存储过程 proc_insert( ):向零件明细表(LJMX)中插入一条记录,数据自拟。创建另一存储过程 proc_query( ):调用已创建好的存储过程 proc_insert(),并查询 wxbh 为’101’和’1006’的记录信息。

drop procedure if exists proc_insert$
create procedure proc_insert()
begin
insert into ljmx values('1002','20007','3');
select*from ljmx;
end$

call proc_insert()$

drop procedure if exists proc_quert$
create procedure proc_quert()
Begin
call proc_insert();
Select * from ljmx where wxbh=1006 or wxbh=1001;
end$

call proc_quert()$

#注意这是两个存储过程

 #结果如下

28.3.创建存储过程,更新零件库存表:库存量(kcl)=库存量(kcl)-使用数量(sysl),并查询库存量(kcl)少于 20 的零件信息。

drop procedure if exists proc_kcl$
create procedure proc_kcl()
begin
update kc as k,ljmx as l
set k.kcl=k.kcl-l.sys;
Select*from kc
where kcl<20;
end$

call proc_kcl()$

#使用set来完成赋值运算

28.4.创建自定义函数 func_count(IN wxbh INT):要求根据维修编号统计使用零件个数并返回。

drop function if exists func_count$
create function func_count(wxh int)
returns int
Reads sql data
Begin
Declare bh int;
Select sys into bh from ljmx where wxbh=wxh;
Return (bh);
End$

select func_count(1003)$

#对于自定义函数来说reads sql data语句极为重要,否则无法正常运行

#注意select into 语句使用方法

29.在 STUDENT 数据库中,创建名称为 USER 的表,包含三个字段:用户编号(uid, INT, AUTO_INCREMENT NOT NULL PRIMARY KEY ), 用 户 名 (user,VARCHAR(10)) , 密 码(password,VARCHAR(10)),任意输入三条记录。再创建一个用户权限验证自定义函数,包含两个参数:用户名和用户密码,根据表 USER 中记录,判断输入用户的登录信息:合法返回 1,否则返回 0。

drop table if exists users;$
create table users(
uid int auto_increment not null primary key comment '用户编号' ,
user varchar(10) not null comment '用户名' ,
password int not null comment '密码');
insert into users(uid, user, password)
values 
('202201','管理员1',123456),
('202202','管理员2',654321),
('202203','管理员3',147258);$

drop function if exists func_login$
create function func_login(u varchar(10), passw int)
returns int
reads sql data
begin
declare getpass int;
declare result int default 0;
select password into getpass from users where user=u limit 1;
if getpass= passw
then
set result=1;
else
set result=0;
end if;
return (result);
end$

select func_login('管理员1',123456)$

#这里1为真0为假

#结果如下

全代码展示

第一部分

create database QCXL;

use QCXL;

create table qcwx(
wxbh char(4) not null primary key comment'维修编号',
cph char(8) not null comment'车牌号',
xlxm varchar(10) comment'修理项目',
sxrq date comment'送修日期',
wxfy decimal(8,1) comment'维修费用',
ljsl int(4) comment'零件数量',
sfwc char(1) comment'是否完成',
wxsm varchar(20) comment'维修说明'
);
engine=InnoDB default charset=utf8;

alter table qcwx convert to character set utf8;

insert into qcwx values('1001','C3542186','大修','2022-10-03','21000','15','T','车祸送修');
insert into qcwx values('1002','K3337667','传动轴','2022-10-07','4800','2','F','换传动轴');
insert into qcwx values('1003','A2020203','火花塞','2022-10-09','280','8','T','保养');
insert into qcwx values('1004','B3456782','刹车','2022-11-01','360','5','F','前轮刹车片磨损');
insert into qcwx values('1005','H2105100','反光镜','2022-11-12','800','2','T','反光镜碎裂');
insert into qcwx values('1006','A1212568','换轮胎','2022-11-15','1400','2','T','换后面两条轮胎');

desc qcwx;

Select*from qcwx;
Select*from qcwx where wxbh=1003;
Select wxbh,xlxm,sxrq from qcwx where wxfy>'1000';
Select wxbh,cph,sfwc,wxsm from qcwx where sxrq like '2022-11%';
Select wxbh,cph,sfwc,wxsm from qcwx where sfwc='F';

alter table qcwx
add column sxcj char(8) comment'送修车间';

alter table qcwx
modify column sfwc char(10);

update qcwx set sfwc ='维修完成' where sfwc='T';
update qcwx set sfwc ='维修未完成' where sfwc='F';

update qcwx set wxfy=wxfy*0.8 where sxrq like '2022-10%' and sfwc='维修未完成';


create table qcwx1 select*from qcwx where1=2;

create table qcwx2 as(
select*from qcwx where sxrq like '2022-11%'
);

Create index wxfy_index1 on qcwx(wxfy asc);
Create index wxfy_index2 on qcwx(sfwc asc,wxfy desc);

第二部分

create table ljkc(
ljh char(5) not null primary key comment'零件号',
ljmc varchar(20) not null comment'零件名称',
jg decimal(7,2) comment'零件价格',
kcl int(3) comment'库存量',
bzj tinyint(1) comment'标准件',
rkri date comment'入库日期',
cjdm char(4) comment'厂家代码'
);

insert into ljkc values('20001','前灯','350','42','0','2022-09-01','5001');
insert into ljkc values('20002','方向盘','580', '15','1','2022-09-15','5002');
insert into ljkc values('20003','离合器','750', '8','0','2022-09-21','5003');
insert into ljkc values('20004','火花塞','120', '285','1','2022-09-24','5004');
insert into ljkc values('20005','反光镜','180', '86','0','2022-10-08','5005');
insert into ljkc values('20006','刹车片','268', '135','0','2022-10-26','5006');
insert into ljkc values('20007','轮胎','780','500','1','2022-11-01','5007');
insert into ljkc values('20008','传动轴','1200','21','0','2022-11-13','5008');

select*from ljkc;

create index kcl_index1 on ljkc (kcl desc);

create index bzjjg_index2 on ljkc (bzj asc,jg desc);

drop index bzjjg_index2 on ljkc;

select ljh as'零件号',ljmc as'零件名称',kcl as'库存量',rkri as'入库日期'  
from ljkc order by rkri desc limit 1,5;

create view ljkcview as select * from ljkc where rkri like '2022-09%';

insert into ljkcview values('20009','发动机','2200','22','0','2022-09-13','5009');

select*from ljkcview;

delete from ljkcview where ljh=20009;

select*from ljkcview;

select*from ljkc where jg>500 and jg<1000;

rename table ljkc to kc;
select rkri from kc where ljh=20003;
select*from qcwx where cph like 'A%';

select*from qcwx where sxrq like '2022-10%' and sfwc='维修完成';

select*from qcwx where xlxm= '大修' or xlxm='换轮胎';

select max(wxfy) as '最高费用'from qcwx;
select min(wxfy) as '最低费用'from qcwx;
select avg(wxfy) as '平均费用'from qcwx;

create table ljmx(
wxbh char(4) not null comment '维修编号',
ljh char(5) not null comment '零件号 ',
sys int(2) comment '使用数量',
constraint ljmx_qcwx
foreign key(wxbh)
references qcwx(wxbh),
constraint ljmx_kc
foreign key(ljh)
references kc(ljh)
);

insert into ljmx values('1001','20003','4');
insert into ljmx values('1001','20006','4');
insert into ljmx values('1001','20001','2');
insert into ljmx values('1003','20004','1');
insert into ljmx values('1004','20006','1');
insert into ljmx values('1006','20007','2');

select sum(sys) as '使用零件总数量' from ljmx group by wxbh;  

select cph,sxrq,ljh,sys from ljmx inner join qcwx 
where qcwx.wxbh=ljmx.wxbh and qcwx.wxbh=1001;

Select q.wxbh,q.xlxm,q.wxfy,l.ljbh,l.sys,k.ljh,k.ljmc,k.jg
From (ljmx as l left join kc as k on k.ljh=l.ljbh)
Left join qcwx as q on q.wxbh=l.wxbh
Where q.wxfy>500;

create table zhb as(
select l.ljh,l.wxbh,l.sys,k.ljmc,k.jg,k.kcl,k.bzj,k.rkri
from ljmx as l, kc as k
);

alter table ljmx change ljh ljbh char(5);
create table zhb as(
select ljh,ljmc,jg,kcl,bzj,rkri,ljmx.wxbh,sys
from kc
left join ljmx on kc.ljh=ljmx.ljbh
);

 第三部分

delimiter $
drop table if exists procsum$
create table procsum(
num int not null comment'任意大于0的数',
zs int not null primary key comment'所有小于n的质数',
s int not null comment'质数之和'
);$

drop procedure if exists proc_sum$
create procedure proc_sum(in n int, out sum int)
begin
declare number int default 2;
declare temp int default 2;
set sum =0;
while number<n do
set temp=2;
label: while temp<number do
if number%temp=0 then
leave label;
end if;
set temp = temp+1;
end while;
if temp = number then
set sum=sum+number;
insert into procsum values(n,number,sum);
end if;
set number = number+1;
end while;
Select*from procsum;
end$

call proc_sum(100,@sum)$

select*from information_schema.routines
where routine_name='proc_sum';$


Drop procedure if exists proc_xg$
create procedure proc_xg()
Begin
Update qcwx set ljsl=0 Where sfwc='维修未完成';
Update qcwx as q,ljmx as l 
set q.ljsl=l.sys
Where q.wxbh=l.wxbh and q.sfwc='维修完成';
Select*from qcwx;
end$

call proc_xg()$

drop procedure if exists proc_insert$
create procedure proc_insert()
begin
insert into ljmx values('1002','20007','3');
select*from ljmx;
end$

call proc_insert()$

drop procedure if exists proc_quert$
create procedure proc_quert()
Begin
call proc_insert();
Select * from ljmx where wxbh=1006 or wxbh=1001;
end$

call proc_quert()$

drop procedure if exists proc_kcl$
create procedure proc_kcl()
begin
update kc as k,ljmx as l
set k.kcl=k.kcl-l.sys;
Select*from kc
where kcl<20;
end$

call proc_kcl()$

drop function if exists func_count$
create function func_count(wxh int)
returns int
Reads sql data
Begin
Declare bh int;
Select sys into bh from ljmx where wxbh=wxh;
Return (bh);
End$

select func_count(1003)$

drop table if exists users;$
create table users(
uid int auto_increment not null primary key comment '用户编号' ,
user varchar(10) not null comment '用户名' ,
password int not null comment '密码');
insert into users(uid, user, password)
values 
('202201','管理员1',123456),
('202202','管理员2',654321),
('202203','管理员3',147258);$

drop function if exists func_login$
create function func_login(u varchar(10), passw int)
returns int
reads sql data
begin
declare getpass int;
declare result int default 0;
select password into getpass from users where user=u limit 1;
if getpass= passw
then
set result=1;
else
set result=0;
end if;
return (result);
end$

select func_login('管理员1',123456)$

总结

这个实例几乎覆盖了全部sql语言的基础内容,本文面向开发层面,没有过多介绍图形界面,希望能够帮助初学者了解掌握数据库开发的基本方法。创作不易求求关注啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/114317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实验四:完整性实验

【实验目的】 掌握实体完整性、参照完整性和用户自定义完整性的定义的维护方法 【实验内容】 要实现这样一个功能&#xff1a;医生根据药品价表选择处方药品&#xff0c;录入数量和使用天数&#xff0c;系统根据医生选择的药品和录入的信息自动生成处方主表和处方明细表。功能…

Flink-按键分区状态-算子状态-广播状态

文章目录1. 按键分区状态&#xff08;Keyed State&#xff09;1.2基本概念和特点1.3 支持的结构类型1.4 代码实现1.5 状态生存时间&#xff08;TTL&#xff09;2 算子状态&#xff08;Operator State&#xff09;2.1 基本概念和特点2.2 状态类型2.3 代码实现3. 广播状态&#x…

2022年安徽建筑施工塔式起重机(建筑特种作业)模拟题库及答案

百分百题库提供特种工&#xff08;塔式起重机&#xff09;考试试题、特种工&#xff08;塔式起重机&#xff09;考试真题、特种工&#xff08;塔式起重机&#xff09;证考试题库等,提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 87.塔式起重机滑轮上…

基于历史对比学习的时序知识图谱推理

时序知识图谱 知识图谱&#xff08;KGs&#xff09;作为人类知识的集合&#xff0c;在自然语言处理、推荐系统和信息检索等领域显示展现了很好的前景。传统的KG通常是一个静态知识库&#xff0c;它使用图结构数据拓扑&#xff0c;并以三元组&#xff08;s, p, o&#xff09;的…

自定义ContentProvider案例

自定义ContentProvider案例 1.条件准备 app5往外暴漏数据app7接收和操作远程数据图1 app5目录结构 图2 app7目录结构 2.参考代码 完整代码&#xff1a; https://download.csdn.net/download/weixin_41957626/87346497 1)app5的代码 &#xff08;1&#xff09;app5的entity&…

C#项目实战——【实例】企业人事管理系统(一):1、系统分析;2、系统设计;3、系统运行环境;

学习《C#从入门到精通》&#xff0c;边学边练记录实现过程。 1、系统分析 1.1、需求分析 基于其他企业人事管理软件的不足&#xff0c;要求能够制作一个可以方便、快捷地对职工信息进行添加、修改、删除的操作&#xff0c;并且可以在数据库中存储相应职工的照片。为了能够更…

Magic Live智慧引擎发力,荣耀吹响智慧服务变革号角

人类的不断进步&#xff0c;核心源自对生活的“不满足”。 就在十几年前&#xff0c;诺基亚、黑莓等手机还被当做走在时代前沿的产品&#xff0c;触屏笔等设计风靡一时。但后来人们发现&#xff0c;触屏笔非常不方便&#xff0c;于是迅速被淘汰&#xff0c;更为先进的触摸屏诞…

自动控制原理笔记-二阶欠阻尼系统动态性能指标计算

目录 欠阻尼二阶系统的两种表示方法&#xff1a; 二阶欠阻尼系统单位阶跃响应&#xff1a; 二阶欠阻尼系统单位指标计算&#xff1a; 例题&#xff1a; 例题&#xff1a; 二阶系统动态性能随极点位置分布的变化规律&#xff1a; 例题&#xff1a; 欠阻尼包括零阻尼 欠阻…

【Linux04-进程概念上】两个结构的理解带你“降维打击”进程概念!

前言 本期分享Linux超重要的知识&#xff1a;进程概念&#xff01; 博主水平有限&#xff0c;不足之处望请斧正&#xff01; 要学习进程&#xff0c;我们首先得搭建宏观的计算机和操作系统结构&#xff0c;从更高的视角学习。 先导 计算机体系结构 使用最多提及最多的计算…

【软件测试】从事5年资深测试的经验,少走弯路......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 小张&#xff1a; 工…

SSIS中刷新Power BI数据集

前面介绍过了怎么在Azure云中刷新Power BI数据集&#xff0c;感兴趣的可以阅读 数据工厂中刷新PowerBI数据集 数据工厂刷新PowerBI数据集2 但有很多公司可能并没有完全上云&#xff0c;比如某些公司还在使用SSIS调用ETL工程&#xff0c;那么有没有办法在本地也实现执行完SSI…

双11购物的凑单问题与财务凑数问题

&#x1f4e2;作者&#xff1a; 小小明-代码实体 &#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/as604049322 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 欢迎讨论&#xff01; &#x1f4e2;本文链接&#xff1a;https://xxmdmst.blog.csdn.n…

Chapter3 P-N Junction

3-2 热平衡状态 电流只在一个方向很容易通过&#xff0c;正方向很容易通过电流&#xff0c;负方向很不容易 正电压加在Ptype上才会有电流 就会产生如图b的现象 electron 一定要从high concentration移动到low concentration 所以两个的移动方向如图所示 靠近junction附近&…

C#中window窗体和控件

C#中window窗体和控件 布局与事件–界面的基本问题 布局 就是拉动窗体的时候&#xff0c;按钮也在跟着变动。 事件 //简单的计算器 using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; namespa…

Web API事件高级部分

1、注册事件&#xff08;2种方式&#xff09; 给元素添加事件&#xff0c;称为 注册事件 或者 绑定事件 注册事件有两种方式&#xff1a;传统方式 和 监听注册方式 传统注册方式&#xff1a; 利用on开头的事件 onclick<button οnclick"alert(hi~)"></b…

供应化学试剂mPEG-Biotin,甲氧基-聚乙二醇-生物素

一&#xff1a;产品描述 1、名称 英文&#xff1a;mPEG-Biotin 中文&#xff1a;甲氧基-聚乙二醇-生物素 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a;Biotin PEG Methoxy PEG 4、分子量&#xff1a;可定制1k、2k、3.4k、10k、20k、5k 5、质量控制&#xff1a;95…

shell脚本四剑客--sed的应用

sed的介绍 sed是Linux下一款功能强大的非交互流式文本编辑器&#xff0c;可以对文本文件进行增、删、改、查等操作&#xff0c;支持按行、按字段、按正则匹配文本内容&#xff0c;灵活方便&#xff0c;特别适合于大文件的编辑 sed在处理文本时是逐行读取文件内容&#xff0c;…

TCP协议中的几个核心特性

目录 引言 TCP协议 &#x1f351;TCP 与 UDP 的 区别 &#x1f351;TCP客户端和服务器建立连接的三次握手 &#x1f351;TCP客户端和服务器断开连接的四次挥手 &#x1f351;滑动窗口 &#x1f351;流量控制 &#x1f351;拥塞控制 引言 还记得那个经典的图吗&#x…

TCP最大连接数调优

文章目录1、单机最大TCP连接数1.1、如何标识一个TCP连接1.2、client最大tcp连接数1.3、server最大tcp连接数1.3.1、理论连接数1.3.2、实际连接数1.4、单台服务器支撑的最大TCP并发连接数1.4.1、进程限制句柄限制查看进程句柄数限制临时修改重启后失效的修改&#xff08;不过我在…

IIC 通信协议 (二)

目录 引言 子模块设计 思路 单字节 IIC 发送模块 思路 Verilog 源码 多字节发送控制模块 思路 Verilog 源码 仿真 思路 test bench 仿真结果 参考声明 引言 本篇博文承接前文&#xff0c;继续做 IIC 通信协议 FPGA实现相关的内容。用Verilog 编写一个 IIC 通信控…