MySQL 必知必会
朱晓峰
前摩根大通银行技术部副总裁、系统架构师
17746 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 36 讲
MySQL 必知必会
15
15
1.0x
00:00/00:00
登录|注册

04 | 增删改查:如何操作表中的数据?

你好,我是朱晓峰。今天,我们来聊一聊如何操作数据表里的数据。
在咱们的超市项目中,我们给用户设计好了一个数据表 demo.goodsmaster,定义好了里面的字段,以及各种约束,如下所示:
mysql> DESCRIBE demo.goodsmaster;
+---------------+--------------+------+-----+---------+--+
| Field | Type | Null | Key | Default |Extra |
+---------------+------------+------+-----+---------+------------+
| itemnumber | int | NO | PRI | NULL |auto_increment |
| barcode | text | NO | | NULL | |
| goodsname | text | NO | | NULL | |
| specification | text | YES | | NULL | |
| unit | text | YES | | NULL | |
| price | decimal(10,2)| NO | | NULL | |
+---------------+------------+------+-----+---------+----------------+
6 rows in set (0.02 sec)
现在,我们需要使用这个表来存取数据。那么,如何对表里面的数据进行操作呢?接下来,我就给你讲讲操作表中的数据的方法,也就是常说的“增删改查”。

添加数据

我们先来看一下添加数据的语法结构:
INSERT INTO 表名 [(字段名 [,字段名] ...)] VALUES (值的列表);
这里方括号“[]”表示里面的内容可选,也就是说,根据 MySQL 的语法要求,写不写都可以。
添加数据分为两种情况:插入数据记录和插入查询结果。下面我分别来介绍下。

插入数据记录

