MySQL表的增删查改【基础部分】

2024-05-10 21:28

本文主要是介绍MySQL表的增删查改【基础部分】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据表的操作

新增

普通插入

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

注意: 此处的值要和表中的列相匹配

使用’‘单引号或者”“双引号来表示字符串

mysql> insert into student values(123,'zhangsan');
Query OK, 1 row affected (0.02 sec)

指定列插入

insert into 表名(列名,列名..)values(值,值..);
后面的值要与前面的列相对应
mysql> insert into student(name) values('lisi');
Query OK, 1 row affected (0.00 sec)

在这里插入图片描述
注意: 当我们指定列插入的时候,没有被指定的那一行(即没有插入数据的那一行则被填充为默认值;此处默认值为null

一次插入多行

insert into 表名 values(值,值...),(值,值...);
mysql> insert into student values(3,'天天'),(4,'多多');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

注意: 一次插入多行记录,相比于一次插入一行,分多次插入要快很多

DATETIME类型插入

(1)
可以是用一个固定格式的字符串,来表示时间日期

insert into student values(1,'zhangsan','2002-01-01 12:00:00');

(2)直接获取当前的时间

mysql> insert into student values(1,'zhangsan',now());
Query OK, 1 row affected (0.01 sec)

直接使用now()

查询

null参与任何运算以后,结果还是null

全列查询

select*from 表名;

把表中的所有行和所有列都查询出来

mysql> select*from student;
+------+----------+---------------------+
| id   | name     | birthday            |
+------+----------+---------------------+
|    1 | zhangsan | 2024-05-08 13:20:22 |
+------+----------+---------------------+
1 row in set (0.01 sec)

指定列查询

 select 列名,列名..from 表名;

比全列查询更加高效

查询字段为表达式

一边查询一边计算,在查询的时候,写作由列名构成的表达式,把这一列中的所有行都带入表达式中参与运算
(1)
在这里插入图片描述
(2)计算每个同学的总成绩
在这里插入图片描述
==(3)注意:==表达式查询是列和列之间的运算,把每一行都带入到这样的运算中,不是行与行之间的运算

查询的时候给列/表达式/表指定别名

select 表达式/列名 as 别名 from 表名;

as也可以省略,但是我们一般不建议省略
在这里插入图片描述

去重

distinct 修饰某个列/多个列值相同的行,只会保留一个

select distinct 列名 from 表名;

在这里插入图片描述
==注意:==如果distinct有多个列时,只有当它这两列对应的行信息完全相同时才会去重

查询的时候排序

把行进行排序
明确排序规则
(1)针对哪个列作为比较规则
(2)排序的时候是升序还是降序

select 列名 from 表名 order by 列名 asc/desc;

PS:(1)order by 列名,这块的列名是指定某个列进行排序;
asc表示升序排序,desc表示降序排序,如果没有写这两个,那么默认为升序排序

(2)mysql是一个客户端服务器结构的程序,把请求发给服务器之后,服务器进行查询数据,并且把查询到的结果进行排序之后,再组织成响应数据返回客户端**(排序仍然是针对临时数据来展开的,此处的排序不影响原有数据在mysql服务器上存储的顺序)**
在这里插入图片描述
(3)在这里插入图片描述(4)根据表达式进行排序
在这里插入图片描述
PS:在使用表达式的时候可以使用别名
在这里插入图片描述
(5)指定多个列来排序(重要),即order by后面有多个列,多个列之间使用,来分割开
在这里插入图片描述
多个列之间排序是有优先级的,写在前面的先排序,后面的依次

条件查询(重要)

会指定具体的条件,按照条件针对数据进行筛选

select 列名 from 表名 where 条件;

遍历这个表的每一行记录,把每一行的数据分别带入到条件中,如果条件成立,这个记录会被放入结果集合中;如果条件不成立,这个记录会被pass
(1)比较运算符
在这里插入图片描述
(2)逻辑运算符
在这里插入图片描述
PS:不能使用别名来汇总表达式将其使用在比较查询中(不能在where语句中使用别名)
(3)like详细说明
like模糊匹配:使用通配符,就是一些特殊的字符来表示一些特定的含义;
%:代指任意个任意字符;_:代指一个任意字符
在这里插入图片描述
PS:【1】0个字符也可以被%匹配出来,如下图所示
在这里插入图片描述
【2】%的使用:孙%:查询以 孙 开头的内容;%孙: 查询以 孙 结尾的内容;%孙%: 查询包含孙的.

总结: 此处模糊查询的功能是有限的,就像没有办法查询名字中带两个孙的这样的列及内容;
但在计算机中,进行模糊匹配字符串还有‘正则表达式’,通过这样的方式实现,但是正则表达式匹配速度很慢

正则表达式: javaSE中String的一个方法split,参数其实就是一个正则表达式;比如按照 . 来切分,就需要写作 “\.”;如果是有原始字符串,就可以写简单了

分页查询(LIMIT)

select*这样的查询方式太危险了,一次性查询出来的东西太多了,所以我们使用分页查询(limit)去限制这次最多查询出多少个结果
(1)此时就是只查询3条数据,这块也可以写成limit 3 offest 0;在这里插入图片描述(2)我们使用offest来达到查询3条下面的3条(4、5、6)和3条再下面的3条(7、8、9);offest是一个偏移量,一个下标此时就是只查询3条数据

修改

普通修改

update 表名 set列名=值 where 条件;

==注意:==update后面不加任何条件,就是针对所有行进行修改(即不添加where条件)

mysql> select*from user;
+------+--------+--------+
| ID   | accout | amount |
+------+--------+--------+
|   45 |    123 |   2000 |
|  355 |    246 |    900 |
|  199 |    145 |   4000 |
|  123 |   NULL |   2000 |
+------+--------+--------+
4 rows in set (0.00 sec)
mysql> update user set ID=66 where accout=123 and amount=2000;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0mysql> select*from user;
+------+--------+--------+
| ID   | accout | amount |
+------+--------+--------+
|   66 |    123 |   2000 |
|  355 |    246 |    900 |
|  199 |    145 |   4000 |
|  123 |   NULL |   2000 |
+------+--------+--------+
4 rows in set (0.00 sec)

where条件来限制我们修改哪些行数据,它的用法和select里面的where用法是相同的,我们直接可以看上面的笔记

一次修改多个列

update 表名 set列名=值,列名=... where条件;

这里的=就不是比较相等了,是赋值的作用

mysql> update user set ID=67,accout=124 where amount=2000;
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2  Changed: 2  Warnings: 0
mysql> select*from user;
+------+--------+--------+
| ID   | accout | amount |
+------+--------+--------+
|   67 |    124 |   2000 |
|  355 |    246 |    900 |
|  199 |    145 |   4000 |
|   67 |    124 |   2000 |
+------+--------+--------+
4 rows in set (0.00 sec)

PS:mysql> select * from exam result order by chinese + math + english limit 3;
这样的写法表示的是倒数后三行的信息,我们可以使用order by和limit来达到这样的效果

删除

普通删除

delete from 表名 where条件/order by/limit;

删除整张表

不指定任何条件,就是删除整张表

delete from 表名;

PS:(1)drop table 表名是删除了表和表中的所有数据,这个表彻底不存在了
(2)delete from 表名只是删除了表里面的数据,但是表依然是存在的,只是我们得到的就是一张空表了

总结

(1)delete和update都是很危险的操作,delete一旦删除的条件没有设置好,就可能把不该删的数据删掉
(2)这的删除/修改都是持久生效的,都会影响到数据库服务器硬盘中的数据

这篇关于MySQL表的增删查改【基础部分】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/977598

相关文章

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Mysql DATETIME 毫秒坑的解决

《MysqlDATETIME毫秒坑的解决》本文主要介绍了MysqlDATETIME毫秒坑的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 今天写代码突发一个诡异的 bug,代码逻辑大概如下。1. 新增退款单记录boolean save = s

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

MySQL中的锁和MVCC机制解读

《MySQL中的锁和MVCC机制解读》MySQL事务、锁和MVCC机制是确保数据库操作原子性、一致性和隔离性的关键,事务必须遵循ACID原则,锁的类型包括表级锁、行级锁和意向锁,MVCC通过非锁定读和... 目录mysql的锁和MVCC机制事务的概念与ACID特性锁的类型及其工作机制锁的粒度与性能影响多版本

MYSQL行列转置方式

《MYSQL行列转置方式》本文介绍了如何使用MySQL和Navicat进行列转行操作,首先,创建了一个名为`grade`的表,并插入多条数据,然后,通过修改查询SQL语句,使用`CASE`和`IF`函... 目录mysql行列转置开始列转行之前的准备下面开始步入正题总结MYSQL行列转置环境准备:mysq

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX