MySQL数据库基础 11

news/2024/11/30 13:32:15/

第十一章 数据处理之增删改

  • 1. 插入数据
    • 1.1 实际问题
    • 1.2 方式1:VALUES的方式添加
    • 1.3 方式2:将查询结果插入到表中
  • 2. 更新数据
  • 3. 删除数据
  • 4. MySQL8新特性:计算列

1. 插入数据

1.1 实际问题

在这里插入图片描述
解决方式:使用 INSERT 语句向表中插入数据。

1.2 方式1:VALUES的方式添加

使用这种语法一次只能向表中插入一条数据。
情况1:为表的所有字段按默认顺序插入数据

INSERT INTO 表名
VALUES (value1,value2,....);

值列表中需要为表的每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同。

举例:

INSERT INTO departments
VALUES (70, 'Pub', 100, 1700);
INSERT INTO	departments
VALUES		(100, 'Finance', NULL, NULL);

情况2:为表的指定字段插入数据

INSERT INTO 表名(column1 [, column2,, columnn]) 
VALUES (value1 [,value2,, valuen]);

为表的指定字段插入数据,就是在INSERT语句中只向部分字段中插入值,而其他字段的值为表定义时的默认值。

在 INSERT 子句中随意列出列名,但是一旦列出,VALUES中要插入的value1,…valuen需要与column1,…columnn列一一对应。如果类型不同,将无法插入,并且MySQL会产生错误。

举例:

INSERT INTO departments(department_id, department_name)
VALUES (80, 'IT');

情况3:同时插入多条记录
INSERT语句可以同时向数据表中插入多条记录,插入时指定多个值列表,每个值列表之间用逗号分隔开,基本语法格式如下:

INSERT INTO table_name 
VALUES 
(value1 [,value2,, valuen]),
(value1 [,value2,, valuen]),
……
(value1 [,value2,, valuen]);

或者

INSERT INTO table_name(column1 [, column2,, columnn]) 
VALUES 
(value1 [,value2,, valuen]),
(value1 [,value2,, valuen]),
……
(value1 [,value2,, valuen]);

举例:

mysql> INSERT INTO emp(emp_id,emp_name)-> VALUES (1001,'shkstart'),-> (1002,'atguigu'),-> (1003,'Tom');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

使用INSERT同时插入多条记录时,MySQL会返回一些在执行单行插入时没有的额外信息,这些信息的含义如下:
● Records:表明插入的记录条数。
● Duplicates:表明插入时被忽略的记录,原因可能是这些记录包含了重复的主键值。
● Warnings:表明有问题的数据值,例如发生数据类型转换。

一个同时插入多行记录的INSERT语句等同于多个单行插入的INSERT语句,但是多行的INSERT语句在处理过程中效率更高。因为MySQL执行单条INSERT语句插入多行数据比使用多条INSERT语句快,所以在插入多条记录时最好选择使用单条INSERT语句的方式插入。

1.3 方式2:将查询结果插入到表中

INSERT还可以将SELECT语句查询的结果插入到表中,此时不需要把每一条记录的值一个一个输入,只需要使用一条INSERT语句和一条SELECT语句组成的组合语句即可快速地从一个或多个表中向一个表中插入多行。

基本语法格式如下:

INSERT INTO 目标表名
(tar_column1 [, tar_column2,, tar_columnn])
SELECT
(src_column1 [, src_column2,, src_columnn])
FROM 源表名
[WHERE condition]
  • 在 INSERT 语句中加入子查询。
  • 不必书写 VALUES 子句。
  • 子查询中的值列表应与 INSERT 子句中的列名对应。

举例:

INSERT INTO emp2 
SELECT * 
FROM employees
WHERE department_id = 90;
INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM   employees
WHERE  job_id LIKE '%REP%';

2. 更新数据

在这里插入图片描述

  • 使用 UPDATE 语句更新数据。语法如下:
UPDATE table_name
SET column1=value1, column2=value2,, column=valuen
[WHERE condition]
  • 可以一次更新多条数据。

  • 如果需要回滚数据,需要保证在DML前,进行设置:SET AUTOCOMMIT = FALSE;

  • 使用 WHERE 子句指定需要更新的数据。

UPDATE employees
SET    department_id = 70
WHERE  employee_id = 113;
  • 如果省略 WHERE 子句,则表中的所有数据都将被更新。
UPDATE 	copy_emp
SET    	department_id = 110;
  • 更新中的数据完整性错误
UPDATE employees
SET    department_id = 55
WHERE  department_id = 110;

在这里插入图片描述

3. 删除数据

在这里插入图片描述

  • 使用 DELETE 语句从表中删除数据
    在这里插入图片描述
DELETE FROM table_name [WHERE <condition>];

table_name指定要执行删除操作的表;“[WHERE ]”为可选参数,指定删除条件,如果没有WHERE子句,DELETE语句将删除表中的所有记录。

  • 使用 WHERE 子句删除指定的记录。
