9.增删改操作

news2024/9/30 19:34:10

目录

一、插入操作

1、为表的所有字段插入数据

2、为表的指定字段插入数据

3、同时插入多条记录

4、将查询结果插入表中:

二、更新操作

三、删除操作

四、练习题


一、插入操作

在使用数据库之前,数据库中必须要有数据,MYSQL中使INSERT语向数据库表中插入新的数据记录。可以插入的方式有:插入完整的记录、插入记录的一部分、 插入多条记录插入另一个查询的结果,下面将分别介绍这些内容。

注意:

首先要use db进入目标数据库中。

其次要确保数据库中有要操作的表。

1、为表的所有字段插入数据

使用基本的 INSERT 语句插入数据,要求指定表名称和插入到新记录中的值。

基本语法格式为:

INSERT INTO table_name (column list) VALUES (value list);

table_name指定要插入数据的表名,column list指定要插入数据的那些列 value list指定每个列应对应插入的数据。

注意,使用该语句时字段列和数据值的数量必须相同。

本章将使用样例表person,创建语句如下:

create table person 
( 
id int unsigned not null auto_increment, 
name char(40) not null default '', 
age int not null default 0, 
info char(50) null, 
primary key (id) 
); 

向表中所有字段插入值的方法有两种:一种是指定所有字段名,另一种是完全不指定字段名。

举例1:

在person表中,插入一条新记录,id值为1,name值为Green,age值为21,info值为 Lawyer,

SQL语句如下:

执行插入操作之前,使用SELECT语句查看表中的数据:

select * from person;

结果显示当前表为空,没有数据,接下来执行插入操作:

insert into person (id ,name, age , info)
values (1,'Green', 21, 'Lawyer'); 

语句执行完毕,查看执行结果:

select * from person;

在插入数据时,指定了person表的所有字段,因此将为每一个字段插入新的值。 INSERT语句后面的列名称顺序可以不是person表定义时的顺序。 即插入数据时,不需要按照表定义的顺序插入,只要保证值的顺序与列字段的顺序相同就可以。

举例2:在person表中,插入一条新记录,id值为2,name值为Suse,age值为22, info值为dancer,

SQL语句如下:

insert into  person (age ,name, id , info) 
values (22, 'Suse', 2, 'dancer'); 

语句执行完毕,查看执行结果:

select * from person;

SELECT * FROM person;

由结果可以看到,INSERT语句成功插入了一条记录。使用INSERT插入数据时, 允许列名称列表 column list 为空,此时,值列表中需要为表的每一个字段指定值, 并且值的顺序必须和数据表中字段定义时的顺序相同。

举例:

在person表中,插入一条新记录,id值为3,name值为Mary,age值为24,info值为Musician,

SQL语句如下:

insert into person
values (3,'Mary', 24, 'Musician');

语句执行完毕,查看执行结果:

select * from person;

可以看到插入记录成功。数据库中增加了一条 id 为3的记录,其他字段值为指定的插入值。

本例的INSERT语句中没有指定插入列表,只有一个值列表。 在这种情况下,值列表为每一个字段列指定插入值,并且这些值的顺序必须和 person表中字段定义的顺序相同。

虽然使用INSERT 插入数据时可以忽略插入数据的列名称,但是值如果不包含列名称,

那VALUES 关键字后面的值不仅要求完整而且顺序必须和表定义时列的顺序相同。

如果表的结构被修改,对列进行增加、删除或者位置改变操作,这些操作将使得用这种方式插入数据时的顺序也同时改变。如果指定列名称,则不会受到表结构改变的影响。

2、为表的指定字段插入数据

为表的指定字段插入数据,就是在INSERT语句中只向部分字段中插入值,

而其他字段的值为表定义时的默认值。

举例:在person表中,插入一条新记录,name值为Willam,age值为20,info值为sports man,

SQL语句如下:

insert into person (name,age,info)
values ('Willam', 20, 'sports man');

提示信息表示插入一条记录成功。使用SELECT查询表中的记录,查询结果如下:

select * from person;

可以看到插入记录成功。如查询结果显示,该 id 字段自动添加了一个整数值 4。

在这里id 字段为表的主键,不能为空,系统会自动为该字段插入自增的序列值。

在插入记录时,如果某些字段没有指定插入值,MySQL将插入该字段定义时的默认值。

下面例子说明在没有指定列字段时,插入默认值。

