MySQL 数据操纵语言 DML

文章目录

  • 数据操纵语言 DML
    • INSERT 语句
    • UPDATE 语句
    • DELETE 语句


数据操纵语言 DML

在这里插入图片描述

数据操纵语言(Data Manipulation Language,DML)是 SQL 语言的核心部分之一。在添加、更新或者删除表中的数据时,需要执行 DML 语句。很多时候我们提到数据库的基本操作,都会说增、删、改、查,为什么 DML 里面没有查询?因为 SELECT 查询语句属于数据查询语言 DQL,不属于数据操纵语言 DML,只是在日常工作中,多数研发人员、数据库管理员都习惯性的将 SELECT 语句归入数据操纵语言中,这一点大家需要弄清楚。接下来,我们一起来学习 DML。

INSERT 语句

INSERT 语句用于向表中插入新的记录。其基本语法形式如下:

INSERT INTO table[(column1, column2…)]
VALUES (value1,value2…)

其中 table 是表名,column1,column2…是表中的字段名列表,用“,”隔开;value1,value2…是字段对应的值列表。

INSERT 语句可以有两种书写形式。

第一种形式无需指定要插入数据的列名,只需提供被插入的值即可。比如往 city 表中再插入一条阿富汗(代码 AFG)这个国家的城市信息。先查看插入前 city 表中现存的阿富汗的城市,其 SQL 语句如下:

select * from city where countrycode ='AFG';

输出结果:

MariaDB [world]> select * from city where countrycode ='AFG';
+----+----------------+-------------+----------+------------+
| ID | Name           | CountryCode | District | Population |
+----+----------------+-------------+----------+------------+
|  1 | Kabul          | AFG         | Kabol    |    1780000 |
|  2 | Qandahar       | AFG         | Qandahar |     237500 |
|  3 | Herat          | AFG         | Herat    |     186800 |
|  4 | Mazar-e-Sharif | AFG         | Balkh    |     127800 |
+----+----------------+-------------+----------+------------+
4 rows in set (0.001 sec)

接下来,我们往 city 表中插入的城市信息如下表所示:

IDNameCountryCodeDistrictPopulation
4080FarahAFGFarah500000

因为 city 中已经存在 4079 条记录,此时我们的 ID 为 4080。实现插入的 SQL 语句如下:

insert into city values(4080,'Farah','AFG','Farah',500000);

输出结果:

MariaDB [world]> insert into city values(4080,'Farah','AFG','Farah',500000);
Query OK, 1 row affected (0.002 sec)

该方式因为没有在表名后面跟字段名,所以插入的信息必须和表中字段的顺序保持一致。检查插入信息是否完成。结果如下:

select * from city where countrycode ='AFG';

输出结果:

MariaDB [world]> select * from city where countrycode ='AFG';
+------+----------------+-------------+----------+------------+
| ID   | Name           | CountryCode | District | Population |
+------+----------------+-------------+----------+------------+
|    1 | Kabul          | AFG         | Kabol    |    1780000 |
|    2 | Qandahar       | AFG         | Qandahar |     237500 |
|    3 | Herat          | AFG         | Herat    |     186800 |
|    4 | Mazar-e-Sharif | AFG         | Balkh    |     127800 |
| 4080 | Farah          | AFG         | Farah    |     500000 |
+------+----------------+-------------+----------+------------+
5 rows in set (0.001 sec)

第二种形式就是表名后面跟字段名,此时字段名的顺序可以随意指定,不需要按照表中字段的顺序列出。待插入的城市信息如下表所示:

IDNameCountryCodeDistrictPopulation
4081BalkhAFGBalkh400000

实现插入的 SQL 语句如下:

insert into city(Name,District,ID,CountryCode,Population) values('Balkh','Balkh',4081,'AFG',400000);

表名后的字段顺序已经被打乱了,此时 values 后面的值就必须和前面的字段顺序保持一致。检查插入后的信息,结果如下:

select * from city where countrycode ='AFG';

输出结果:

MariaDB [world]> select * from city where countrycode ='AFG';
+------+----------------+-------------+----------+------------+
| ID   | Name           | CountryCode | District | Population |
+------+----------------+-------------+----------+------------+
|    1 | Kabul          | AFG         | Kabol    |    1780000 |
|    2 | Qandahar       | AFG         | Qandahar |     237500 |
|    3 | Herat          | AFG         | Herat    |     186800 |
|    4 | Mazar-e-Sharif | AFG         | Balkh    |     127800 |
| 4080 | Farah          | AFG         | Farah    |     500000 |
| 4081 | Balkh          | AFG         | Balkh    |     400000 |
+------+----------------+-------------+----------+------------+
6 rows in set (0.001 sec)

插入的信息仍然会按原表的字段顺序进行显示。

在表中我们可以设置整数类型的字段进行自动增长(后面会细讲),city 表中的 ID 拥有自动增长属性。设置了该属性的字段,在进行插入操作的时候,其值使用 null 来代替。插入一个阿富汗城市,待插入的城市信息如下表所示:

IDNameCountryCodeDistrictPopulation
nullGhorAFGGhor300000

其 SQL 语句如下:

insert into city(ID,Name, CountryCode, District ,Population) values(null,'Ghor','AFG', 'Ghor',300000);

检查插入后的信息,结果如下:

select * from city where countrycode ='AFG';

输出结果:

MariaDB [world]> select * from city where countrycode ='AFG';
+------+----------------+-------------+----------+------------+
| ID   | Name           | CountryCode | District | Population |
+------+----------------+-------------+----------+------------+
|    1 | Kabul          | AFG         | Kabol    |    1780000 |
|    2 | Qandahar       | AFG         | Qandahar |     237500 |
|    3 | Herat          | AFG         | Herat    |     186800 |
|    4 | Mazar-e-Sharif | AFG         | Balkh    |     127800 |
| 4080 | Farah          | AFG         | Farah    |     500000 |
| 4081 | Balkh          | AFG         | Balkh    |     400000 |
| 4082 | Ghor           | AFG         | Ghor     |     300000 |
+------+----------------+-------------+----------+------------+
7 rows in set (0.000 sec)

这里需要强调两点:

  1. 在插入记录的时候,我们一般要求表名后面跟上字段名,这样对于软件开发人员来说,提高了代码的可读性。
  2. 在插入数据的时候需要满足该表的其他约束,city 表中就存在一个外键约束 countrycode(有关约束的内容,本章后面的课程会详细介绍)。

UPDATE 语句

修改数据也是经常用到的数据库管理操作。在数据库中使用 UPDATE 语句对数据进行修改,其基本语法形式如下:

UPDATE table SET column1=value1, column2=value2 [where子句]

UPDATE、SET 是该语法的固定形式。其中 table 表示的是表名,column1、column2 表示的是要修改的字段名,value1、value2 表示的是修改后的值。

值得注意的是,在使用 UPDATE 语句时,通常需要使用 WHERE 子句进行条件限制,用来指定被修改的行。如果没有 WHERE 子句,则表中所有的记录都会被修改。

把 ID 为 4082 的这条记录的人口数量更改为 350000,实现 SQL 语句如下:

update city set population = 350000 where id = 4082;

输出结果:

MariaDB [world]> update city set population = 350000 where id = 4082;
Query OK, 1 row affected (0.004 sec)
Rows matched: 1  Changed: 1  Warnings: 0

查看修改后的结果,如下:

select * from city where id = 4082;

输出结果:

MariaDB [world]> select * from city where id = 4082;
+------+------+-------------+----------+------------+
| ID   | Name | CountryCode | District | Population |
+------+------+-------------+----------+------------+
| 4082 | Ghor | AFG         | Ghor     |     350000 |
+------+------+-------------+----------+------------+
1 row in set (0.001 sec)

