目录
- 查看库中的表" >- 查看库中的表
- 查看表结构" >- 查看表结构
- 删除表" >- 删除表
- 重命名表" >- 重命名表
三、MySQL 中的增删查改操作" >三、MySQL 中的增删查改操作
- 增加(insert语句)" >- 增加(insert语句)
- 查询(select语句)" >- 查询(select语句)
- 修改(update)" >- 修改(update)
- 删除(delete)" >- 删除(delete)
首页 数据库 mysql教程 一文详解MySQL表的CURD操作

一文详解MySQL表的CURD操作

Feb 15, 2023 pm 03:32 PM
mysql

本篇文章带大家详细了解MySQL表的CURD操作,希望对大家有所帮助!

一文详解MySQL表的CURD操作

一、SQL语句

操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准,简称SQL。

- SQL通用语法

1 . SQL语句可以单行或多行书写,以分号结尾。

2 . SQL语句可以使用空格/缩进来增强语句的可读性。

3 . MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。

- 注释
  • 单行注释: – 注释内容 或者使用 # 注释内容 。
  • 多行注释:/* 注释内容 */
- SQL语句分类
分类 说明
DDL(deifnition) 数据定义语言(用来定义数据库对象,数据库,表,字段)
DML(manipulation) 数据操纵语言(对数据库 表中的是数据进行增删改)
DQL(query) 数据查询语言,用来查询数据库中表的记录
DCL(control) 数据控制语言,用来创建数据库用户,控制数据库的访问权限

二、 基础表操作

- 创建表
  • 同一个数据库中,不能有两个表的名字相同,表名和列名不能和SQL的关键词重复。

  • 语法:

create table 表名(定义列1, 定义列2, .......);
列 -> 变量名 数据类型
登录后复制
  • 举例:
mysql> create table if not exists book(
    ->   book_name varchar(32) comment '图书名称',
    ->   book_author varchar(32)comment  '图书作者' ,
    ->   book_price decimal(12,2) comment '图书价格',
    ->   book_category varchar(12) comment '图书分类',
    ->   publish_data timestamp
    -> )character set utf8mb4;
    
Query OK, 0 rows affected (0.04 sec)
登录后复制
- 查看库中的表
  • 语法:

    show tables;
    登录后复制
  • 举例:

    mysql> show tables;
    +--------------------+
    | Tables_in_mytestdb |
    +--------------------+
    | book               |
    +--------------------+
    1 row in set (0.00 sec)
    登录后复制
- 查看表结构
  • 语法:

    desc  表名;
    登录后复制
  • 举例:
    image-20230104165942892

MySQL数据库中的表结构主要包含以下几种信息: 字段名称,字段类型,是否允许为空,索引类型。默认值,扩充信息

- 删除表
  • 语法:
drop table 表名
登录后复制
  • 举例 :
mysql> desc test1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(10) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

mysql> drop table test1;
Query OK, 0 rows affected (0.04 sec)

mysql> desc test1;
ERROR 1146 (42S02): Table 'mytestdb.test1' doesn't exist
登录后复制
- 重命名表
  • 语法:

    rename table old_name to new_name;
    登录后复制
  • 举例:

    mysql> rename table book to eBook;
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> show tables;
    +--------------------+
    | Tables_in_mytestdb |
    +--------------------+
    | ebook              |
    +--------------------+
    1 row in set (0.00 sec)
    登录后复制

三、MySQL 中的增删查改操作

CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写

案例:

-- 创建一张图书表
mysql> create table if not exists book(
    ->   book_name varchar(32) comment '图书名称',
    ->   book_author varchar(32)comment  '图书作者' ,
    ->   book_price decimal(12,2) comment '图书价格',
    ->   book_category varchar(12) comment '图书分类',
    ->   publish_data timestamp
    -> )character set utf8mb4;