DELETE FROM departments
WHERE  department_name = 'Finance';
  • 如果省略 WHERE 子句,则表中的全部数据将被删除
DELETE FROM  copy_emp;
  • 删除中的数据完整性错误
DELETE FROM departments
WHERE       department_id = 60;

在这里插入图片描述

4. MySQL8新特性:计算列

什么叫计算列呢?简单来说就是某一列的值是通过别的列计算得来的。例如,a列值为1、b列值为2,c列不需要手动插入,定义a+b的结果为c的值,那么c就是计算列,是通过别的列计算得来的。

在MySQL 8.0中,CREATE TABLE 和 ALTER TABLE 中都支持增加计算列。下面以CREATE TABLE为例进行讲解。

举例:定义数据表tb1,然后定义字段id、字段a、字段b和字段c,其中字段c为计算列,用于计算a+b的值。
首先创建测试表tb1,语句如下:

CREATE TABLE tb1(
id INT,
a INT,
b INT,
c INT GENERATED ALWAYS AS (a + b) VIRTUAL
);

插入演示数据,语句如下:

INSERT INTO tb1(a,b) VALUES (100,200);

查询数据表tb1中的数据,结果如下:

mysql> SELECT * FROM tb1;
+------+------+------+------+
| id   | a    | b    | c    |
+------+------+------+------+
| NULL |  100 |  200 |  300 |
+------+------+------+------+
1 row in set (0.00 sec)

更新数据中的数据,语句如下:

mysql> UPDATE tb1 SET a = 500;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

http://www.ppmy.cn/news/368564.html

相关文章

64位和32位相比优势是什么(一)

前置知识&#xff1a;程序是如何执行的&#xff1f; 一道常规的面试题&#xff1a;相比 32 位&#xff0c;64 位的优势是什么&#xff1f; 面试官考察这种类型的问题&#xff0c;主要是想看求职者是否有扎实的计算机基础&#xff0c;同时想知道求职者在工作中是否充满好奇&am…

【多线程与高并发】- 锁的机制与底层优化原理

锁的机制与底层优化原理 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 一个有梦有戏的人 怒放吧德德 &#x1f31d;分享学习心得&#xff0c;欢迎指正&#…

64位和32位相比优势是什么(二)

程序的执行过程 当 CPU 执行程序的时候&#xff1a; 1.首先&#xff0c;CPU 读取 PC 指针指向的指令&#xff0c;将它导入指令寄存器。具体来说&#xff0c;完成读取指令这件事情有 3 个步骤&#xff1a; 步骤 1&#xff1a;CPU 的控制单元操作地址总线指定需要访问的内存地…

在QT中使用OPENGL的步聚

OPENGL初始化: 初始化OpenGL函数 : initializeOpenGLFunctions初始化各种flag : glEnable创建各种缓存对象 : VAO&#xff0c;VBO创建并链接shader : QOpenGLShaderProgram::addShaderFromSourceCode QOpenGLShaderProgram::Link启用shader : QOpenGLShaderProgram::bind启用…

当代化工研究杂志当代化工研究杂志社当代化工研究编辑部2022年第22期目录

本刊特稿《当代化工研究》投稿&#xff1a;cnqikantg126.com 正己醇耦合氢氧化钾水解溶出光伏组件中乙烯醋酸乙烯酯 郭蔓;李登新;蒋红博;朱宏艺;高康宁;夏张; 1-4 原料种类和预烧温度对Ba2Ti9O20微波陶瓷烧结特性、相结构、微观形貌以及介电性能的影响 肖亚奇;黎洪天;张…

致敬中国半导体圈儿的“她们”!

林兰英 半导体材料学家。我国半导体科学事业开拓者之一。先后负责研制成我国第一根硅、锑化铟、砷化镓、磷化镓等单晶&#xff0c;为我国微电子和光电子学的发展奠定了基础。开创了我国微重力半导体材料科学研究新领域&#xff0c;并在砷化镓晶体太空生长和性质研究方面取得了世…

中美晶2016营收增但仍亏损,将续推高效光伏技术

硅片厂中美硅晶公布2016年财报&#xff0c;全年合并营收315.99亿元新台币&#xff0c;和去年相比成长11.8%&#xff0c;创下历史新高。 中美晶2016年税后净损15.89亿元新台币&#xff0c;税后每股亏损2.77元新台币。2016年太阳能市场动荡&#xff0c;为造成中美硅晶亏损原因之一…

中美晶结盟华为 推动逆变器商机

台厂中美晶与中国华为签订合作备忘录&#xff0c;将在太阳能光伏逆变器领域进行合作。中美晶将为新的电站安装华为的FusionSolar智慧型光伏电站方案&#xff0c;同时也取得销售代理权&#xff0c;垂直整合中美晶的太阳能方案来共同拓展全球商机。 半导体厂中美晶近年来陆续跨足…