MySQL表的增删改查基础教程


Posted in MySQL onApril 07, 2021

1. 新增(Create)

insert into [表名] (字段1, 字段2,....) value (value1, value2, ...);

insert into [表名] (字段1, 字段2, ....) values
(value1, ...),
(value2, ...),
(value3, ...);

实例:

创建一个学生成绩表

CREATE TABLE exam_result (
 id INT,
 name VARCHAR(20),
 chinese DECIMAL(3,1),
 math DECIMAL(3,1),
 english DECIMAL(3,1)
);

1.1 单行数据 + 全列插入

-- 插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致
insert into exam_result value ( 1, 'tom', 68, 98, 56); 
insert into exam_result value ( 2, 'jum', 87.5, 78, 77);

每次插入数据, 为一条记录, 包含了若干个列~~

列的数目和数据类型要和表的结构对应~

value 前省略指定列默认为全列插入

1.2 多行数据 + 指定列

- 插入两条记录,value_list 数量必须和指定列数量及顺序一致
INSERT INTO exam_result (id,name, chinese, math, english) VALUES
 (1,'tom', 67, 98, 56),
 (2,'jum', 87.5, 78, 77),
 (3,'lim', 88, 98.5, 90),
 (4,'tim', 82, 84, 67),
 (5,'huy', 55.5, 85, 45),
 (6,'sun', 70, 73, 78.5),
 (7,'ming', 75, 65, 30);

2. 查询(Retrieve)

2.1 全列查询

select * from [表名];

MySQL表的增删改查基础教程

*表示通配符, 意思就是查找所有的列

2.2 指定列查询

select [指定查询列] from [表名];

MySQL表的增删改查基础教程

2.3 查询字段为表达式

select [字段表达式] from [表名];

MySQL表的增删改查基础教程

2.4 别名

select colum [as] [列名] from [表名];

MySQL表的增删改查基础教程

2.5 去重: DISTINCT

使用 distinct 关键字对某列数据去重

--98 分重复了
select math from exam_result;
+------+
| math |
+------+
| 98.0 |
| 78.0 |
| 98.0 |
| 84.0 |
| 85.0 |
| 73.0 |
| 65.0 |
+------+

-- 去重结果
select distinct math from exam_result;
+------+
| math |
+------+
| 98.0 |
| 78.0 |
| 84.0 |
| 85.0 |
| 73.0 |
| 65.0 |
+------+

2.6 排序: ORDER BY

select * from [表名] order by [排序字段];

用 order by 指定某一列进行排序, 默认按照升序排序.

显式加上 desc , 就是降序排序. 使用 asc 也是升序

select name, math from exam_result order by math desc;
+------+------+
| name | math |
+------+------+
| tom | 98.0 |
| lim | 98.0 |
| huy | 85.0 |
| tim | 84.0 |
| jum | 78.0 |
| sun | 73.0 |
| ming | 65.0 |
+------+------+

NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面

排序也可以指定多个列执行

select * from exam_result order by math desc, chinese desc;
+------+------+---------+------+---------+
| id | name | chinese | math | english |
+------+------+---------+------+---------+
| 3 | lim | 88.0 | 98.0 | 90.0 |
| 1 | tom | 67.0 | 98.0 | 56.0 |
| 5 | huy | 55.5 | 85.0 | 45.0 |
| 4 | tim | 82.0 | 84.0 | 67.0 |
| 2 | jum | 87.5 | 78.0 | 77.0 |
| 6 | sun | 70.0 | 73.0 | 78.5 |
| 7 | ming | 75.0 | 65.0 | 30.0 |
+------+------+---------+------+---------+

多列排序时, 是在第一列区分不出来大小的时候, 再按第二列排序.

2.7 条件查询: WHERE

比较运算符

运算符 说明
>, >=, <, <= 大于,大于等于,小于,小于等于
= 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=> 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <> 不等于
BETWEEN a0 AND a1 范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
IN (option, …) 如果是 option 中的任意一个,返回 TRUE(1)
IS NULL 是 NULL
IS NOT NULL 不是 NULL
LIKE 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

逻辑运算符:

运算符 说明
AND 多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR 任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT 条件为 TRUE(1),结果为 FALSE(0)

注意:

  • 列的别名不能再 where 中使用~~
  • AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分

实例:

基本查询:

-- 查询英语不及格的同学及英语成绩 ( < 60 )
select name, english from exam_result where english < 60;

-- 查询语文成绩好于英语成绩的同学
select name, chinese, english from exam_result where chinese > english;

-- 查询总分在 200 分以下的同学
select name, chinese + math + english as total from exam_result where chinese + math + english < 200;

AND 与 OR:

-- 查询语文成绩大于80分,且英语成绩大于80分的同学
select * from exam_result where chinese > 80 and english > 80;

-- 查询语文成绩大于80分,或英语成绩大于80分的同学
select * from exam_result where chinese > 80 or english > 80;

关于优先级问题, and 比 or 更优先,

范围查询:

1.BETWEEN … AND …

-- 查询语文成绩在 [80, 90] 分的同学及语文成绩
select name, chinese from exam_result where chinese BETWEEN 80 AND 90;

select name, chinese, from exam_result where chinese >= 80 and chinese <= 90;

IN

-- 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
select name, math from exam_result where math in (58, 59, 98, 99);

模糊查询: LIKE

select name from exam_result where name like 't%';
+------+
| name |
+------+
| tom |
| tim |
+------+

% 是一个通配符, 可以用来代替任意多个字符

t% 找出以 t 开头的字符串

%t 找出以 t 结尾的字符串

%t% 找出包含 t 的

除了 % 之外, 还有 _ ,(_ 只能代表一个字符~)

select name from exam_result where name like 't__';
+------+
| name |
+------+
| tom |
| tim |
+------+

通配符也能针对数字进行模糊查询

select name, chinese from exam_result where chinese like '%8%';
+------+---------+
| name | chinese |
+------+---------+
| jum |  87.5 |
| lim |  88.0 |
| tim |  82.0 |
+------+---------+

注意:

模糊查询看起来比较好用, 实际执行效率低下

NULL 的查询: IS [NOT] NULL

select name from exam_result where id id not null;

2.8 分页查询: LIMIT

-- 最初数据表
select * from exam_result;
+------+------+---------+------+---------+
| id  | name | chinese | math | english |
+------+------+---------+------+---------+
|  1 | tom |  67.0 | 98.0 |  56.0 |
|  2 | jum |  87.5 | 78.0 |  77.0 |
|  3 | lim |  88.0 | 98.0 |  90.0 |
|  4 | tim |  82.0 | 84.0 |  67.0 |
|  5 | huy |  55.5 | 85.0 |  45.0 |
|  6 | sun |  70.0 | 73.0 |  78.5 |
|  7 | ming |  75.0 | 65.0 |  30.0 |
+------+------+---------+------+---------+

-- 前三条记录
select * from exam_result limit 3;
+------+------+---------+------+---------+
| id  | name | chinese | math | english |
+------+------+---------+------+---------+
|  1 | tom |  67.0 | 98.0 |  56.0 |
|  2 | jum |  87.5 | 78.0 |  77.0 |
|  3 | lim |  88.0 | 98.0 |  90.0 |
+------+------+---------+------+---------+

-- 从第三条开始的三条记录
select * from exam_result limit 3 offset 3;
+------+------+---------+------+---------+
| id  | name | chinese | math | english |
+------+------+---------+------+---------+
|  4 | tim |  82.0 | 84.0 |  67.0 |
|  5 | huy |  55.5 | 85.0 |  45.0 |
|  6 | sun |  70.0 | 73.0 |  78.5 |
+------+------+---------+------+---------+

offset 表示从第几条开始查找, offset 可以省略

select * from exam_result limit 3 , 4;
+------+------+---------+------+---------+
| id  | name | chinese | math | english |
+------+------+---------+------+---------+
|  4 | tim |  82.0 | 84.0 |  67.0 |
|  5 | huy |  55.5 | 85.0 |  45.0 |
|  6 | sun |  70.0 | 73.0 |  78.5 |
|  7 | ming |  75.0 | 65.0 |  30.0 |
+------+------+---------+------+---------+