举例:在person表中,插入一条新记录,name值为laura,age值为25,SQL语句如下:

insert into person (name,age)
values ('Laura', 25);

语句执行完毕,查看执行结果,

select * from person;

可以看到,在本例插入语句中,没有指定 info 字段值,查询结果显示,info字段在定义时默认为NULL,因此系统自动为该字段插入空值。

3、同时插入多条记录

INSERT语句可以同时向数据表中插入多条记录,插入时指定多个值列表,

每个值列表之间用逗号分隔开,基本语法格式如下:

INSERT INTO table_name (column list) VALUES (value list1),(value list2),...,(value listn);

value listl,value list2,...value listn;表示第1,2,... n个插入记录的字段的值列表.

举例:在person表中,在name、age和info字段指定插入值,同时插入3条新记录,

SQL语句如下:

insert into person (name,age,info)
values ('Evans',27, 'secretary'),
('Dale',22, 'cook'),
('Edison',28, 'singer');

语句执行完毕,查看执行结果:

select * from person;

由结果可以看到,INSERT语句执行后,person 表中添加了3条记录,其name和age字段分别为指定的值,id字段为MySQL添加的默认的自增值。 使用INSERT同时插入多条记录时,MySQL会返回一些在执行单行插入时没有的额外信息, 这些包含数的字符串的意思分别是:

Records:表明插入的记录条数。

Duplicates: 表明插入时被忽略的记录,原因可能是这些记录包含了重复的主键值,

Warnings:表明有问题的数据值,例如发生数据类型转换。

举例:在person表中,不指定插入列表,同时插入2条新记录,SQL语句如下:

INSERT INTO person 
VALUES (9,'Harry',21, 'magician'), 
(NULL,'Harriet',19, 'pianist');

语句执行结果如下:

Query OK, 2 rows affected (0.01 sec)

Records: 2 Duplicates: 0 Warnings: 0

语句执行完毕,查看执行结果:

select * from person;

由结果可以看到,INSERT 语句执行后,person 表中添加了2条记录,

与前面介绍单个INSERT语法不同,person 表名后面没有指定插入字段列表,因此,VALUES 关键字后面的多个值列表,都要为每一条记录的每一个字段列指定插入值, 并且这些值的顺序必须和 person表中字段定义的顺序相同,带有AUTO_INCREMENT属性

的id 字段插入NULL值,系统会自动为该字段插入唯一的自增号。

4、将查询结果插入表中:

INSERT语句用来给数据表插入记录时指定插入记录的列值。INSERT还可以将SELECT语句查询的结果插入到表中,如果想要从另外一个表中合并个人信息到 person 表,不需要把每一条记录的值一个一个输入,只需要使用一条INSERT语和一条SELECT语句组成的组合语句,即可快速地从一个或多个表中向一个表中插入多个行。基本语法格式如下:

INSERT INTO table_name1 (column list1)

cSELECT (olumn list2)   FROM table_name2  WHERE condition

table_name1指定待插入数据的表;column listl 指定待插入表中要插入数据的哪些列

table_name2指定插入数据是从哪个表中查询出来的:

column list2指定数据来源表的查询列该列表必须和column list1列表中的字段个数相同,数据类型相同:

condition指定SELECT语句的查询条件。

举例:

从person_old表中查询所有的记录,并将其插入到person表中。

首先,创建一个名为person_old的数据表,其表结构与person结构相同,SQL语句如下:

CREATE TABLE person_old
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name CHAR(40) NOT NULL DEFAULT '',
age INT NOT NULL DEFAULT 0,
info CHAR(50) NULL,
PRIMARY KEY (id)
);

向person_old表中添加两条记录:

insert into person_old
values (11,'Harry',20, 'student'), 
(12,'Beckham',31, 'police');

现在peson_old表中现在有两条记录。接下来将person_old表中所有的记录插入person表中,SQL语句如下:

insert into person(id, name, age, info)
select id, name, age, info FROM person_old;

查看执行结果:

select * from person;

由结果可以看到,INSERT语句执行后 person表中多了两条记录 这两条记录和 person_old表中的记录完全相同,数据转移成功。这里的 id 字段为自增的主键,在插入的时候要保证该字段值的唯一性,如果不能确定,可以插入的时候忽略该字段,只插入其他字段的值。这个例子中使用的person_old表和 person 表的定义相同。事实上,MySOL不关心SELECT 返回的列名,它根据列的位置进行插入,SELECT的第1列对应待插入表的第1列, 第2列对应待插入表的第2列,等等。即使不同结果的表之间也可以方便地转移数据。