UPDATE 也可以同时更新多个字段,如语法介绍的那样,多字段之间用“,”隔开。同时更新 ID 为 4082 的 District 字段和 Population 字段。其 SQL 语句如下:

update city set district='Ghor1',population='355000' where id=4082;

查看修改后的结果,如下:

select * from city where id = 4082;

输出结果:

MariaDB [world]> select * from city where id = 4082;
+------+------+-------------+----------+------------+
| ID   | Name | CountryCode | District | Population |
+------+------+-------------+----------+------------+
| 4082 | Ghor | AFG         | Ghor1    |     355000 |
+------+------+-------------+----------+------------+
1 row in set (0.000 sec)

注意:和 INSERT 语句一样,使用 UPDATE 语句时也要注意字段的约束控制。

DELETE 语句

数据库操作语言 DML 包括 INSERT 语句、UPDATE 语句以及 DELETE 语句。接下来要介绍的就是删除语句。其基本语法形式如下:

DELETE FROM table [WHERE]

其中 table 表示表名,如果 DELETE 子句中不写 WHERE 子句,那么删除的将会是表中的所有数据。 现删除 city 表中 ID 为 4082 的城市记录,其 SQL 语句如下:

delete from city where id = 4082;

输出结果:

MariaDB [world]> delete from city where id = 4082;
Query OK, 1 row affected (0.002 sec)

利用 select 子句查看删除后的结果。

select * from city where id = 4082;

输出结果:

MariaDB [world]> select * from city where id = 4082;
Empty set (0.000 sec)

同时删除多条记录可以使用 in 链接符来完成。比如,现要同时删除 city 表中 ID 为 4080 和 4081 的两条记录,其 SQL 语句如下:

delete from city where id in(4080,4081);

输出结果:

MariaDB [world]> delete from city where id in(4080,4081);
Query OK, 2 rows affected (0.002 sec)

查看结果如下:

select * from city where id in(4080,4081);

输出结果:

MariaDB [world]> select * from city where id in(4080,4081);
Empty set (0.000 sec)

注意:利用 DELETE 子句删除记录的时候,一定要结合着 WHERE 子句使用,进行精确删除。DELETE 子句后不跟 WHERE 子句的另外一个用途,就是进行清空数据操作。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

03 【数据代理 事件处理】

03 【数据代理 事件处理】 1.数据代理 了解数据代理需要js的一些知识:Object.defineProperty(),属性标志,属性描述符,getter,setter。。。 1.1数据代理 建议学习文章地址: https://zh.javascript.info/p…

软考A计划-试题模拟含答案解析-卷十三

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

docker可视化管理工具portainer忘记密码重置教程

目录 前言: 1 停止portainer容器 2 借助仓库 portainer/helper-reset-password 重置密码 3 重新启动portainer容器 4 验证是否修改成功 5 修改登录密码 前言: 由于学习的深入,各种账号密码实在是太多了,建议各位配置账号密…

【JavaSE】Java基础语法(三十五):多线程实战

文章目录 1. 多线程入门1.1 多线程相关概念1.2 什么是多线程1.3 多线程的创建方式1.3.1 继承 Thread 的方式1.3.2 实现 Runnable 接口的方式1.3.3 实现 Callable 接口的方式1.3.4 Thread 类中常用方法1.3.5 sleep() 方法 和 wait() 方法区别: 2. 线程安全2.1 线程安…

机器学习算法

机器学习擅长的任务: ● 回归(regression) ● 分类(classification) ● 聚类(clustering) 1.回归(regression) 回归是处理连续数据时使用的方法,如时间序列数据。 …

java 利用poi根据excel模板导出数据(一)

前言 作为B端开发,导出数据是不可以避免的,但是有时候需求很变态,表头复杂的一笔,各种合并单元格,如下图: 这些虽说用代码可以实现,但是很繁琐,而且代码并不能通用,遇到…

Python编程面试题及答案(20例)

以下是一些常见的Python编程面试题以及它们的答案: 1.解释Python中的 GIL(全局解释器锁)是什么,它对多线程编程有什么影响? 答案:GIL是Python解释器中的一个机制,它确保在任何给定时间只有一个…

