数据库DML数据操作语言

2023-11-16

DML 数据操作语言

DML:对表中数据进行操作的语言,涵盖的内容为:INSERT(增),DELETE(删),UPDATE(改)

准备一张表:

CREATE TABLE person(
                     name VARCHAR(30),
                     age INT(3)
)

1. 插入数据(INSERT)

1.1 语法:

INSERT INTO 表名[(字段1,字段2,...)] VALUES(字段的1,字段2的值,...)

注:在语法定义上"[]"中的内容表示可写可不写

INSERT INTO person(name,age) VALUES('张三',25)
  INSERT INTO person(age,name) VALUES(33,'李四')

注:

  • 数据库中字符串的字面量是使用单引号’'表达的

  • VALUES中指定的值要与指定的字段名个数,顺序,以及类型完全一致

  • 查看表中数据

    SELECT * FROM person
    

1.2 插入默认值

当插入数据时不指定某个字段,那么该字段插入默认值。若创建表时字段没有显示的指定默认值时,默认值插入NULL

例:

INSERT INTO person (name) VALUES ('王五')

请添加图片描述

注意事项:
  • age字段没有指定,因此插入默认值NULL

  • 数据库中任何字段任何类型默认值都是NULL,当然可以在创建表时使用DEFAULT指定。

    修改person表中age的默认值为20
    ALTER TABLE person CHANGE age age INT(3) DEFAULT 20
    
    修改后向person表中插入数据
    INSERT INTO person (name) VALUES ('赵六')
    
    
    提示:也可在创建person表时为字段指定默认值
    CREATE TABLE person(
    	name VARCHAR(30) DEFAULT '无名氏',
        age INT(3) DEFAULT 20
    )
    

    为age添加默认值20:

请添加图片描述

插入’赵六’
请添加图片描述

1.3 全列插入

当我们插入数据是不指定任何字段名时,就是全列插入。此时VALUES子句中需要为每个字段指定值。并且要求(个数,顺序,类型必须与表完全一致)

例:

INSERT INTO person VALUES('钱七',21);

若某个字段有默认值,可以用DEFAULT表示默认值
INSERT INTO person VALUES('钱七',DEFAULT);

若某个字段想插入NULL值,可以使用NULL表达
INSERT INTO person VALUES('钱七',NULL);

下列为错误示例
INSERT INTO person VALUES('钱七');		列的值个数不匹配
INSERT INTO person VALUES(27,'钱七');		列的值类型不匹配

2. 修改数据(UPDATE)

2.1 语法

UPDATE 表名 SET 字段1=新值1[,字段2=新值2,...][WHERE 过滤条件]

UPDATE person SET age=15
  上述SQL执行后会导致person表中所有记录的age字段值都被改为15
注意

UPDATE语句通常都要添加WHERE子句,用于添加要修改记录的条件,否则全表修改!

2.2 修改指定记录(添加WHERE子句)

将张三的年龄改成20UPDATE person
SET age=20
WHERE name='张三'		仅将person表中某条记录name字段值为‘张三’的age改为20

将person表中年龄为16岁的人改为36UPDATE person
Set age=36
WHERE age=16		  person表中凡是满足WHERE条件的记录都会被修改
(1) WHERE子句中常用的条件

=, <, <= ,> ,>= ,<>(不等于使用<>。!=不是所有数据库都支持)

将person表中年龄大于30岁的人改为年龄29
UPDATE person
SET age=29
WHERE age>30

2.3 将一个计算表达式的结果作为值使用

将person表中每个人的年龄涨1UPDATE person
SET age=age+1			将每条记录年龄的值+1后再修改回年龄字段

2.4 同时修改多个字段

'李四'改为'李老四'且年龄改为55UPDATE person
SET name='李老四',age=55
WHERE name='李四'

3. 删除语句(DELETE)

3.1 语法:

DELETE FROM 表名 [WHERE 过滤条件]

注:DELETE语句通常都要添加WHERE子句,否则是清空表操作

例:

删除'李老四'
DELETE FROM person
WHERE name='李老四'	仅删除person表中满足WHERE条件的记录


删除年龄大于等于30岁的人
DELETE FROM person
WHERE age>=30

3.2 清空表操作

DELETE FROM person

练习:

1.创建数据库day1db 字符集utf8并使用
  CREATE DATABASE day1db CHARSET=utf8
  USE day1db
2.创建t_hero表, 有name字段,字符集utf8
CREATE TABLE t_hero(
  name VARCHAR(30)
)CHARSET=utf8
3.修改表名为hero
  RENAME TABLE t_hero TO hero
4.最后面添加价格字段money, 最前面添加id字段, name后面添加age字段
ALTER TABLE hero ADD money INT
ALTER TABLE hero ADD id INT FIRST
ALTER TABLE hero ADD age INT AFTER name
  