3. 修改(Update)

? 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分

update exam_result set math = math + 30 order by chinese + math + english limit 3;

update 不加条件, 就可以针对所有

4. 删除(Delete)

delete from [表名];
-- 删除 ming 同学的考试成绩
delete from exam_result where name = 'ming';

-- 删除整张表
delete from exam_result;

如果不指定条件, 此时就把整个表删除掉了, (与 drop 删除表还有不同)

delete 删除后表为 null, drop 删除后表就不存在了

5. 常用 新增

-- 单行插入
insert into [表名] (字段1, ..., 字段N) values (value1, ...,value N);
-- 多行插入
insert into [表名](字段1, ..., 字段N) values
(value1, ...),
(value2, ...),
(value3, ...);

查询

--全表查询
select * from [表名];
--指定列查询
select [列名1, 列名2,...] from [表名];
--查询表达式字段
select [表达式1, 表达式2,...] from [表名];
--别名
select 
--去重 DISTINCT
select distinct [字段] from [表名];
-- 排序ORDER BY
select * from [表名] order by [排序字段];
-- 条件查询WHERE
-- (1)比较运算符 (2)BETWEEN ... AND ... (3)IN (4)IS NULL (5)LIKE (6)AND (7)OR 
(8)NOT
select * from [表名] where [条件];

修改

update [表] set [修改内容1, 修改内容2, ....] where [条件];

删除

delete from [表名] where [条件];

总结

到此这篇关于MySQL表增删改查的文章就介绍到这了,更多相关MySQL表增删改查内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL数字类型自增的坑
May 07 MySQL
使用ORM新增数据在Mysql中的操作步骤
Jul 26 MySQL
MySQL实例精讲单行函数以及字符数学日期流程控制
Oct 15 MySQL
mysql事务对效率的影响分析总结
Oct 24 MySQL
mysql函数全面总结
Nov 11 MySQL
解决Mysql多行子查询的使用及空值问题
Jan 22 MySQL
mysql下的max_allowed_packet参数设置详解
Feb 12 MySQL
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
Apr 18 MySQL
Mysql数据库事务的脏读幻读及不可重复读详解
May 30 MySQL
MySQL优化之慢日志查询
Jun 10 MySQL
MySQL如何修改字段类型和字段长度
Jun 10 MySQL
MySQL生成千万测试数据以及遇到的问题
Aug 05 MySQL
mysql批量新增和存储的方法实例
Apr 07 #MySQL
Mysql 性能监控及调优
数据库连接池
mysql优化
Apr 06 #MySQL
Windows10下安装MySQL8
Mysql 如何批量插入数据
Apr 06 #MySQL
MySQL之DML语言
Apr 05 #MySQL
You might like
php中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
php实现MD5加密16位(不要默认的32位)
2013/08/12 PHP
php inc文件使用的风险和注意事项
2013/11/12 PHP
win7系统配置php+Apache+mysql环境的方法
2015/08/21 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
2016/05/20 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
jQuery 判断页面元素是否存在的代码
2009/08/14 Javascript
网页自动跳转代码收集
2009/09/27 Javascript
深入解析JavaScript的闭包机制
2015/10/20 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
第一次接触Bootstrap框架
2016/10/24 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
Vue 父子组件的数据传递、修改和更新方法
2018/03/01 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
2021/01/29 Vue.js
python删除文件示例分享
2014/01/28 Python
Python中关键字is与==的区别简述
2014/07/31 Python
把MySQL表结构映射为Python中的对象的教程
2015/04/07 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
Python numpy生成矩阵、串联矩阵代码分享
2017/12/04 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
python paramiko利用sftp上传目录到远程的实例
2019/01/03 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
什么是唯一索引
2015/07/05 面试题
七一党建活动方案
2014/01/28 职场文书
学术会议主持词
2014/03/17 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
国庆阅兵观后感
2015/06/15 职场文书
保护环境建议书作文500字
2015/09/14 职场文书
教你如何让spark sql写mysql的时候支持update操作
2022/02/15 MySQL