实验一 SQL练习1
一、实验目的
1.掌握基本表的定义;
2.掌握插入数据、修改数据和删除数据语句的常用形式。
二、实验学时
2学时
三、实验内容
1.新建一个数据库,数据库名字以自己的姓名命名,并有以下要求:
2.根据以上要求,用建表语句定义所需的数据表(暂时不定义完整性规则)。
3.用数据插入语句录入以下数据:
4.录入以下数据:
5.完成以下操作:
⑴ 将编号为zy2022005的项目的人工费和结算金额增加200元。
⑵ 删除已经结算但未入账的项目。
⑶ 撤消上述两个操作。
四、实验报告
提交实验内容中用SQL语句完成的题目的SQL语句文档及相应的执行结果。
PS:因为这是本人前期自己动手做的代码,实验一这里表的建立时,采取的是英文命名,但是最后我都改为了中文命名(后期中文命名比较方便),如果不嫌麻烦可以直接去实验二看我的中文命名(但本人觉得这样也不算麻烦,毕竟这是属于我们自己摸索的经过,对取得高分不会有什么弊端),实验一就算是马马虎虎地完成了。
- 根据要求在个人电脑中安装好相应环境后,打开如下:
mysql -u root -p
打开MySQL后,查看当前MySQL中的数据库列表:
mysql> show databases
-> ;
-
新建一个数据库,数据库名字以自己的姓名命名:
mysql> CREATE DATABASE liwensen
-> ;
- 根据以上要求,用建表语句定义所需的数据表(暂时不定义完整性规则)。
创建基础表:
(1)、创建单位表(Unit_table):
CREATE TABLE Unit_table
(Unit_code CHAR(20) PRIMARY KEY,
Unit_name CHAR(20)
);
(2)、创建油水井表(Oilwell_table):
CREATE TABLE Oilwell_table
(Well_no CHAR(20) PRIMARY KEY,
Well_sex CHAR(20),
Unit_code CHAR(20)
);
(3)、创建材料表(Material_table):
CREATE TABLE Material_table
(Mate_code CHAR(20) PRIMARY KEY,
Mate_name CHAR(20),
Measure_unit CHAR(5),
Price FLOAT(5)
);
创建工程项目表(Project_table):
CREATE TABLE Project_table
(Pro_no CHAR(20) PRIMARY KEY,
Pro_unit CHAR(20),
Well_no CHAR(20),
Pro_Price FLOAT(10),
Pro_Peo CHAR(10),
Pro_date DATE,
Pro_begin DATE,
Pro_end DATE,
Pro_con CHAR(20),
Pro_con_con CHAR(30),
Mata_exp FLOAT(10),
Mata_exp1 FLOAT(10),
Mata_exp2 FLOAT(10),
Mata_exp3 FLOAT(10),
Peo_exp FLOAT(10),
Equ_exp FLOAT(10),
Oth_exp FLOAT(10),
All_exp FLOAT(10),
Exp_Peo CHAR(10),
Exp_data DATE
);
3.用数据插入语句录入以下数据:
单位表:
INSERT INTO Unit_table VALUES('1122','采油厂');
INSERT INTO Unit_table VALUES('112201','采油一矿');
INSERT INTO Unit_table VALUES('112202','采油二矿');
INSERT INTO Unit_table VALUES('112201001','采油一矿一队');
INSERT INTO Unit_table VALUES('112201002','采油一矿二队');
INSERT INTO Unit_table VALUES('112201003','采油一矿三队');
INSERT INTO Unit_table VALUES('112202001','采油二矿一队');
INSERT INTO Unit_table VALUES('112202002','采油二矿二队');
油水井表:
INSERT INTO Oilwell_table VALUES(' y001','油井', '112201001');
INSERT INTO Oilwell_table VALUES(' y002','油井', '112201001');
INSERT INTO Oilwell_table VALUES(' y003','油井', '112201002');
INSERT INTO Oilwell_table VALUES(' s001','水井', '112201002');
INSERT INTO Oilwell_table VALUES(' y004','油井', '112201003');
INSERT INTO Oilwell_table VALUES(' s002','水井', '112202001');
INSERT INTO Oilwell_table VALUES(' s003','水井', '112202001');
INSERT INTO Oilwell_table VALUES(' y005','油井', '112202002');
材料表:
INSERT INTO Material_table VALUES(' wm001','材料一', '吨', '10');
INSERT INTO Material_table VALUES(' wm002','材料二', '米', '10');
INSERT INTO Material_table VALUES(' wm003','材料三', '桶', '10');
INSERT INTO Material_table VALUES(' wm004','材料四', '袋', '10');
4.录入以下数据:
某作业项目单据号 zy2022001
INSERT INTO Project_table VALUES('zy2022001',
'112201001',
'y001',
'10000.00',
'张三',
'2022-5-1',
'2022-5-4',
'2022-5-25',
'作业公司作业一队',
'堵漏',
'7000.00',
'2000.00',
'2000.00',
'2000.00',
'1000.00',
'2500.00',
'1000.00',
'1400.00',
'11900.00',
'李四',
'2022-5-26',
'11900.00',
'王五',
'2022-5-28');
在录入时,发现建表时少建了四个列,为:
解决办法:
DROP TABLE Project_table CASCADE;
接着重新建表:
CREATE TABLE Project_table
(Pro_no CHAR(20) PRIMARY KEY,
Pro_unit CHAR(20),
Well_no CHAR(20),
Pro_Price FLOAT(10),
Pro_Peo CHAR(10),
Pro_date DATE,
Pro_begin DATE,
Pro_end DATE,
Pro_con CHAR(20),
Pro_con_con CHAR(30),
Mata_exp FLOAT(10),
Mata_exp1 FLOAT(10),
Mata_exp2 FLOAT(10),
Mata_exp3 FLOAT(10),
Mata_exp4 FLOAT(10),
Peo_exp FLOAT(10),
Equ_exp FLOAT(10),
Oth_exp FLOAT(10),
All_exp FLOAT(10),
All_exp_peo CHAR(10),
All_exp_dete DATE,
All_exp_in FLOAT(10),
Exp_Peo CHAR(10),
Exp_data DATE
);
随后再接着录入数据:
某作业项目单据号 zy2022002
INSERT INTO Project_table VALUES('zy2022002',
'112201002',
' y003',
'11000.00',
'张三',
'2022-5-1',
'2022-5-4',
'2022-5-23',
'作业公司作业二队',
'检泵',
'6000.00',
'2000.00',
'2000.00',
'2000.00',
NULL,
'1500.00',
'1000.00',
'2400.00',
'10900.00',
'李四',
'2022-5-26',
'11900.00',
'王五',
'2022-5-28');
某作业项目单据号 zy2022003
INSERT INTO Project_table VALUES('zy2022003',
'112201002',
' s001',
'10500.00',
'张三',
'2022-5-1',
'2022-5-6',
'2022-5-23',
'作业公司作业二队',
'调剖',
'6500.00',
'2000.00',
'2000.00',
'2500.00',
NULL,
'2000.00',
'500.00',
'1400.00',
'10400.00',
'李四',
'2022-5-26',
'10400.00',
'王五',
'2022-5-28');
某作业项目单据号 zy2022004
INSERT INTO Project_table VALUES('zy2022004',
'112202001',
' s002',
'12000.00',
'张三',
'2022-5-1',
'2022-5-4',
'2022-5-24',
'作业公司作业三队',
'解堵',
'6000.00',
'2000.00',
'2000.00',
NULL,
'2000.00',
'2000.00',
'1000.00',
'1600.00',
'10600.00',
'李四',
'2022-5-26',
'10600.00',
'赵六',
'2022-5-28');
某作业项目单据号 zy2022005
INSERT INTO Project_table VALUES('zy2022005',
'112202002',
' y005',
'12000.00',
'张三',
'2022-5-1',
'2022-5-4',
'2022-5-28',
'作业公司作业三队',
'防砂',
'7000.00',
'2000.00',
'2000.00',
NULL,
'3000.00',
'1000.00',
'2000.00',
'1300.00',
'11300.00',
'李四',
'2022-6-1',
NULL,
NULL,
NULL);
5.完成以下操作:
⑴ 将编号为zy2022005的项目的人工费和结算金额增加200元。
UPDATE Project_table
SET Peo_exp=Peo_exp+200
WHERE Pro_no='zy2022005';
UPDATE Project_table
SET All_exp=All_exp+200
WHERE Pro_no='zy2022005';
⑵ 删除已经结算但未入账的项目。
DELETE
FROM Project_table
WHERE ALL_exp_in is NULL;
⑶ 撤消上述两个操作。
BEGIN TRANSACTION
DELETE
FROM Project_table
WHERE ALL_exp_in is NULL;
ROLLBACK TRANSACTION;
BEGIN TRANSACTION
UPDATE Project_table
SET All_exp=All_exp+200
WHERE Pro_no='zy2022005';
ROLLBACK TRANSACTION;