MySQL数据表的“增删查改“

我们学习数据库, 最重要的就是要学会对数据表表进行"增删查改"(CRUD).(C -- create, R -- retrieve, U -- update, D -- delete)

目录

一. "增"(create)

1. 普通新增

2. 指定列新增

 3. 一次插入多行

4. 用insert插入时间

5. 小结

二. "查"(retrieve)

1. 全列查询

2. 指定列查询

3. 查询时指定表达式 

4. 去重查询

5. 排序查询

6. 条件查询(查询中最关键的操作)

7. 分页查询

8. 小结

 三. "改"(update)

四. "删"(delete) 


一. "增"(create)

MySQL中, 新增元素的基本语法如下:

1. 普通新增

insert into 表名 values (值, 值, 值 ......);

例如:

注: MySQL中, 表示字符串使用单引号或者双引号都可以

注意:

(1) 这里值的个数和类型, 要和表结构相匹配.

 如上图, 列数和值的个数不匹配.

如上图, 明明第二列插入的int类型和表中定义的varchar类型不匹配, 为什么还能插入成功呢? 这里我们就不得不提到SQL语言的"弱类型"特性. 

SQL(结构化查询语言)通常被认为是一种“弱类型”或“动态类型”的语言. SQL可以在查询执行时自动进行数据类型转换. 例如在这里SQL就自动把int类型的3转换成了字符串类型. 但SQL并非在任何情况下都能将数据类型自动转换.

例如在这里SQL就无法将字符串类型的"李四"转换成int类型, 此时程序就会报错.

2. 指定列新增

insert into 表名(列名, 列名 ......) values(值, 值 ......);

(注意: 插入值的 个数, 类型, 顺序 要和前面指定的列名匹配).

 3. 一次插入多行

insert into 表名 values(值, 值 ...), (值, 值 ...), (值, 值 ...) ...;

每个括号表示一行.

还可以和"指定列新增"配合使用

例如:

4. 用insert插入时间

字符串的形式插入时间.

可以使用now()来插入当前时间. (注: now()获取的时间是字符串类型的).

5. 小结

(1) 普通新增: insert into 表名 values(值, 值, 值 ......);

(2) 指定列新增: insert into 表名(列名, 列名 ......) values(值, 值 ......);

(3) 一次插入多行: insert into 表名 values(值, 值 ...), (值, 值 ...), (值, 值 ...) ...;

(4) 用 insert 插入时间: 以字符串的形式插入时间, 获取当前时间使用now()

二. "查"(retrieve)

SQL中, "增删改"都很简单, "查"比较复杂. 本篇博客我们先介绍简单的"查"操作.

MySQL中, 新增元素的基本语法如下:

1. 全列查询

即查询出指定表的所有行和所有列.

select * from 表名;

(注意: *是通配符. 在这里, *代指所有列)

注意: select* 是一个非常危险的操作. 因为一旦表的规模非常大, 此时进行select*操作, 就会产生大量的硬盘io和网络io, 很可能会把硬盘/网卡的带宽"吃满", 造成"拥堵". 使得其他客户端在尝试访问数据库时, 访问操作就无法正常进行了.

2. 指定列查询

查询的时候, 手动指定列名, 查询出来的结果就是指定的列.

select 列名, 列名 from 表名;

3. 查询时指定表达式 

select 表达式(as 别名) from 表名;

这里的表达式: 可以是针对某个列的加减乘除, 也可以是针对多个列的加减乘除.

例如:  我们想把成绩表每个学生的语文成绩加10分后查询:

把每个学生的总分查询出来:

注意: 这里可以给chinese,math,english的和取一个别名sum.需要使用到"as".如下:

 也可以省略as,但是我们并不建议这样做, 因为这样很容易造成SQL语句表达含义不清晰.

注意: 查询操作(select)生成的表只是"临时表". 数据库本体(数据库服务器硬盘上的数据)不会发生任何改变.

4. 去重查询

去重的含义: 多个行的数据, 如果出现相同的, 就会只保留一份.

select distinct 列名 from 表名;

5. 排序查询

针对查询结果进行排序

... order by 列名;

注意: 如果排序中出现null, null会被视为最小值.