二、更新操作

更新操作:

表中有数据之后,接下来可以对数据进行更新操作,MySQL中使用UPDATE语句更新表中的记录,可以更新特定的行或者同时更新所有的行。基本语法结构如下:

UPDATE table_name

SET column_name1 = value1,column_name2=value2......column_namen=valuen

WHERE (condition);

column_name1,column_name2......,column_namen 为指定更新的字段的名称;

valuel.value2......valuen 为相对应的指定字段的更新值;

condition 指定更新的记录需要满足的条件更新多个列时,每个“列-值”对之间用逗号隔开,最后一列之后不需要逗号。

举例:在person表中,更新id值为11的记录,将age字段值改为15,将name字段值改为LiMing,

SQL语句如下:

update person 
set age = 15, name='LiMing'
where id = 11;

更新操作执行前可以使用SELECT语句查看当前的数据:

select * from person where id=11; 

由结果可以看到更新之前,id等于11的记录的name字段值为harry,age字段值为20, 更新之后可以看到id等于11的记录中的name和age字段的值已经成功被修改为指定值。

保证UPDATE以WHERE子句结束,通过WHERE子指定被更新的记录所需要满足的条件,

如果忽略WHERE子句,MySOL将更新表中所有的行。

举例:在person表中,更新age值为19~22的记录,将info字段值都改为student,

SQL语句如下:

更新操作执行前可以使用SELECT语句查看当前的数据:

select * from person where age between 19 and 22;
update person 
set info='student'
where age between 19 and 22;

语句执行完毕,查看执行结果:

select * from person where age between 19 and 22;

由结果可以看到,UPDATE 执行后,成功将表中符合条件的6条记录的info字段值都改为student。

三、删除操作

删除数据:

从数据表中删除数据使用DELETE语句

DELETE语允许WHERE子指定删除条件DELETE语句基本语法格式如下:

DELETE FROM table_name [WHERE <condition>];

table_name指定要执行删除操作的表;

[WHERE<condition>] 为可选参数,指定删除条件,

如果没有WHERE子句,DELETE语句将删除表中的所有记录。

举例:在person表中,删除id等于11的记录,SQL语句如下:

执行删除操作前,使用SELECT语句查看当前id=11的记录:

select * from person where id=11;

可以看到,现在表中有id=11的记录,下面使用DELETE语句删除该记录,语句执行结果如下:

delete from person where id = 11;

语句执行完毕,查看执行结果:

select * from person where id=11;

查询结果为空,说明删除操作成功

举例2:在person表中,使用DELETE语句同时删除多条记录,在前面UPDATE语句中将 age字段值在19~22之间的记录的info字段值修改为student,在这里删除这些记录,

SQL语句如下:

执行删除操作前,使用SELECT语句查看当前的数据:

select * from person where age between 19 and 22;

可以看到,这些age字段值在19~22之间的记录存在表中。下面使用DELETE删除这些

记录:

delete from person where age between 19 and 22;

语句执行完毕,查看执行结果:

select * from person where age between 19 and 22;

查询结果为空,删除多条记录成功。

举例3:删除person表中所有记录,SQL语句如下:

执行删除操作前,使用SELECT语句查看当前的数据:

select * from person;

结果显示person表中还有5条记录,执行DELETE语句删除这5条记录:

delete from person;

语句执行完毕,查看执行结果:

select * from person;

查询结果为空,删除表中所有记录成功,现在person表中已经没有任何数据记录。

如果想删除表中的所有记录,还可以使用TRUNCATE TABLE语句,TRUNCATE将直接 删除原来的表并重新创建一个表,其语法结构为TRUNCATE TABLE table_name。

TRUNCATE直接删除表而不是删除记录,因此执行速度比DELETE快。

四、练习题

创建数据表pet,并对表进行插入、更新与删除操作,pet 表结构如表8.3所示。

(1)首先创建数据表pet,使用不同的方法将表8.4中的记录插入到pet表中。

(2)使用UPDATE语将名称为 Fang的狗的主人改为Kevin。

3)将没有主人的宠物的owner 字段值都改为 Duck。

(4)删除已经死亡的宠物记录。

(5)删除所有表中的记录。

