DML之向表中添加数据 [MySQL][数据库]

DML之向表中添加数据

我们要向表中添加数据,那么首先我们就要先创建一个表

CREATE TABLE IF NOT EXISTS emp1(
    id INT,
    `name` VATCHAR(15);
    hire_date DATE;
    salary DOUBLE(10,2);
);

关于向表中添加数据我们有两种方式

方式一 ----> 一条一条的添加数据

这里我们通过举例的方式来说明如何一条一条的添加数据

INSERT INTO emp1
VALUES(1,'tom','2000-12-21',3400);
  • 这里就是向emp1表中添加了一条记录,添加的数据就是VALUES后面的()中的内容
注意1: 这里我们在emp1后面并没有加括号(),那么这个时候就是默认按照创建表的时候的字段顺序添加数据,那么VALUES后面的括号中的内容必须按照我们表中声明的字段顺序添加,就比如这个例子中1就是赋给了id,'tom’就赋给了name,'2000-12-21’就赋给了hire_date,3400就赋给了salary
注意2: 上面这种添加数据的方式中,很容易出现错误,比如说我们的VALUES后面的括号()中的内容没有和表中添加的字段顺序相匹配,这个时候对于没有匹配的内容,我们会先尝试进行隐式转换,如果转换成功,则也可以赋值成功,如果默认转换失败,这个时候就会执行出错
  • eg:
INSERT INTO emp1
VALUES(2,3400,'2000-12-21','jerry');
  • 这个时候VALUES中的括号中的3400不和我们表中的第二个字段匹配,第二个字段是VARCHAR类型的,那么我们就要将整形的3400转换为VARCHAR类型的数据,然后就添加到表中了, 但是VALUES后面括号中的’jerry’也不和我们的表中的第四个字段匹配,这个时候我们显然不可以将’jerry’转换成为DOUBLE类型的数据,所以这个时候就会执行出错,也就是添加失败

所以对于上面的这种形式,我们提出了一个进阶版,我们可以指明要进行添加的字段:

我们举例说明这种形式如何使用:

INSERT INTO emp1(id,hire_date,salary,`name`)
VALUES(2,'1999-09-09',4000,'jerry');
  • 这个时候我们在INSERT INTO 表名 后面加了一个括号,这个括号中就是我们要添加数据的字段,我们只要根据这个括号中的字段的顺序对应输入数据就可以
  • 我们在实际编程中一般都是使用这种方式指明要添加数据的字段

注意:在我们指明了添加数据的字段之后,不添加数据的字段默认赋值为null

对于方式一:我们其实还可以同时添加多条数据

这里我们举例说明如何同时添加多条数据

INSERT INTO emp1(id,`name`,salary)
VALUES
(4,'jim',5000),
(5,'喵喵',5500);
  • VALUES后面的多条记录之间使用逗号隔开

总结:如果我们要往表中添加多条数据,这个时候我们可以选择执行多个INSERT INTO语句,每个INSERT INTO语句添加一条记录,也可以使用一个INSERT INTO语句同时添加多条数据,我们推荐一条语句同时添加多条数据,因为一条INSERT INTO语句同时添加多条数据的效率要比多条语句,每条语句添加一条数据效率高

方式二 ----> 将查询的结果(可以是多条)插入到表中

  • 注意: 我们以查询的方式将结果插入到表中的时候一定要注意查询到的数据的数据类型和长度一定要和目标字段的类型和长度匹配

这里我们通过举例来理解如何将查询的结果插入到表中

INSERT INTO emp1(id,`name`,salary,hire_date)
#这里将values改为查询语句
SELECT employees_id,last_name,salary,hire_date
FROM employees
WHERE department_id IN(60,70);
  • 上面SELECT查询的字段一定要和INSERT INTO 表名后面的括号中的字段一一对应,否则就可能因为数据类型不对应而添加失败 (其实也就是这里要和使用VALUES一样,都是要一一对应)

注意: 我们的emp1表中的字段的长度不能小于我们从employees表中查询的字段长度,如果查询的employees表中的字段长度大于emp1表中对应的目标字段的长度,这个时候就会有数据添加不成功的风险 ----> 如果我们的emp1表中的name字段声明为VARCHAR(15),而我们的employees表中的last_name字段声明为VARCHAR(30),并且我们查询的部门id(也就是department_id)为60,70的记录中有的记录的last_name字段长度>15,这个时候添加就会出错,就会显示执行失败,因为这个时候我们创建的emp1表装不下,对应的name字段的最大长度不够,但是如果last_name字段声明为VARCHAR(30),但是实际employees表中的所有记录中last_name字段的实际长度都<=15,那么这个时候不会报错,会添加成功

补充:

  1. 有的人将VALUES写成了VALUE,会发现程序依然会正常执行,其实这里的VALUES和VALUE是等价的,但是VALUES是标准写法,所以我们推荐使用VLAUES

  2. 为了培养良好的习惯,我们推荐将字符和日期类型数据包含在单引号(’ ')中

猜你喜欢

转载自blog.csdn.net/m0_57001006/article/details/123539786