5.表中添加以下数据: 1,李白,50,6888 2,赵云,30,13888 3,刘备,25,6888
  INSERT INTO hero(id,name,age,money) VALUES(1,'李白',50,6888)
  INSERT INTO hero(id,name,age,money) VALUES(2,'赵云',30,13888)
  INSERT INTO hero(id,name,age,money) VALUES(3,'刘备',25,6888)
6.修改刘备年龄为52UPDATE hero
SET age=52
WHERE name='刘备'
  7.修改年龄小于等于50岁的价格为5000
UPDATE hero
SET money=5000
WHERE age<=50
  8.删除价格为5000的信息
DELETE FROM hero
WHERE money=5000
  9.删除表, 删除数据库
DROP TABLE hero
DROP DATABASE day1db

4. 总结

  • DML:数据操作语言,它是对表中数据进行操作的语言,涵盖操作:增(INSERT),删(DELETE),改(UPDATE)

  • INSERT语句用于将数据插入表中

    • INSERT时指定的字段顺序可以与表不一致,但是VALUES子句中值的顺序要与指定顺序一致

    • INSERT时可以不指定某字段,那么此时该条记录该字段会插入默认值

    • INSERT时为某个字段插入其指定的默认值,使用关键字DEFAULT。

      字段若指定了默认值则使用该默认值,否则字段默认值为NULL。

    • INSERT时使用NULL插入一个字段为null值。

    • INSERT时可以不指定字段名,那么为全列插入,此时VALUES子句指定的值顺序,个数,类型必须与表结构完全一致。

  • UPDATE语句用于修改表中数据

  • DELETE语句用于删除表中数据

  • UPDATE语句和DELETE语句通常都要添加WHERE子句,否则是对全表所有记录操作。