use demo1;
drop table pet;
create table pet (
    name varchar(20)  not null comment '宠物名称',
    owner varchar(20) comment '宠物主人',
    species varchar(20) not null comment '种类',
    sex char(1) not null  comment '性别',
    birth year not null comment '出生日期',
    death year comment '死亡日期'
);

insert into pet(name, owner, species, sex, birth, death) values
('Fluffy', 'Harold', 'cat', 'f', '2003', '2010'),
('Claws', 'Gwen', 'cat', 'm', '2004', null),
('Buffy', null, 'dog', 'f', '2009', null),
('Fang', 'Benny', 'dog', 'm', '2000', null),
('Bowser', 'Diane', 'dog', 'm', '2003', '2009'),
('Chirpy', null, 'bird', 'f', '2008', null);

update pet set owner = 'Kevin' where name = 'Fang';

update pet set owner = 'Duck' where owner is null;

delete from pet where death is not null;

delete from pet;

select * from pet;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1261524.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP32-Web-Server编程-HTML 基础

ESP32-Web-Server编程-HTML 基础 概述 HTML(HyperText Markup Language) 是用来描述网页的一种语言。其相关内容存储在前端代码的 .html 文件中。 当浏览器向 web 服务器请求网页时&#xff0c;一个 HTML 文件被发送给浏览器&#xff0c;浏览器解释该文件的内容&#xff0c;…

【重磅】:Spring Initializer 已经不支持Java8,也就是SpringBoot2.x项目初始化

Spring Initializer 已经不支持Java8 问题描述解决方案升级java版本更换IDEA内置的Spring Initializer中 Server URL的镜像地址 问题描述 我们可以看到在IDEA内置的Spring Initializer中 Java版本选择模块已经不支持1.8了&#xff0c;同样的&#xff0c;官网也不再支持了 解决…

YOLOv8 onnx 文件推理多线程加速视频流

运行环境&#xff1a; MacOS&#xff1a;14.0Python 3.9Pytorch2.1onnx 运行时 模型文件&#xff1a; https://wwxd.lanzouu.com/iBqiA1g49pbc 密码:f40v 下载 best.apk后将后缀名修改为 onnx 即可模型在英伟达 T4GPU 使用 coco128 训练了 200 轮如遇下载不了可私信获取 代码…

Ubuntu18.04安装Ipopt-3.12.8流程

本文主要介绍在Ubuntu18.04中安装Ipopt库的流程&#xff0c;及过程报错的解决方法&#xff0c;已经有很多关于Ipopt安装的博客&#xff0c;但经过我的测试&#xff0c;很多都失效了&#xff0c;经过探索&#xff0c;找到可流畅的安装Ipopt的方法&#xff0c;总结成本篇博客。 …

《尚品甄选》:后台系统——权限管理之菜单管理,递归实现树形结构查询(debug一遍)

文章目录 一、表结构设计二、菜单管理接口2.1 查询菜单2.2 添加菜单2.3 修改菜单2.4 删除菜单 三、分配菜单3.1 查询菜单3.2 保存菜单(批量插入) 四、动态菜单五、解决bug 一、表结构设计 菜单管理就是对系统的首页中的左侧菜单进行维护。 一个用户可以担任多个角色&#xff…

解密人工智能:线性回归

导言 人工智能&#xff08;AI&#xff09;已经成为当今科技领域的热门话题&#xff0c;其应用领域涵盖了各个行业。线性回归作为人工智能中的一种关键统计学方法&#xff0c;被广泛应用于预测和决策支持系统中。本文将为您详细介绍线性回归在人工智能中的应用原理与方法&#x…

将用户的session改为分布式共享session

将用户的session改为分布式session 分布式session理解 使用分布式session的原因&#xff1a; 后台服务器是分布式的&#xff08;比如要负载均衡&#xff09;&#xff0c;在A服务器请求的的信息&#xff08;如用户登录信息&#xff09;存在A的session中&#xff0c;B服务器并不…

代码随想录算法训练营 ---第四十八天

第一题&#xff1a; 简介&#xff1a; 注&#xff1a;本题简介是我的思路&#xff0c;题解思路看下方。 动态规划五部曲&#xff1a; 1.确定dp数组的含义 //dp[i]表示 偷到第i家能偷到的最大金额 for(int i2;i<nums.size();i){if(i-3>0)dp[i] max(dp[i-2],dp[i-3])nu…

vue中的keep-alive详解与应用场景

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue-keep-alive 目录 一、Keep-alive 是什么 二、使用场景 三、原理分析 四、案例实现 activa…

NB-IoT BC260Y Open CPU SDK④开发环境搭建

NB-IoT BC260Y Open CPU SDK④开发环境搭建 1、SDK包的介绍2、编程工具3、程序框架1、SDK包的介绍 (1)、SDK包的下载: 链接: (2)、文件目录介绍 文件名描述device启动文件、底层配置文档等doc存放 QuecOpen 项目相关的说明文档osFreeRTOS 相关代码out输出编译 App 和调…

06-学成在线添加课程,包含课程基本信息,营销信息,课程计划信息,师资信息

添加课程 界面原型 第一步: 用户进入课程查询列表,点击添加课程按钮,选择课程类型是直播还是录播,课程类型不同那么授课方式也不同 添加的课程和教学机构是一对一的关系 第二步: 用户选完课程形式后,点击下一步填写课程的基本信息和营销信息(两张表) 用户只要填完课程信息就…

SpringCloud--分布式事务实现

一、分布式事务 首先要明白事务是指数据库中的一组操作&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部不执行&#xff0c;以保持数据的一致性和完整性。在本地事务中&#xff0c;也就是传统的单机事务&#xff0c;必须要满足原子性(Atomicity)、一致性(Consistenc…

错误:FinalShell连接CentOs连接失败

需要说明的是:这个错误不是首次连接发生的,而是多次使用后可能发生的错误 正文: 可能的原因是虚拟机的ip地址发生了变更,原因有以下几点: 最最可能的原因:1.DHCP分配变更&#xff1a; 如果虚拟机使用DHCP来获取IP地址&#xff0c;那么DHCP服务器可能会分配给虚拟机一个新的I…

java设计模式学习之【单例模式】

文章目录 引言单例模式简介定义与用途实现方式&#xff1a;饿汉式懒汉式 UML 使用场景优势与劣势单例模式在spring中的应用饿汉式实现懒汉式实现数据库连接示例代码地址 引言 单例模式是一种常用的设计模式&#xff0c;用于确保在一个程序中一个类只有一个实例&#xff0c;并且…

不小心删除了短信,如何在 Android 上恢复已删除的短信

不小心删除了文字消息在 Android 手机上使用可能会是一种令人痛苦的体验。这些消息可能包含有价值的信息、珍贵的回忆或重要的细节。幸运的是&#xff0c;您可以探索多种方法来恢复这些丢失的消息。在本文中&#xff0c;我们将深入研究可用于检索已删除短信的选项&#xff0c;并…

vue3中readonly和shallowReadonly

readonly: 深度只读数据 获取一个对象 (响应式或纯对象) 或 ref 并返回原始代理的只读代理。 只读代理是深层的&#xff1a;访问的任何嵌套 property 也是只读的。 shallowReadonly 浅只读数据 创建一个代理&#xff0c;使其自身的 property 为只读&#xff0c;但不执行…

WhatsApp API号解封教程(内含图片指引和申诉模板)

WhatsApp API 是专门为中大型企业设置的WhatsApp APP页面&#xff0c;API号并不像WhatsApp个人号和企业号一样可以直接从App Store 或Google Play 下载&#xff0c;而是需要对接官方来连接API。 虽然申请WhatsApp API号的程序和手续比较复杂&#xff0c;但是这个操作对于企业来…

算法通关村第二关—手写链表反转(青铜)

链表反转的三种方式 一、建立虚拟头结点辅助反转 为了方便反转&#xff0c;可以创建一个ans结点&#xff0c;让ans.next head,然后后面的结点一次插入到ans.next 在下图中&#xff0c;对&#xff08;1->2->3->4->5&#xff09;进行反转&#xff0c;可以创建ans&…

easyexcel指定sheet页动态给行列加背景色

easyexcel&#xff0c;有多个sheet页&#xff0c;某些sheet页的行、列动态需要加背景色 import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.write.handler.CellWriteHandler; import com.alibaba.excel.write.m…

Spring Cloud,注册中心,配置中心,原理详解

文章目录 Spring Cloud&#xff0c;注册中心&#xff0c;配置中心&#xff0c;原理详解谈谈我个人对 spring Cloud 的理解 注册中心Eureka&#xff1a;服务搭建小结 Ribbo - 负载均衡1. 负载均衡流程2. 负载均衡策略 nacos注册中心1. 配置集群1. 创建 namespace2. 配置命名空间…