例如: 用数学成绩来排序

(默认是升序排列) 当然升序还是降序也可以手动指定. (asc -- 升序, desc -- 降序). (这里的asc是ascend的缩写, desc是descend的缩写).

也可以指定多个列排序, 排序规则为: 先使用第一列来排列, 如果第一列元素相同, 则使用第二列, 如果前两列都相同, 则使用第三列 ......

  ... order by 列名, 列名, 列名 ......

6. 条件查询(查询中最关键的操作)

查询过程中: 一行一行地遍历表, 根据筛选条件, 把每一行的数据代入到条件中, 满足就保留并显示, 不满足就跳过.

select 列名 from 表名 where 条件;

条件运算符:

>, >=, <, <= : 大于,大于等于, 小于,小于等于

= : 等于, 不支持null的比较 (例如: null = null 的结果为 null)

<=> : 等于, 支持null的比较 (例如: null <=> null 的结果为 true)

(注意: 只要有null参加的运算,结果都是null)

!= : 不等于

between a and b : 范围匹配, 闭区间[a, b]. 如果value值在[a, b]范围内, 就返回true.

例如: 

in (option1, option2 ......) : 如果是几个option中的任意一个, 则返回true.

例如:

is null : 是null

is not null : 不是null

like : 模糊匹配 (即: 不要求完全相等, 满足一些条件可以了) 此外还需要搭配通配符来使用. 

(%匹配0个或任意个字符, _匹配一个特定字符)

例如: 

and : 并且

or : 或者

not : 非(逻辑取反)

7. 分页查询

select 列名 from 表名 limit N (offset M):

N代表限制查询几条数据.

例如:

指定limit时, 还可以搭配offset来使用. offset表示从下标为几开始算limit.

例如:

8. 小结

(1) 全列查询: select * from 表名;

(2) 指定列查询: select 列名, 列名 from 表名;

(3) 查询时指定表达式: select 表达式(as 别名) from 表名;

(4) 去重查询: select distinct 列名 from 表名;

(5) 排序查询: ... order by 列名 desc/asc;

(6) 条件查询: select 列名 from 表名 where 条件;

(7) 分页查询: select 列名 from 表名 limit N (offset M):

 三. "改"(update)

使用update所完成的修改, 是真正在硬盘上完成了修改. 这样的修改, 是"持久有效"的.

基本语法:

update 表名 set 列名 = 值, 列名 = 值, 列名 = 值 ......;

注意:

(1) 这里还可以配合使用where, order by, limit 来对查询结果进行条件限制/排序/分页.

(2) 如果没有指定条件, 默认对所有列进行修改.

例如, 这里我们要把sunwukong的english成绩改为79:

 从上面结果我们可以看到:  "查询成功, 1行受到影响", "匹配到的行数:1 , 修改的行数:1, 警告: 0".

注意: 这里匹配到的行数和实际被修改的行数不一定相等, 要根据实际情况决定, 比如: 

这里虽然匹配到了9行, 但是只修改了6行. 因为只要有null参与的运算, 结果都是null, 无法修改.

注意: 这里写到的 chinese = chinese + 10  不能写成chinese += 10. 因为SQL语言中没有这样的语法. 

再例: 我们要把louxiang的id 6,成绩 99, 87, 74都记录下来

update是一个非常简单单操作, 关于update的操作, 大概就是这么多.

四. "删"(delete) 

基本语法: 

delete from 表名 where 条件 (order by / limit N).

注意:

(1) delete(删除)操作也是一个非常危险的操作, 在实际开发中, 要谨慎使用.

(2) 如果delete语句没有指定条件, 那么默认会删除表中所有数据.

(2) 注意辨析delete from 表名 和 drop table 表名 的区别: delete 只是删除表中数据, 但是表依然存在; drop 是连数据带表一块都删除了.

以上就是本篇博客的全部内容啦,如果喜欢小编的文章,可以点赞,评论,收藏~

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

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

相关文章

AI科技,赋能企业财务管理

