Mysql 数据插入 修改删除

MYSQL基础上机练习题(二) 数据插入、修改、删除

一、实验目的:

  1. 数据插入、修改、删除
  2. 数据表的复制
  3. 字段分列

二、实验内容:

对实验一所展示的表进行数据输入、修改、删除 
以下为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

 

posted @ 2019-04-24 09:50  Pythons!  阅读(525)  评论(0编辑  收藏  举报