数据库相关文章推荐

  1. 数据库基本概念介绍和MariaDB安装
  2. 数据库DDL数据定义语言
  3. 数据库DQL数据查询语言
  4. 数据库常用的数据类型和约束条件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库DML数据操作语言 的相关文章

  • 从 Eclipse 导出后,WAR 文件中缺少一些必要的库 - 为什么?

    我接手了一个大学的项目 其中包含一些 Web 服务 通过将项目导出为 WAR 文件 一些库包含在文件中 例如 Axis2 而另一些则不包含 hibernate JDBC 驱动程序 另外 添加到类路径中的 jar 尚未导出 所有库都位于硬盘驱
  • Eclipse 与 IntelliJ 热部署

    我的应用程序配置 Tomcat 8 Spring Spring MVC Hibernate 在 Eclipse 中 我创建了 Tomcat 服务器 并将我的应用程序添加到资源中 JSP JS CSS 和 JAVA 类热部署的工作原理就是这样
  • Java中的字节和字符转换

    如果我将一个字符转换为byte然后回到char 那个角色神秘地消失了 变成了别的东西 这怎么可能 这是代码 char a line 1 byte b byte a line 2 char c char b line 3 System out
  • Mediaplayer 播放几次后停止播放

    我有一个按钮 按下它会播放一个随机声音剪辑 然后播放另一个声音剪辑 然后通过一个媒体播放器播放另一个声音剪辑 但是多次按下该按钮 15 20 次 后 所有音频都会停止 我在播放最后一个音频剪辑后释放媒体播放器 所以我不认为这是原因 有什么指
  • 获取下一个ID而不插入行

    在 SQL SQL Server 中是否可以在插入行之前从表中的标识列检索下一个 ID 整数 而无需实际插入行 如果删除了最近的行 则这不一定是最高 ID 加 1 我问这个问题是因为我们偶尔需要用新行更新实时数据库 行的 ID 在我们的代码
  • 在 Spring Webflux 中执行阻塞 JDBC 调用

    我使用 Spring Webflux 和 Spring data jpa 使用 PostgreSql 作为后端数据库 我不想在进行数据库调用时阻塞主线程 例如find and save 为了实现同样的目标 我有一个主调度程序Controll
  • ORDER BY id 或 date_created 显示最新结果?

    我有一个表 实际上有几个 我想首先从中获取最新条目的结果 这是我的ORDER BY条款选项 date created INT 从不改变值 id 当然是INT AUTO INCRMENT 两列应同等地代表记录插入的顺序 我自然会使用date
  • Django 模型 - 外键作为主键

    我有以下2张表 在 models py 中 class Foo models Model uuid models CharField UUID primary key True default uuid4 and class FooExt
  • 子查询与连接

    我重构了从另一家公司继承的应用程序的一个缓慢部分 以使用内部联接而不是子查询 例如 WHERE id IN SELECT id FROM 重构后的查询运行速度提高了约 100 倍 50 秒到 0 3 我预计会有改进 但谁能解释为什么它如此剧
  • Spark SQL 失败,因为“常量池已超过 JVM 限制 0xFFFF”

    我在 EMR 4 6 0 Spark 1 6 1 上运行此代码 val sqlContext SQLContext getOrCreate sc val inputRDD sqlContext read json input try inp
  • 对象映射器 - YAMLFactory - 由于缺少 _createContentReference 方法而出现异常

    我正在使用最新的 2 13 0 版本的 jackson 当我尝试解析 YAML 文件时 出现此异常 java lang NoSuchMethodError com fasterxml jackson core io ContentRefer
  • 检查更新时 Maven 无限期挂起

    我正在使用 Maven 构建一个项目 我是新手 并且它挂起 mvn package INFO Scanning for projects INFO INFO Building Presentation Reports INFO task s
  • 如何组合 3 个或更多 CompletionStages?

    如果有 2 个 CompletionStages 我可以将它们与thenCombine method CompletionStage a aCompletionStage getA CompletionStage b bCompletion
  • Java:如果数组大小未知,如何初始化?

    我要求用户输入 1 到 100 之间的一些数字并将它们分配到一个数组中 数组大小未初始化 因为它取决于用户输入数字的次数 我应该如何分配数组长度 如果用户输入 5 6 7 8 9 5 个数字 则 int list becomes int l
  • Java 9:AES-GCM 性能

    我进行了一个简单的测试来测量AES GCM https en wikipedia org wiki Galois Counter Mode表现在Java 9 通过在循环中加密字节缓冲区 结果有些令人困惑 本机 硬件 加速似乎有效 但并非总是
  • 隐藏 JTable 临时列

    我正在使用 JTable 显示数据库中的数据 现在我想通过 Jcombobox 过滤我的 jtable 我正在使用 Jcombo 框 其中包含 030 024 045 等值 这些值已在 jtable 中设置为列标题 当我单击组合时 选定的列
  • 为什么 OOP 中静态类的最佳实践有所不同?

    我目前正在阅读有关 Java 最佳实践的内容 我发现根据这本书 https rads stackoverflow com amzn click com 0321356683我们必须优先选择静态类而不是非静态类 我记得在 C 最佳实践中 我们
  • Zookeeper 未启动,nohup 错误

    我已经下载了zookeeper 3 4 5 tar gz 解压后我将conf zoo cfg写为 tickTime 2000 dataDir var zookeeper clientPort 2181 现在我尝试通过 bin zkServe
  • java - 简单计算在多线程中比在单线程中花费更长的时间

    我试图了解如何利用多线程 我写了一个简单的程序来增加i 比方说 使用两种方式 400 000 次 单线程方式 0 到 400 000 和多线程方式 在我的例子中 4 次 0 到 100 000 线程数等于Runtime getRuntime
  • ImageIO.read(...) - 非常慢,有更好的方法吗?

    我正在加载大量将在我的应用程序中使用的图标 我计划在服务器启动时从 jar 中加载所有这些 然而 由于数百张图像加起来刚刚超过 9MB 执行此任务仍然需要 30 秒多的时间 我现在正在一个单独的线程中执行此操作 但这让我想知道我是否在代码中