AI技术已深入千行百业&#xff0c;其实际任务解决能力愈发凸显和强劲。正如乔布斯所强调“技术不是为工程师而生&#xff0c;而是为应用而生”。 胜意科技深度集成业内领先技术&#xff0c;将AI融入到实际的财务工作流中&#xff0c;与OCR、RPA等智能技术组合式输出&#xff0c…

Qt-qrencode生成二维码

Qt-qrencode开发-生成二维码&#x1f4c0; 文章目录 Qt-qrencode开发-生成二维码&#x1f4c0;[toc]1、概述&#x1f4f8;2、实现效果&#x1f4bd;3、编译qrencode&#x1f50d;4、在QT中引入编译为静态库的QRencode5、在Qt中直接使用QRencode源码6、在Qt中使用QRencode生成二…

Django Celery技术详解

文章目录 简介安装和配置创建并调度任务启动Celery Worker在视图中调用异步任务拓展功能 简介 Django Celery 是一个为Django应用程序提供异步任务处理能力的强大工具。它通过与消息代理&#xff08;如RabbitMQ、Redis&#xff09;集成&#xff0c;可以轻松地处理需要长时间运…

LAMP分布式安全方案搭建网页 (LinuxCentOS7+Apache+Mariadb+PHP)包括服务端口及防火墙规则配置

目录 一、实验目的 二、设计方案及规划 三、实验内容及步骤 &#xff08;1&#xff09;实验前基础配置 &#xff08;2&#xff09;Test配置&#xff0c;安装Firefox浏览器和图形界面 &#xff08;3&#xff09;Web安装Apache &#xff08;4&#xff09;Database安装Mari…

微服务架构-微服务架构的挑战与微服务化的具体时机

目录 一、微服务架构的挑战 1.1 概述 1.2 服务拆分 1.3 开发挑战 1.4 测试挑战 1.4.1 开箱即用、一键部署的集成环境 1.4.2 测试场景和测试确定性 1.4.3 微服务相关的非功能测试 1.4.4 自动化测试 1.5 运维挑战 1.5.1 监控 1.5.2 部署 1.5.3 问题追查 1.5.4 依赖管…

高等教育的AI革新:OpenAI面向大学推出ChatGPT Edu

OpenAI推出了ChatGPT Edu&#xff0c;这是一个为大学设计的专用版本&#xff0c;旨在让学生、教职员工、研究人员和校园运营能够负责任地使用AI。 ChatGPT Edu 将AI技术引入了教育领域&#xff0c;其建立在GPT-4o的基础上&#xff0c;它不仅能够处理文本和图像&#xff0c;还…

【机器学习】深入探索机器学习:线性回归算法的原理与应用

❀线性回归算法 &#x1f4d2;1. 引言&#x1f4d2;2. 线性回归的基本原理&#x1f389;回归方程&#x1f389;最小化误差&#x1f389;线性回归的假设条件 &#x1f4d2;3. 线性回归算法的实现&#x1f4d2;4. 线性回归算法的特征工程&#x1f4d2;5. 线性回归模型评估与优化&…

【学习笔记】数据结构(二)

线性表 文章目录 线性表1、线性结构2、线性表2.1 线性表定义2.2 类型定义2.2 顺序存储结构&#xff08;Sequence List&#xff09;2.3 链式存储结构2.3.1 单链表2.3.2 循环链表2.3.3 双链表2.3.4 单链表、循环链表、双向链表的时间效率比较2.3.5 链式存储结构优缺点 2.4 顺序表…

【数字化风向标】合合信息重磅登陆CDIE 2024:引领创新,门票惊喜大放送!

官.网地址&#xff1a;合合TextIn - 合合信息旗下OCR云服务产品 6月25-26日&#xff0c;CDIE 2024 数字化创新博览会将在上海张江科学会堂举行。本届展览规模3300㎡&#xff0c;展位数量100&#xff0c;重点打造四大核心特色主题展区&#xff0c;包括行业数字化创新展区、企业…

智和信通助力中国移动湖南某市分公司县级政府外网运维项目

中国移动湖南某市分公司承建市下属某县政务外网网络建设项目&#xff0c;且在网络建设完工后&#xff0c;承担起运维职责&#xff0c;随着工作的推进市移动公司发现仅靠人力难以高效开展运维工作。 设备类型&#xff1a;OLT、ONU等通信设备 设备品牌&#xff1a;华为、中兴等…