登录后复制
- 增加(insert语句)
  • 单行插入(全列)

    insert into 表名 values(对应列的参数列表); 
    -- 一次插入一行
    登录后复制
  • 多行插入(全列)

    insert into 表名 values(对应列的实参列表), (对应列的参数列表), (对应列的参数列表);              
    -- 一次插入多行            -- 一次插入多行
    登录后复制
  • 指定列插入

    • values 后面( )中的内容, 个数和类型要和表名后面( )中指定的结构匹配.
    • 未被指定的列会以默认值进行填充.
    insert into 表名 (需要插入的列) values(对应列的参数列表); 
    -- 一次插入一行
    insert into 表名 (需要插入的列) values(对应列的参数列表), (), ().... 
    -- 一次插入多行
    登录后复制
  • 案例

    # 单行输入
    
    mysql> 
    insert into book values('计算机网络','谢希仁',45,'计算机类','2020-12-25 12:51:00');
    Query OK, 1 row affected (0.01 sec)
    
    #多行输入
    
    mysql> 
    insert into book values('计算机组成原理','王峰',45,'硬件类','2020-12-12 12:00:00'),
        -> ('微机原理','李华',97,'硬件类','2000-12-19 20:00:00');
        
    Query OK, 2 rows affected (0.04 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    #指定列插入
    
    mysql>
    insert into book(book_name,book_author,publish_data) values ('软件工程','张三','2020-05-06 12:00:00');
    Query OK, 1 row affected (0.02 sec)
    登录后复制
  • 插入数据后的表如图所示:

    image-20230104214245702

在MySQL当中 , 多条记录逐次插入的效率是要低于一次把多条纪录一起插入的 ,原因如下:

  • 网络请求和响应时间开销 , 每次插入都会有一定的时间开销.
  • 数据库服务器是把数据保存在硬盘上的 , IO操作时,操作的次数带来的影响大于数据量.
  • 每一次sql操作,内部开启的事务也会占据一定的开销.
- 查询(select语句)
  • 全列查询

语法

select * from 表名

--  * 表示通配符, 可以匹配表中的所有列.
登录后复制

企业级别的数据库中慎用, 容易把I/O或者网络带宽吃满,如果有外边的用户客户端要通过宽带访问服务器时,服务器就无法做出正确的响应.

示例

select * from book;
登录后复制

image-20230106171654355

  • 指定列查询
select 列名...  from  表名
登录后复制
  • 示例
mysql> select book_name from book;
+----------------+
| book_name      |
+----------------+
| 计算机网络     |
| 计算机组成原理 |
| 微机原理       |
| 软件工程       |
+----------------+
4 rows in set (0.01 sec)

mysql> select book_author,book_price from book;
+-------------+------------+
| book_author | book_price |
+-------------+------------+
| 谢希仁      |      45.00 |
| 王峰        |      45.00 |
| 李华        |      97.00 |
| 张三        |       NULL |
+-------------+------------+
4 rows in set (0.00 sec)
登录后复制
  • 查询你字段为表达式
select 字段或表达式, 字段或表达式... from 表名;
登录后复制
  • 示例
-- 查询图书涨价10元后所有图书的名称作者和价格
mysql> select book_name ,book_author,book_price + 10 from book;
+----------------+-------------+-----------------+
| book_name      | book_author | book_price + 10 |
+----------------+-------------+-----------------+
| 计算机网络     | 谢希仁      |           55.00 |
| 计算机组成原理 | 王峰        |           55.00 |
| 微机原理       | 李华        |          107.00 |
| 软件工程       | 张三        |            NULL |
+----------------+-------------+-----------------+
4 rows in set (0.00 sec)
登录后复制
  • 将表达式或者字段指定别名查询

mysql中支持给所查询的表达式取一个别名 , 使用 as 可以使查询结果更加直观 , 代码的可读性也会更强.

select 列名或表达式 as 别名, ... from 表名;
登录后复制
  • 示例
-- 将涨价20元后的图书价格取为别名newprice
mysql> select book_name,book_author,book_price + 20 as newprice from book;
+----------------+-------------+----------+
| book_name      | book_author | newprice |
+----------------+-------------+----------+
| 计算机网络     | 谢希仁      |    65.00 |
| 计算机组成原理 | 王峰        |    65.00 |
| 微机原理       | 李华        |   117.00 |
| 软件工程       | 张三        |     NULL |
+----------------+-------------+----------+
4 rows in set (0.00 sec)
登录后复制
  • 去重查询
select distinct 列名 from 表名
登录后复制
  • 示例
--book 表中插入一条重复的book_name数据

mysql> insert into book values('计算机网络','张华',89,'计算机类','2020-11-23 11:00:00');
Query OK, 1 row affected (0.00 sec)

mysql> select book_name from book;
+----------------+
| book_name      |
+----------------+
| 计算机网络     |
| 计算机组成原理 |
| 微机原理       |
| 软件工程       |
| 计算机网络     |
+----------------+
5 rows in set (0.00 sec)

mysql> select distinct book_name from book;
+----------------+
| book_name      |
+----------------+
| 计算机网络     |
| 计算机组成原理 |
| 微机原理       |
| 软件工程       |
+----------------+
4 rows in set (0.00 sec)
登录后复制

查询结果当中,没有了重复的book _ name 元素,达到了去重效果.

  • 排序查询
select 列名 
from 表名 
order by 列名 asc(升序)/desc(降序); 
#  想要排序的列
登录后复制
  • 示例
# 按照书的价格升序进行排列
mysql> select book_name,book_price from book order by book_price asc;
+----------------+------------+
| book_name      | book_price |
+----------------+------------+
| 软件工程       |       NULL |
| 计算机网络     |      45.00 |
| 计算机组成原理 |      45.00 |
| 计算机网络     |      89.00 |
| 微机原理       |      97.00 |
+----------------+------------+
5 rows in set (0.00 sec)

#按照书的价格降序进行排列
mysql> select book_name,book_price from book order by book_price desc;
+----------------+------------+
| book_name      | book_price |
+----------------+------------+
| 微机原理       |      97.00 |
| 计算机网络     |      89.00 |
| 计算机网络     |      45.00 |
| 计算机组成原理 |      45.00 |
| 软件工程       |       NULL |
+----------------+------------+
5 rows in set (0.00 sec)
登录后复制
  • 使用排序查询时 , 升序查询 asc 可以省略, 即默认为升序排列, null值一定为其中最小的.
  • 可以对多个字段进行排序,优先级按照书写的顺序进行.
  • 示例
# 查询按照价格升序 ,年份降序
select name,price,age from book order by price asc,age desc;
#查询按照总成绩进行降序
select name,english+math+chinese as total from grade order by total desc;
登录后复制
  • 条件查询

当我们使用查询时, 通常具有各种各样的前提条件 , 此时就需要使用条件查询来完成.

select 列名.. from 表名..where + 条件
登录后复制

比较运算符

运算符说明
>, >=, <, <=大于,大于等于,小于,小于等于
=等于,null 不安全,例如 null = null 的结果是 null(false)
<=>等于,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 , 结果才为true
or任意一个条件为true 结果才为true
not条件为true , 结果为false

  • WHERE条件可以使用表达式,但不能使用别名。

  • AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分

  • 案例
-- 查询图书价格低于50的图书作者和图书名称
mysql> select book_name,book_author from book where book_price < 50;
+----------------+-------------+
| book_name      | book_author |
+----------------+-------------+
| 计算机网络     | 谢希仁      |
| 计算机组成原理 | 王峰        |
+----------------+-------------+
2 rows in set (0.05 sec)  
-- 查询图书价格等于97的图书作者
mysql> select book_name ,book_author from book where book_price = 97;
+-----------+-------------+
| book_name | book_author |
+-----------+-------------+
| 微机原理  | 李华        |
+-----------+-------------+
1 row in set (0.00 sec)
-- 查询图书价格在50 - 100 之间的图书名称
mysql> select book_name from book where book_price between 50 and 100;
+------------+
| book_name  |
+------------+
| 微机原理   |
| 计算机网络 |
+------------+
2 rows in set (0.02 sec)\
-- 查询图书价格在此范围内的图书名称
mysql> select book_name from book where book_price in (12,45);
+----------------+
| book_name      |
+----------------+
| 计算机网络     |
| 计算机组成原理 |
+----------------+
2 rows in set (0.00 sec)
登录后复制

模糊查询

  • % 匹配任意多个(包括 0 个)字符
  • _ 匹配严格的一个字符
#查询姓张的作者的书本价格书名.
mysql> select book_price,book_name,book_author from book where book_author like &#39;张%&#39;;

+------------+------------+-------------+
| book_price | book_name  | book_author |
+------------+------------+-------------+
|       NULL | 软件工程   | 张三        |
|      89.00 | 计算机网络 | 张华        |
+------------+------------+-------------+
2 rows in set (0.00 sec)
# 查询前缀为&#39;计算机&#39;后缀为七个字的书籍名称
mysql> select book_name from book where book_name like &#39;计算机____&#39;;
+----------------+
| book_name      |
+----------------+
| 计算机组成原理 |
+----------------+
#查询前缀为&#39;计算机&#39;的书籍名称并去重
mysql> select distinct book_name from book where book_name like &#39;计算机%&#39;;
+----------------+
| book_name      |
+----------------+
| 计算机网络     |
| 计算机组成原理 |
+----------------+
2 rows in set (0.00 sec)
登录后复制
  • 分页查询

分页查询即将查询出的结果 , 按页进行呈现,并不是一次性展现出来,这种模式就是分页查询, mysql当中使用limit来实现分页查询.

  • limit 子句当中接受一个或者两个参数 , 这两个参数的值为0 或者正整数

两个参数的limit子句的用法

select 元素1,元素2  from 表名  limit offset,count;

#offset参数指定要返回的第一行的偏移量。第一行的偏移量为0,而不是1。
#count指定要返回的最大行数。
登录后复制

img

示例:

mysql> select book_author from book limit 2, 3;
+-------------+
| book_author |
+-------------+
| 李华        |
| 张三        |
| 张华        |
+-------------+
3 rows in set (0.02 sec)

#表示获取列表当中偏移量为2(表示从第3行开始), 最大行数为3的作者名称
登录后复制

带有一个参数的limit子句的用法

select 列名1.列名2 from 表名 limit count;
#  表示从结果集的开头返回的最大行数为count;
#  获取前count行的记录
登录后复制

等同于

select 列名1 ,列名2 from 表名 limit 0 , count;# 第一行的偏移量为0
登录后复制

示例

mysql> select book_price from book limit 5;
+------------+
| book_price |
+------------+
|      45.00 |
|      45.00 |
|      97.00 |
|       NULL |
|      89.00 |
+------------+
5 rows in set (0.00 sec)

# 获取表中前五行的图书价格 , 最大行数为5
登录后复制
  • limit 结合 order by 语句 和其他条件可以获取n个最大或者最小值

    select book_name,book_price from book order by book_price desc limit 3; 
    #获取价格前三高的图书名称和图书价格
    mysql> select book_price,book_name from book order by book_price desc limit 3;
    +------------+------------+
    | book_price | book_name  |
    +------------+------------+
    |      97.00 | 微机原理   |
    |      89.00 | 计算机网络 |
    |      45.00 | 计算机网络 |
    +------------+------------+
    3 rows in set (0.01 sec)
    登录后复制
  • 使用limit 获取第n高个最大值

偏移量从0开始,所以要指定从n - 1 开始,然后取一行记录

#示例:获取价格第二高的图书名称
 mysql> select book_name from book order by book_price desc limit 1,1;
+------------+
| book_name  |
+------------+
| 计算机网络 |
+------------+
1 row in set (0.00 sec)
登录后复制
- 修改(update)

MySQL当中使用update关键字来对数据进行修改 , 既可以修改单列又可以修改多列.

update 表名 set 列名1 = 值 , 列名2 = 值 ... where 限制条件下修改
登录后复制
  • SET子句指定要修改的列和新值。要更新多个列,请使用以逗号分隔的列表。以字面值,表达式或子查询的形式在每列的赋值中来提供要设置的值。
  • 第三,使用WHERE子句中的条件指定要更新的行。WHERE子句是可选的。 如果省略WHERE子句,则UPDATE语句将更新表中的所有行。

示例:

#将书名为&#39;软件工程&#39;的图书价格修改为66元
mysql> update book set book_price = 66 where book_name = &#39;软件工程&#39;;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select book_price from book where book_name = &#39;软件工程&#39;;
+------------
| book_price |
+------------+
|      66.00 |
+------------+
1 row in set (0.00 sec)

#将所有的图书价格修改为原来的二倍
mysql> update book set book_price = 2 * book_price;
Query OK, 5 rows affected (0.02 sec)
Rows matched: 5  Changed: 5  Warnings: 0
#更新成功
mysql> select book_price from book;
+------------+
| book_price |
+------------+
|      90.00 |
|      90.00 |
|     194.00 |
|     132.00 |
|     178.00 |
+------------+
5 rows in set (0.00 sec)
登录后复制
- 删除(delete)

要从表中删除数据,需要使用delete 语句, delete 语句的 用法如下

delete from 表名 where + 条件
登录后复制

首先指定需要删除数据的表,其次使用条件指定where子句中删除的行记录, 如果行匹配条件,这些行记录将会删除.

WHERE子句是可选的。如果省略WHERE子句,DELETE语句将删除表中的所有行 , 请注意,一旦删除数据,它就会永远消失。因此,在执行DELETE语句之前,应该先备份数据库,以防万一要找回删除过的数据。

示例

#删除图书表中图书单价大于150的图书记录
mysql> delete from book where book_price > 150;
Query OK, 2 rows affected (0.01 sec)

mysql> select book_price from book;
+------------+
| book_price |
+------------+
|      90.00 |
|      90.00 |
|     132.00 |
+------------+
3 rows in set (0.00 sec)
登录后复制

MySQL中delete 语句也可以结合limit语句 和 order by 语句来控制删除的数量和条件

【相关推荐:mysql视频教程

以上是一文详解MySQL表的CURD操作的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

mysql用户和数据库的关系 mysql用户和数据库的关系 Apr 08, 2025 pm 07:15 PM

MySQL 数据库中,用户和数据库的关系通过权限和表定义。用户拥有用户名和密码,用于访问数据库。权限通过 GRANT 命令授予,而表由 CREATE TABLE 命令创建。要建立用户和数据库之间的关系,需创建数据库、创建用户,然后授予权限。

RDS MySQL 与 Redshift 零 ETL 集成 RDS MySQL 与 Redshift 零 ETL 集成 Apr 08, 2025 pm 07:06 PM

数据集成简化:AmazonRDSMySQL与Redshift的零ETL集成高效的数据集成是数据驱动型组织的核心。传统的ETL(提取、转换、加载)流程复杂且耗时,尤其是在将数据库(例如AmazonRDSMySQL)与数据仓库(例如Redshift)集成时。然而,AWS提供的零ETL集成方案彻底改变了这一现状,为从RDSMySQL到Redshift的数据迁移提供了简化、近乎实时的解决方案。本文将深入探讨RDSMySQL零ETL与Redshift集成,阐述其工作原理以及为数据工程师和开发者带来的优势。

MySQL:初学者的数据管理易用性 MySQL:初学者的数据管理易用性 Apr 09, 2025 am 12:07 AM

MySQL适合初学者使用,因为它安装简单、功能强大且易于管理数据。1.安装和配置简单,适用于多种操作系统。2.支持基本操作如创建数据库和表、插入、查询、更新和删除数据。3.提供高级功能如JOIN操作和子查询。4.可以通过索引、查询优化和分表分区来提升性能。5.支持备份、恢复和安全措施,确保数据的安全和一致性。

mysql用户名和密码怎么填 mysql用户名和密码怎么填 Apr 08, 2025 pm 07:09 PM

要填写 MySQL 用户名和密码,请:1. 确定用户名和密码;2. 连接到数据库;3. 使用用户名和密码执行查询和命令。

MySQL 中的查询优化对于提高数据库性能至关重要,尤其是在处理大型数据集时 MySQL 中的查询优化对于提高数据库性能至关重要,尤其是在处理大型数据集时 Apr 08, 2025 pm 07:12 PM

1.使用正确的索引索引通过减少扫描的数据量来加速数据检索select*fromemployeeswherelast_name='smith';如果多次查询表的某一列,则为该列创建索引如果您或您的应用根据条件需要来自多个列的数据,则创建复合索引2.避免选择*仅选择那些需要的列,如果您选择所有不需要的列,这只会消耗更多的服务器内存并导致服务器在高负载或频率时间下变慢例如,您的表包含诸如created_at和updated_at以及时间戳之类的列,然后避免选择*,因为它们在正常情况下不需要低效查询se

忘记数据库密码,能在Navicat中找回吗? 忘记数据库密码,能在Navicat中找回吗? Apr 08, 2025 pm 09:51 PM

Navicat本身不存储数据库密码,只能找回加密后的密码。解决办法:1. 检查密码管理器;2. 检查Navicat的“记住密码”功能;3. 重置数据库密码;4. 联系数据库管理员。

了解 ACID 属性:可靠数据库的支柱 了解 ACID 属性:可靠数据库的支柱 Apr 08, 2025 pm 06:33 PM

数据库ACID属性详解ACID属性是确保数据库事务可靠性和一致性的一组规则。它们规定了数据库系统处理事务的方式,即使在系统崩溃、电源中断或多用户并发访问的情况下,也能保证数据的完整性和准确性。ACID属性概述原子性(Atomicity):事务被视为一个不可分割的单元。任何部分失败,整个事务回滚,数据库不保留任何更改。例如,银行转账,如果从一个账户扣款但未向另一个账户加款,则整个操作撤销。begintransaction;updateaccountssetbalance=balance-100wh

mysql怎么查看 mysql怎么查看 Apr 08, 2025 pm 07:21 PM

通过以下命令查看 MySQL 数据库:连接到服务器:mysql -u 用户名 -p 密码运行 SHOW DATABASES; 命令获取所有现有数据库选择数据库:USE 数据库名;查看表:SHOW TABLES;查看表结构:DESCRIBE 表名;查看数据:SELECT * FROM 表名;

See all articles