随机推荐

  • Python-爬虫实现天气查询-有GUI界面

    Python用缩进来区分代码层次 代码的主体是爬虫与Tkinter 执行程序后会先出现一个选择城市的界面 这里需要输入城市名 点击确认即会出现城市天气状况 执行效果如下 完整代码如下 from tkinter import GUI设计 tk
  • .NET和Web 3.0

    Professional Visual Studio Extensibility 的作者Keyvan Nayyeri 在他的博客里头发表了 NET and Web 3 0 作为 NET社区的一个名人 他同时是 Professional Co
  • JLabel显示图片,及其它使用方法。。。实现九九乘法表

    JLabel的使用 显示九九乘法表 并使用JLabel载入背景图片 窗口大小固定public MyFrame extends JFrame public MyFrame String str JLabel jL setLayout null
  • 在Element-ui的table表格中,如何让分页的序号延续上一页的序号

    可以通过传递index属性来自定义索引 1 页面
  • 爽!一个注解,搞定 SpringBoot 操作日志

    来源 blog csdn net weixin 43954303 article details 113781801 使用方式 基本使用 源码 此组件解决的问题是 谁 在 什么时间 对 什么 做了 什么事 本组件目前针对 Spring bo
  • hadoop实践(一)环境准备

    1 安装linux或者安装linux虚拟机 本人是安装linux虚拟机centos 至于网上很多用乌班图 我觉的因为是实践 所以基本无差 2 安装ssh linux 一般自带 rpm qa grep ssh 3 创建 hadoop用户 用r
  • Git、GitHub和Gitee的使用

    Git GitHub和Gitee之间的关系 1 Git 是一个开源的分布式版本控制系统 简单来说就是可以通过使用git去管理项目 我们可以将项目存放在一个仓库中 通过git去管理这个仓库 以此来达到管理项目的目的 2 GitHub是一个基于
  • 剑指Offer 62 -- 圆圈中最后剩下的数字

    剑指Offer 62 圆圈中最后剩下的数字 题目 0 1 n 1这n个数字排成一个圆圈 从数字0开始 每次从这个圆圈里删除第m个数字 删除后从下一个数字开始计数 求出这个圆圈里剩下的最后一个数字 例如 0 1 2 3 4这5个数字组成一个圆
  • Python语言基础—if判断和循环总结

    系列文章目录 Python语言基础 注释的作用及分类 Python语言基础 常用运算符总结 Python语言基础 定义变量与数据类型 Python语言基础 if判断和循环总结 Python语言基础 理解面向对象 Python语言基础 集合的
  • 新专辑《AI秘籍》,你所感兴趣的一切

    Hi 大家好 我时茶桁 最近 我花了几天时间仔细思考了一下即将要开始写的专栏 AI秘籍 再根据自己的能力大概规划了一下 目前大致已经理出了一些相关信息可以分享给大家 专栏形式 本次专栏应该会以文章的形式先和大家见面 后续还会根据能力以原本的
  • 十四、使用Selector(多路复用器)实现Netty中Reactor单线程模型

    导论 前面几篇文章我们分别从 一 C10K问题经典问答 二 java nio ByteBuffer用法小结 三 Channel 通道 四 Selector选择器 五 Centos Linux安装nc 六 windows环境下netcat的安
  • C++ 类大小分析

    以下测试代码的运行环境 Ubuntu 16 04 4 LTS gcc version 4 8 5 x64 空类 单一继承的空类 多重继承的空类所占空间大小为 1 字节 实例在内存中都有一个独一无二的地址 为了达到这个目的 编译器往往会给一个
  • 编译原理-总概

    语言执行过程 代码 解释器编译器 机器代码 cpu执行 编译型语言 在程序在执行之前需要一个专门的编译过程 通过编译器把程序编译成为可执行文件 再由机器运行这个文件 运行时不需要重新翻译 直接使用编译的结果就行了 解释型语言 是一边执行一边
  • NFT 笔记:我的加密艺术品投资逻辑

    There really is no such things as Art There are only artists 没有大写的艺术这种东西 只有艺术家 贡布里希 艺术的故事 撰文 小毛哥 Mao 推特 porounclemao 每当身
  • 钉钉F1 RK3399 咸鱼80元板子使用记录

    1 简单介绍 12V电源 建议2A 默认插电不开机 有大佬找到金属罩下的焊盘 短接可上电开机 在usb旁边的旁边有个端子接口 短接就可以开机 建议找个一样大的接口接个开关 到目前为止还未测试需要哪种接口 其它接口暂时不知 谁舍得拆一个钉钉F
  • 谷粒商城高级篇(36)——商品上架之上传数据到Elasticsearch

    商品上架之上传数据到Elasticsearch 功能需求分析 分析 怎么设计存储结构来保存数据 空间换时间 时间换空间 最终方案 存储结构 关于 nested 类型 商品上架功能实现 guimall common pom xml com x
  • resnet50网络结构_轻量(高效)目标检测网络结构设计

    目标检测网络可以分成如图的5个部分 input image 输入图像的大小对整个网络推断耗时有最直接的影响 小的图像 自然整个网络推断时间就会大大减少 一般来说 输入图像大小与网络深度正相关 即 大图像需要更深的网络提取更好的特征 back
  • JS下setTimeout与setInterval二者的差异

    JS下setTimeout与setInterval二者的差异 很多人都觉得这两个方法差不多 但是 实际上 他们差的很远呢 因为setTimeout 表达式 延时时间 在执行时 是在载入后延迟指定时间后 去执行一次表达式 记住 次数是一次 而
  • Linux I2C 驱动实验

    一 I2C 驱动 本章同样以 I MX6U ALPHA 开发板上的 AP3216C 这个三合一环境光传感器为例 通过 AP3216C 讲解一下如何编写 Linux 下的 I2C 设备驱动程序 Linux 的驱动分离与分层的思想 因此 Lin
  • 数据库DML数据操作语言

    文章目录 DML 数据操作语言 1 插入数据 INSERT 1 1 语法 1 2 插入默认值 注意事项 1 3 全列插入 2 修改数据 UPDATE 2 1 语法 注意 2 2 修改指定记录 添加WHERE子句 1 WHERE子句中常用的条