【MySQL】(基础篇十五) —— 增删改数据

2024-06-21 05:12

本文主要是介绍【MySQL】(基础篇十五) —— 增删改数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

增删改数据

本文介绍如何利用SQL的INSERT语句将数据插入表中。以及如何利用UPDATE和DELETE语句进一步操纵表数据。

数据插入

INSERT是用来插入(或添加)行到数据库表的。插入可以用几种方式使用

  • 插入完整的行;
  • 插入行的一部分;
  • 插入多行;
  • 插入某些查询的结果。

插入完整的行

插入完整行到数据表中是INSERT最常见的用法,它要求指定表名和被插入行的值

【示例】插入一个新员工信息到employees表中

INSERT INTO employees
VALUES(NULL,'Joe','gearless','123@123.com','123456','IT_PROG',10000,NULL,100,60,NOW());

插入成功之后,查询一下新员工的信息

SELECT * 
FROM employees
WHERE last_name = 'gearless';

运行结果:

在这里插入图片描述

这种语法很简单,但并不安全,应该尽量避免使用。上面的SQL语句高度依赖于表中列的定义次序,并且还依赖于其次序容易获得的信息。即使可得到这种次序信息,也不能保证下一次表结构变动后各个列保持完全相同的次序。因此,编写依赖于特定列次序的SQL语句是很不安全的。

编写INSERT语句的更安全(不过更烦琐)的方法如下:

INSERT INTO employees(employee_id,first_name,last_name,email,phone_number,job_id,salary,commission_pct,manager_id,department_id,hiredate)
VALUES(NULL,'Joe','gearless','123@123.com','123456','IT_PROG',10000,NULL,100,60,NOW()
);

子完成与前一个INSERT语句完全相同的工作,但在表名后的括号里明确地给出了列名。在插入行时,MySQL将用VALUES列表中的相应值填入列表中的对应项。VALUES中的第一个值对应于第一个指定的列名。第二个值对应于第二个列名,如此等等。这样的话,即使不提供全部的字段或者字段顺序和表设计时不同也不会出问题。

一般不要使用没有明确给出列的列表的INSERT语句。使用列的列表能使SQL代码继续发挥作用,即使表结构发生了变化。

省略列: 如果表的定义允许,则可以在INSERT操作中省略某些列。省略的列必须满足以下某个条件:

  • 该列定义为允许NULL值(无值或空值)。
  • 在表定义中给出默认值。这表示如果不给出值,将使用默认值。
  • 如果对表中不允许NULL值且没有默认值的列不给出值,则MySQL将产生一条错误消息,并且相应的行插入不成功。

**优先级:**数据库经常被多个客户访问,对处理什么请求以及用什么次序处理进行管理是MySQL的任务INSERT操作可能很耗时(特别是有很多索引需要更新时),而且它可能降低等待处理的SELECT语句的性能。

如果数据检索是最重要的(通常是这样),则你可以通过在INSERT和INTO之间添加关键字LOW_PRIORITY,指示MySQL降低INSERT语句的优先级。

插入多行数据

可以使用多个INSERT语句,每个INSERT语句之间用分号隔开

如果插入的多个数据结构相同的话,可以只使用一个INSERT语句,然后使用多个VALUES语句,每个VALUES之间用逗号隔开

【示例】插入多个数据到employees表中

INSERT INTO employees(employee_id,first_name,last_name,email,phone_number,job_id,salary,commission_pct,manager_id,department_id,hiredate)
VALUES(NULL,'Joe','gearless','123@123.com','123456','IT_PROG',10000,NULL,100,60,NOW()
),
(   'david','lucy','123@123.com','123456','IT_PROG',10000,NULL,100,60,NOW());

插入检索数据

INSERT一般用来给表插入一个指定列值的行。但是,INSERT还存在另一种形式,可以利用它将一条SELECT语句的结果插入表中。这就是所谓的INSERT SELECT,顾名思义,它是由一条INSERT语句和一条SELECT语句组成的。

假如你想从另一表中合并客户列表到你的customers表。不需要每次读取一行,然后再将它用INSERT插入

【示例】从旧员工表中查找数据插入到新员工表中(我还没有准备的数据,只是感受一下这个操作)

INSERT INTO new_employees(employee_id,first_name,last_name,email,phone_number,job_id,salary,commission_pct,manager_id,department_id,hiredate)
SELECT employee_id,first_name,last_name,email,phone_number,job_id,salary,commission_pct,manager_id,department_id,hiredate
FROM old_employees;

更新数据

为了更新(修改)表中的数据,可使用UPDATE语句。可采用两种方式使用UPDATE:

  • 更新表中特定行;
  • 更新表中所有行。

在使用UPDATE时一定要注意细心。因为稍不注意,就会更新表中所有行,要注意WHERE语句的使用。

UPDATE语句非常容易使用,甚至可以说是太容易使用了。基本的UPDATE语句由3部分组成,分别是:

  • 要更新的表;
  • 列名和它们的新值;
  • 确定要更新行的过滤条件。

UPDATE语句总是以要更新的表的名字开始。SET命令用来将新值赋给被更新的列。

【示例】更改employeees表用id为110的用户邮箱为123@123.com

UPDATE employees
SET email = '123@123.com'
WHERE employee_id = 110;

查询修改结果:

SELECT *
FROM employees
WHERE employee_id = 110;

运行结果:

在这里插入图片描述

如果要更新多个列的话,只用一个SET即可,后面的多个列之间用逗号隔开(最后一列之后不用逗号)

【示例】更改employeees表用id为110的用户邮箱为123@123.com,salary改为10000

UPDATE employees
SET email = '123@123.com',salary = 10000
WHERE employee_id = 110;

删除数据

为了从一个表中删除(去掉)数据,使用DELETE语句。可以两种方式使用DELETE:

  • 从表中删除特定的行;
  • 从表中删除所有行。

前面说过,UPDATE非常容易使用,而DELETE更容易使用。

【示例】删除employees表中employee_id为190的信息

DELETE FROM employees
WHERE employee_id = 190;

删除之后再次查询:

SELECT * 
FROM employees
WHERE employee_id = 190;

运行结果:

在这里插入图片描述

DELETE不需要列名或通配符。DELETE删除整行而不是删除列。为了删除指定的列,请使用UPDATE语句。

更快的删除: 如果想从表中删除所有行,不要使用DELETE。可使用TRUNCATE TABLE语句,它完成相同的工作,但速度更快(TRUNCATE实际是删除原来的表并重新创建一个表,而不是逐行删除表中的数据)。

更新和删除指导

下面是许多SQL程序员使用UPDATE或DELETE时所遵循的习惯。

  • 除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句。
  • 保证每个表都有主键,尽可能像WHERE子句那样使用它(可以指定各主键、多个值或值的范围)。
  • 在对UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进行测试,保证它过滤的是正确的记录,以防编写的WHERE子句不正确。
  • 使用强制实施引用完整性的数据库,这样MySQL将不允许删除具有与其他表相关联的数据的行。

MySQL没有撤销(undo)按钮。应该非常小心地使用UPDATE和DELETE,否则你会发现自己更新或删除了错误的数据。

这篇关于【MySQL】(基础篇十五) —— 增删改数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080294

相关文章

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

MySQL错误代码2058和2059的解决办法

《MySQL错误代码2058和2059的解决办法》:本文主要介绍MySQL错误代码2058和2059的解决办法,2058和2059的错误码核心都是你用的客户端工具和mysql版本的密码插件不匹配,... 目录1. 前置理解2.报错现象3.解决办法(敲重点!!!)1. php前置理解2058和2059的错误

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