Lecture 5 Part of Speech Tagging

目录 POS application: Information Extraction 词性应用:信息提取 POS Open Class 开放类词性Problem of word classes: Ambiguity 词类问题:模糊性Tagsets 标记集Penn Treebank Tags:Derived Tags: 衍生标签Tagged Text Example 标记文本示例Reasons f…

160个CrackMe之001

吾爱中的逆向练习题 运行程序 有两个方式 一个是账号登入 一个是序列号输入 账号输入 方法一 爆破 我们先进行账号输入 这个是最简单的逆向 所以我们可以使用 字符串查找看看 先试用ollydbg打开 右键 ->查找 ->所有参考文本字符串 这里我们能发现有两个报错 我们还…

通过python封装1688图片搜索商品数据接口,拍立淘API接口

1688图片搜索API封装接口是一个可以帮助用户快速使用1688图片搜索API的接口封装库。该接口封装库可以帮助用户快速引入1688图片搜索API,并提供各种参数配置和封装的API调用方法,以方便用户快速实现自己的图片搜索需求。 该接口封装库将1688图片搜索API的…

九耶丨阁瑞钛伦特-springmvc(三)

SpringMVC作为一种流行的Java Web框架,是基于Spring之上的。它提供了强大的MVC(Model-View-Controller)架构,能够快速地实现Java Web开发,高效地与数据交互。如何使用SpringMVC成为开发人员的首要问题。要了解SpringMV…

设计模式之~外观模式

定义: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 结构图: 区分中介模式: 门面模式对外提供一个接口 中介模式对内提供一个接口 优点: 松耦…

Linux进程概念引入

文章目录 冯诺依曼体系操作系统概念设计目的定位系统调用和库函数的概念 进程概念描述进程PCBtask_struct内容分类 组织进程查看进程通过系统调用获取进程标识符通过系统调用创建进程 冯诺依曼体系 目前我们的计算机基本都是遵守冯诺依曼体系的,在冯诺依曼体系中&am…

C++ 内存分区模型

C程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进行管理的 全局区:存放全局变量和静态变量以及常量 栈区:由编译器自动分配释放 , 存放函数的参数值 , 局部变量等 堆区&…

第11届蓝桥杯Scratch国赛真题集锦

编程题 第 1题 问答题 3D打印小猫 题目说明 背景信息:3D打印技术,它与普通打印工作原理基本相同,打印机内装有液体或粉未等“打印材料”,与电脑连接后,通过电脑控制把“打印材料”一层层叠加起来,最终把计算机上的蓝图变成实物。 编程实现:通过滑杆控制小猫造型变化,按下…

YUM在线升级功能

文章目录 YUM在线升级功能利用YUM进行查询、安装、升级与删除功能查询功能使用案例 安装/升级功能删除功能 YUM的配置文件修改软件源产生的问题与解决之道使用案例 YUM的软件群组功能使用案例 全系统自动升级 管理的抉择:RPM还是Tarball基础服务案例:以A…

学生成绩管理系统

基于springboot vue实现的学生成绩管理系统 主要模块: 1)学生模块:我的成绩、成绩统计、申述管理、修改密码 2)教师模块:任务管理、对学生班级任务安排、班级学生的成绩查看、申述管理 3)管理员模块&…

应用运维的三个项目

应用运维 目录概述需求: 设计思路实现思路分析1.开发和运维2.比重3.历史项目4.工作内容5.历程 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,…

南山城市更新--向南村(一期,二期)项目详情

向南村(一期)城市更新单元项目简介 项目于2010年被列入《深圳城市更新单元规划制定计划第一批计划》中,申报主体为向南实业股份有限公司,后与恒大合作开发。 项目位于南山区桂庙路南侧,毗邻前海、衔接后海&am…

javaWeb ssh小提琴管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh小提琴管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S 模式开发。开发环境为TOMCAT7.0,…