其实,MySQL 支持的数据插入操作十分灵活。你既可以通过给表里面所有的字段赋值,完整地插入一条数据记录,也可以在插入记录的时候,只给部分字段赋值。
这是什么意思呢?我借助一个例子来给你讲解下。
比如,我们有一个叫 demo.goodsmaster 的表,包括了 itemnumber、barcode、goodsname、specification、unit 和 price 共 6 个字段。我想要插入一条数据记录,其中包含了所有字段的值,就可以这样操作:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了在MySQL中对数据表进行增删改查的操作方法,包括添加数据、删除数据、修改数据和查询数据。文章首先介绍了添加数据的方式,包括插入数据记录和插入查询结果两种方式。然后讲解了删除数据的操作,包括删除单条数据和删除满足条件的数据。接着提到了修改数据的方法,包括更新单条数据和更新满足条件的数据。最后总结了如何查询数据,包括简单的查询和复杂的查询,以及如何使用查询结果插入数据表中。此外,还介绍了MySQL的安全性设置,强调在删除数据时添加条件语句WHERE以防误操作。文章还提到了数据查询语句的语法结构,包括FROM、ORDER BY和LIMIT的使用方法。另外,文章还介绍了使用“ON DUPLICATE”关键字处理重复数据的方法,并给出了实际案例。总的来说,本文内容详实,适合读者快速了解MySQL数据表操作的操作指南。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《MySQL 必知必会》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(22)

  • 最新
  • 精选
  • 朱晓峰
    置顶
    你好,我是朱晓峰,下面我就来公布一下上节课思考题的答案: 上节课,我们学习了创建和修改表的具体方法,下面是思考题的答案: ALTER TABLE demo.goodsmaster CHANGE COLUMN salesprice salesprice DECIMAL(10,2) NOT NULL UNIQUE;
    2021-04-21
    2
    3
  • 时光过客
    朱老师,怎么实现联表更新。比如A表有商品唯一id,价格。B表也有关联的商品唯一id,价格为空,实现从A表相同的Id的价格更新到B表。

    作者回复: 假设我们有2个数据表: 表A:create table demo.a (id int primary key,price decimal(10,2)); 表B:create table demo.b (id int primary key,myprice decimal(10,2)); 可以尝试用下面的语句更新: update demo.a as a, demo.b as b set b.myprice = a.price where a.id=b.id;

    2021-05-28
    19
  • 洛奇
    请问朱老师,INSERT...ON DUPLICATE 语句存在死锁的可能吗?我记得在一次携程面试的时候,面试官考我这个问题,我当时却以为它是原子操作。

    作者回复: 存在的,这个问题主要是由于第二个事务的区间锁导致第一个事务无法获得插入权限,导致两个事务互相等待,最后锁表。解决的办法是,用update代替这个语句

    2021-03-27
    4
    5
  • 右耳朵猫咪
    老师好 我想请教您一个问题 mysql分页有必要加order by 某个字段吗 听说如果不加的话 查询第二页数据的时候可能会查询到第一页的数据 如果加order by,可能会影响性能,这该如何取舍呢?

    作者回复: 建议加ORDER BY,分页本身就是一种查询的优化

    2021-03-16
    2
    4
  • 小白
    ALTER TABLE demo.goodsmaster AUTO_INCREMENT=断点数值

    作者回复: 请参考思考题答案

    2021-03-24
    2
    3
  • SharpBB
    笔记如下: 1.添加数据 insert into 表名(字段1,字段2...) values('老王','小二',...); 添加数据前要看下是否有约束 对于主键自增 可以不加该字段 对于非空约束 不赋值会报错 对于唯一约束 注意不要重复了 批量添加可以先查询某个时间段的数据 批量插入 如 insert into test.user(name,age,school_id) select name,age,school_id from test.user; 2.删除数据 delete from demo.test where id>0; 习惯加where语句 防止误操作 3.修改数据 update <库名.表名> set 字段=值 where 字段=值 如 update test.user set name='bb' where id=2; 注意不要修改主键值 一般也不会修改除非你主键设置的有问题 4.查询数据 from 如果有嵌套的查询 后面可能会跟一个派生表 必须起别名 order by 跟在字段后面 asc升序 desc降序 limit 限制sql查询显示的条数 大数据量下必须要做limit限制了1.添加数据 insert into 表名(字段1,字段2...) values('老王','小二',...); 添加数据前要看下是否有约束 对于主键自增 可以不加该字段 对于非空约束 不赋值会报错 对于唯一约束 注意不要重复了 批量添加可以先查询某个时间段的数据 批量插入 如 insert into test.user(name,age,school_id) select name,age,school_id from test.user; 2.删除数据 delete from demo.test where id>0; 习惯加where语句 防止误操作 3.修改数据 update <库名.表名> set 字段=值 where 字段=值 如 update test.user set name='bb' where id=2; 注意不要修改主键值 一般也不会修改除非你主键设置的有问题 4.查询数据 from 如果有嵌套的查询 后面可能会跟一个派生表 必须起别名 order by 跟在字段后面 asc升序 desc降序 limit 限制sql查询显示的条数 大数据量下必须要做limit限制了

    作者回复: 好的

    2022-02-08
    2
  • 洛奇
    不用非得自增主键连续吧???

    作者回复: 是的,也可使用其它字段作为主键,包括使用多字段作为联合主键。需要注意的是,要避免因为主键字段数据的修改影响到关联的历史数据查询。若是不考虑水平拆分的问题,带来额外设置上的麻烦,则自增序列是最佳的主键字段选择。

    2021-03-27
    2
  • Darren
    老师,为什么合并时,要用类似barcode=a.barcode

    作者回复: 原因是在这个例子中,相同的条码表示的商品是一样的

    2021-07-17
    1
  • 哈喽
    老师我是零基础,比如having,group_by不知道怎么用

    作者回复: group by是对结果集进行分组,having是对结果集的内容进行筛选,文稿中有详细说明。可以跟着文稿中的讲述,实际操作一下,有助于理解

    2021-06-30
    2
    1
  • 日落黄昏下
    为什么要避免这个问题呢?重要数据删除采用逻辑删除就不会有这个问题了。

    作者回复: 请参考思考题答案

    2021-05-19
    1
收起评论
显示
设置
留言
22
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部