TQSDRPI开发板教程:实现LWIP自环

项目资源分享 链接&#xff1a;https://pan.baidu.com/s/1QckFYSwua-Fpxk3tewledQ 提取码&#xff1a;bewt 打开vivado2019.1创建工程 下一步 设置工程名称与地址。勾选reate…选项&#xff0c;会创建一个新的文件夹&#xff0c;项目保存在其中&#xff0c;文件夹名称与工程名…

【数据库】MySQL表的操作

目录 一.创建表 二.查看表 三.修改表 四.删除表 一.创建表 基本语法&#xff1a; CREATE TABLE table_name(field1 datatype,field2 datatype,field3 datatype) character set 字符集 collate 校验规则 engine 储存引擎field表示列名 datatype表示列的类型 charatcer se…

L1527射频编码芯片 百万组通用编码器,可替代EV1527

L1527 是CMOS 结构的预烧内码&#xff08;遥控中的地址码&#xff09;通用编码器&#xff0c;内有 20 位可预烧写 100 万组内码组合&#xff0c;使得重码率很低&#xff0c;具有更高安全性。芯片内集成误操作禁止功能&#xff0c;在按键输入有效且状态不变时&#xff0c;芯片连…

生产现场的作业标准化,这么做就对了!

制造型企业的生产过程是以计划的成本、工时生产出达到客户要求的产品。如果在制造过程中&#xff0c;产品工艺、作业方法或作业条件有所变化的话&#xff0c;一定无法生产出符合上述要求的产品。 因此&#xff0c;公司领导必须对作业工艺流程、作业方法、作业条件进行标准化管…

全是干货:融资融券(两融)名词科普!

一、两融内涵 融资融券&#xff0c;也被称为证券信用交易&#xff0c;其内涵主要涵盖以下方面&#xff1a; 首先&#xff0c;它指的是投资者向具有融资融券业务资格的证券公司提供担保物&#xff0c;并借入资金用于买入证券&#xff08;融资交易&#xff09;或借入证券并卖出&…

kettle 使用动态变量名定义变量

name是变量&#xff0c;value 值也是变量 我需要把name作为变量名&#xff0c;value作为变量值&#xff1b; 在kettle中&#xff0c;使用javascript脚本 key与lastVsxzl都是变量 //Script here setVariable(key,lastVsxzl,r);var rgetVariable(key,r); Demo 1、从记事本里面…

Python中限制输入数值范围的技术性探讨

目录 一、引言 二、使用内置函数限制输入范围 三、使用条件语句进行范围检查 四、使用异常处理增强鲁棒性 五、结合第三方库进行输入验证 六、总结 一、引言 在Python编程中&#xff0c;用户输入是程序与用户交互的重要方式之一。然而&#xff0c;由于用户输入的多样…

Capto 标准版【简体中文+Mac 】

Capto 是一套易于使用的屏幕捕捉、视频录制和视频编辑 Capto-capto安装包-安装包https://souurl.cn/DPhBmP 屏幕录制和教程视频制作 记录整个屏幕或选择的任何特定区域。在创建内容丰富的教程视频时选择显示或隐藏光标。无论您做什么&#xff0c;都可以确保获得高质量的视频。…

Arm发布Cortex X925、A725、A520,Armv9.2架构

随着半导体行业的不断发展&#xff0c;Arm 通过突破技术界限&#xff0c;为终端用户提供尖端解决方案&#xff0c;在核心和 IP 架构创新方面处于领先地位&#xff0c;尤其是在移动领域。2024 年&#xff0c;Arm 的年度战略进步重点是增强去年的 Armv9.2 架构&#xff0c;并带来…

kali系统baopoWiFi密码

kali系统baopoWiFi密码,仅供学习 取决强大的密码字典,如果别人密码设置的足够安全,也无法破解成功,并不是100%破解 一、准备一个无线网卡&#xff0c;需要免驱动&#xff0c;最好知道频率2.4HGZ还是5.0GHZ 二、插上USB接口&#xff0c;vmware模拟器选择连接虚拟机 三、输入命…