数据库学习之MySQL (二十二)—— DML 数据操作语言 INSERT UPDATE DELETE

MySQL学习专栏 正在持续更新中:)

前言 ´・ᴗ・`

  • 本篇将所有DML 数据操作的知识介绍一遍 包括插入INSERT 修改更新UPDATE 删除DELETE
  • 注意 这个插入修改与删除 与后面学习的数据定义语言DDL中,对表的修改 删除 是不同的 注意区分
  • 本文可以帮你知晓…
    • 如何在既定表存在的情况下加入记录(record) 或者说插入数据?
    • 如何修改已经存在于一张表中的数据呢?
    • 如何通过多表查询 修改数据呢?
    • 如何在一张表上删除任意一条记录呢?
    • 如何通过多表查询 删除任意哪张表的任意哪条记录呢?

插入 INSERT

我们先创建一个表格
创建的语法我们下一站会讲 也就是DDL语言 这里我们只要运行就行了:

USE data1;  
DROP TABLE IF EXISTS project;

CREATE TABLE project(
   项目编号      INT       NOT NULL ,
   项目识别码    INT       NOT NULL ,
   专利申请号    CHAR(20)  NOT NULL ,
   项目名称      CHAR(20)  NOT NULL ,                              
   项目负责人    CHAR(20)  NOT NULL ,
   CONSTRAINT pk_project PRIMARY KEY(项目编号,项目识别码,专利申请号,项目名称),
   CONSTRAINT ck_responsibility CHECK(项目负责人 = 'Ryan' OR 项目负责人 = 'SST')     
);
   

这样我们在data1数据库就有一张表名为project 是一个没有任何记录(行)只有列的表
在这里插入图片描述
然后我们利用INSERT 插入数据
语法就是

INSERT INTO [table]([column1], [clolumn2], [column3],)
  VALUES([value1], [value2], [value3]); 

所以我们可以这么写:

INSERT INTO project(项目编号, 项目识别码, 专利申请号, 项目名称, 项目负责人)
  VALUES(1,2233,2333,'基于MEMS传感器的跌到检测系统','Ryan'); 

插入几行以后就是这个样子
在这里插入图片描述
输入多行数据 就逗号隔开即可 比如:

INSERT INTO `locations` (
  `location_id`,
  `street_address`,
  `postal_code`,
  `city`,
  `state_province`,
  `country_id`
) 
VALUES
  (
    1000,
    '1297 Via Cola di Rie',
    '00989',
    'Roma',
    NULL,
    'IT'
  ),
  (
    1100,
    '93091 Calle della Testa',
    '10934',
    'Venice',
    NULL,
    'IT'
  ),
  (
    1200,
    '2017 Shinjuku-ku',
    '1689',
    'Tokyo',
    'Tokyo Prefecture',
    'JP'
  ),
  (
    1300,
    '9450 Kamiya-cho',
    '6823',
    'Hiroshima',
    NULL,
    'JP'
  ),
  (
    1400,
    '2014 Jabberwocky Rd',
    '26192',
    'Southlake',
    'Texas',
    'US'
  );

当然,栏目可以省略——只要你的数据是按栏目默认的顺序就行,注意数据的数量要和列的数量对的上:

INSERT INTO project VALUES(2,2233,2333,'基于树莓派和内置深度学习算法的','Ryan1'); 

有时少了也没事,SQL会认为那一列的数据为NULL 但是我建议不要这么写.

还有种奇葩的方法:采用键值对的方式 当然仅能输入一行数据

INSERT INTO project SET 项目编号=123,项目识别码=234,专利申请号=345,项目名称='基于stm32F4的zigbee组网系统',项目负责人='SST';

这种插入的时候不方便 不过修改UPDATE的时候就比较简洁了

修改 UPDATE

修改其实就是利用WHERE筛选出需要改的行 然后进行修改

  UPDATE project SET 项目负责人='SST'
  WHERE 项目负责人 LIKE 'Ryan%';

这里我筛选的行就是所有项目负责人数据以‘Ryan’开头的行 然后将其修改更新为SST
在这里插入图片描述
当然 我们除了对单表操作 多表也是可以的
注意 多表不过是多表连接后形成新的一张表 然后针对生成的表进行修改操作而已

男神女神案例中 我想修改所有张无忌的女朋友的电话号码为13333333333
修改前 我们查询一下

SELECT f.name AS 女神名字, m.`boyName` AS 男朋友名字, f.`phone` AS 女神手机号
FROM boys m INNER JOIN beauty f ON m.id = f.boyfriend_id
WHERE m.boyName='张无忌'; 

在这里插入图片描述
那么这个修改 单表是无法完成的 我们就利用内连接那套路 请看下面的方法(UPDATE [新生成的表] SET [] WHERE [])

USE data2;
UPDATE boys m INNER JOIN beauty f ON m.id = f.boyfriend_id
SET f.phone='13333333333'
WHERE m.boyName='张无忌'; 

修改后
在这里插入图片描述
总结起来就是这样的:

UPDATE [表1] [表1别名] INNER|LEFT|RIGHT JOIN [表2] [表2别名] ON [连接条件]
SET [键值对]
WHERE [筛选条件]; 

删除 delete

其实讲完前面两个 这个无需多言了——
大体上 UPDATE和DELETE都是锁定某一行的数据 只不过看你想做的是 修改还是删除了
当然对于多表删除,还是有个细节要注意:你删除的是哪个表上的数据呢?
语法就是:

DELETE [要删除的表名字]
FROM [表1] [表1别名] INNER|LEFT|RIGHT JOIN [表2] [表2别名] ON [连接条件]
WHERE [筛选条件]; 

所以 你要是想删除 在女神表上所有张无忌的女朋友信息 你可以:

USE data2;
DELETE f
FROM beauty f INNER JOIN boys m ON f.`boyfriend_id` = m.`id`
WHERE m.`boyName`='张无忌';

因此 两个表男神表和女神表上的数据都想删除
就改成:

USE data2;
DELETE f, m
FROM beauty AS f INNER JOIN boys AS m ON f.`boyfriend_id` = m.`id`
WHERE m.`boyName`='张无忌';

总结 ´◡`

这节就把DML讲完了 其实对于数据的操作挺简单的 但是下一节的DDL内容很容易和这节搞混 注意区分:
DML是对数据而言 DDL是对表 对数据库而言的
下一站:

发布了31 篇原创文章 · 获赞 26 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43178828/article/details/104240378