MYSQL基础上机练习题(二) 数据插入、修改、删除
一、实验目的:
- 数据插入、修改、删除
- 数据表的复制
- 字段分列
二、实验内容:
对实验一所展示的表进行数据输入、修改、删除
以下为Employees,Departments,Salary表中的内容
Employees表
Departments表
Salary表
三、题目:
1. 按照Departments表的内容插入数据(知识点:数据插入)
2. 按照Employees表的内容插入数据(知识点:数据插入)
3. 修改Employees中修改李丽的DepartmentID为’4’(知识点:数据修改)
4. 创建一个与Employees结构和内容一致的表,名为Employees_Duplicated (知识点:数据表的复制)
5. 对Employees_Duplicated表中的Address字段以空格为间隔符,分列为StreetName(街道名)和RoomName(房号)(知识点:字段分列)
6. 删除Employees_Duplicated表中编号为’000001’的行内容(知识点:删除某行数据)
7. 删除Employees_Duplicated表中Address字段中所有内容(知识点:删除某字段所有数据)
8. 在Salary表中插入Employees表中所有的EmployeesID (知识点:选择性数据插入)
9. 在Salary表中插入InCome和OutCome值(知识点:带存储过程的数据插入)
10. 在Salary中,修改编号为’020018’的InCome值(知识点:带存储过程的数据修改)
###三、代码:
1. 按照Departments表的内容插入数据(知识点:数据插入)
(1)代码方式插入(注意,该表有外键Departments中的DepartmentsID来插入):
INSERT INTO Departments VALUES('1', '财务部', NULL)
- 1
(2)数据比较多的时候建议界面方式插入,插入后:
2. 按照Employees表的内容插入数据(知识点:数据插入)
(1)代码方式插入:
INSERT INTO Employees VALUES('000001', '王林', '大专', '1966-01-23', 1, 8, '中山路 32-1-508', '83355668', '2')
- 1
(2)数据比较多的时候建议界面方式插入,插入后:
3. 修改Employees中修改李丽的DepartmentID为’4’(知识点:数据修改)
UPDATE employees SET DepartmentID = '4' WHERE Name = '李丽'
- 1
4. 创建一个与Employees结构和内容一致的表,名为Employees_Duplicated (知识点:数据表的复制)
CREATE TABLE Employees_duplicated SELECT * FROM Employees
- 1
Employees_duplicated 表结构
Employees_duplicated 数据
(同样,如果仅仅需要复制表的结构,可以用:
CREATE TABLE Employees_duplicated2 LIKE Employees
- 1
使得创建一个新的TABLE和Employees的TABLE有同样的表结构
)
5. 对Employees_Duplicated表中的Address字段以空格为间隔符,分列为StreetName(街道名)和RoomName(房号)(知识点:字段分列)
首先,需要新增两个字段:StreetName和RoomName
ALTER TABLE Employees_duplicated ADD COLUMN RoomNumber VARCHAR(40) COMMENT '房号' AFTER Address
ALTER TABLE Employees_duplicated ADD COLUMN StreetName VARCHAR(40) COMMENT '街名' AFTER Address
- 1
- 2
然后,把根据间隔符提取的字段分别插入到StreetName和RoomNumber两个字段中,其中SUBSTRING_INDEX函数的用法为SUBSTING_INDEX(需要分列的字段,’间隔符’,间隔符前(为正)/后(为负)的第几个的字符串)
UPDATE Employees_duplicated SET RoomNumber = SUBSTRING_INDEX(Address, ' ', -1);
UPDATE Employees_duplicated SET StreetName = SUBSTRING_INDEX(Address, ' ', 1);
- 1
- 2
6. 删除Employees_Duplicated表中编号为’000001’的行内容(知识点:删除某行数据)
DELETE FROM Employees_Duplicated WHERE EmployeeID = '000001'
- 1
7. 删除Employees_Duplicated表中Address字段中所有内容(知识点:删除某字段所有数据)
UPDATE Employees_Duplicated SET Address = ''
- 1
8. 在Salary表中插入Employees表中所有的EmployeesID (知识点:选择性数据插入)
INSERT INTO Salary(EmployeeID) SELECT EmployeeID FROM Employees
- 1
9. 在Salary表中插入InCome和OutCome值(知识点:带存储过程的数据插入)
(1)代码方式插入(注意,该表有外键Departments中的DepartmentsID来插入)
因为ActInCome是通过存储过程来计算的,因此有两种插入方式,结果都一样
INSERT INTO Salary VALUES('000001', 2100.8, 123.09, 0)
- 1
INSERT INTO Salary(EmployeeID, InCome, OutCome) VALUES('000001', 2100.8, 123.09)
- 1
(插入时,插入的字段数必须和表结构一致,多一个数据或少一个数据都会导致发生#1136错误)
情况:在插入数据时可能会遇到这种情况:
原因:
插入时的数据个数与表中的字段个数不一致
解决方法:
检查表中的字段数与代码中所插入的数据字段数是否一致
例如:以下为Salary表中结构
虽然ActInCome中设置了空值,且是根据InCome-OutCome的存储过程得出的结果字段,但代码不能为(以下为错误代码):
INSERT INTO Salary VALUES('000001', 2100.8, 123.09)
1
正确代码应该为:
INSERT INTO Salary VALUES('000001', 2100.8, 123.09, 0)
1
或者定义只插入某几个字段
INSERT INTO Salary(EmployeeID, InCome, OutCome) VALUES('000001', 2100.8, 123.09)
1
P.S:Mysql和SQL SERVER 不一样,SQL SERVER不输入该字段时,可以显示默认值
(2)界面方式插入(刷新后,ActInCome就可以算出来)
10. 在Salary中,修改编号为’020018’的InCome值(知识点:带存储过程的数据修改)
UPDATE Salary SET InCome = 5000 WHERE EmployeeID = '020018'
- 1