一篇万字文章带你快速上手MySQL中表的增删查改操作

1. 创建–CREATE

1.1 基本使用方法

语法:

CREATE TABLE table_name (column1 datatype [constraints],column2 datatype [constraints],...
);
  • table_name: 要创建的表的名称。
  • column1, column2, …: 表中的列名。
  • datatype: 列的数据类型,如 INT, VARCHAR(n), DATE 等。
  • [constraints]: 可选的约束条件,例如主键、外键、唯一性等。

案例:

创建一张用户表

CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,password VARCHAR(255) NOT NULL,email VARCHAR(100),created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

创建一个带有外键关系的订单表

CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,user_id INT,product_name VARCHAR(100),quantity INT,order_date DATETIME DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (user_id) REFERENCES users(id)
);

users 表插入数据

INSERT INTO users (username, password, email) VALUES 
('john_doe', 'securepassword1', 'john@example.com'),
('jane_smith', 'securepassword2', 'jane@example.com'),
('alice_jones', 'securepassword3', 'alice@example.com');

orders 表插入数据

INSERT INTO orders (user_id, product_name, quantity) VALUES 
(1, 'Product A', 2),
(2, 'Product B', 1),
(1, 'Product C', 5),
(3, 'Product D', 3);

查看 users 表的结构

mysql> SHOW COLUMNS FROM users;
+------------+--------------+------+-----+-------------------+----------------+
| Field      | Type         | Null | Key | Default           | Extra          |
+------------+--------------+------+-----+-------------------+----------------+
| id         | int(11)      | NO   | PRI | NULL              | auto_increment |
| username   | varchar(50)  | NO   |     | NULL              |                |
| password   | varchar(255) | NO   |     | NULL              |                |
| email      | varchar(100) | YES  |     | NULL              |                |
| created_at | datetime     | YES  |     | CURRENT_TIMESTAMP |                |
+------------+--------------+------+-----+-------------------+----------------+
5 rows in set (0.00 sec)

查看 orders 表的结构

mysql> SHOW COLUMNS FROM orders;
+--------------+--------------+------+-----+-------------------+----------------+
| Field        | Type         | Null | Key | Default           | Extra          |
+--------------+--------------+------+-----+-------------------+----------------+
| order_id     | int(11)      | NO   | PRI | NULL              | auto_increment |
| user_id      | int(11)      | YES  | MUL | NULL              |                |
| product_name | varchar(100) | YES  |     | NULL              |                |
| quantity     | int(11)      | YES  |     | NULL              |                |
| order_date   | datetime     | YES  |     | CURRENT_TIMESTAMP |                |
+--------------+--------------+------+-----+-------------------+----------------+
5 rows in set (0.00 sec)

查看users中的内容

mysql> SELECT * FROM users;
+----+-------------+-----------------+-------------------+---------------------+
| id | username    | password        | email             | created_at          |
+----+-------------+-----------------+-------------------+---------------------+
|  1 | john_doe    | securepassword1 | john@example.com  | 2024-10-30 22:47:26 |
|  2 | jane_smith  | securepassword2 | jane@example.com  | 2024-10-30 22:47:26 |
|  3 | alice_jones | securepassword3 | alice@example.com | 2024-10-30 22:47:26 |
+----+-------------+-----------------+-------------------+---------------------+
3 rows in set (0.00 sec)

查看orders中的内容

mysql> SELECT * FROM orders;
+----------+---------+--------------+----------+---------------------+
| order_id | user_id | product_name | quantity | order_date          |
+----------+---------+--------------+----------+---------------------+
|        1 |       1 | Product A    |        2 | 2024-10-30 22:47:35 |
|        2 |       2 | Product B    |        1 | 2024-10-30 22:47:35 |
|        3 |       1 | Product C    |        5 | 2024-10-30 22:47:35 |
|        4 |       3 | Product D    |        3 | 2024-10-30 22:47:35 |
+----------+---------+--------------+----------+---------------------+

常见问题:

主键 或者 唯一键 没有冲突,则直接插入

主键 或者 唯一键 如果冲突,则删除后再插入

1.2 插入否则更新

如果遇到主键冲突(例如,ID 已存在),则更新已有记录

语法:

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON DUPLICATE KEY UPDATE
column = value [, column = value] ...
  • table_name: 要插入数据的表名。
  • column1, column2, …: 插入时要填充的列名。
  • value1, value2, …: 对应列要插入的值。
  • ON DUPLICATE KEY UPDATE: 指定当遇到重复键(主键或唯一索引)时执行更新操作。
  • column = value ,column=value,column=value …: 在发生冲突时,要更新的列及其新值,可以是一个或多个。

案例:

#更新数据前
mysql> select * from users;
+----+-------------+-----------------+-------------------+---------------------+
| id | username    | password        | email             | created_at          |
+----+-------------+-----------------+-------------------+---------------------+
|  1 | john_doe    | securepassword1 | john@example.com  | 2024-10-30 22:47:26 |
|  2 | jane_smith  | securepassword2 | jane@example.com  | 2024-10-30 22:47:26 |
|  3 | alice_jones | securepassword3 | alice@example.com | 2024-10-30 22:47:26 |
+----+-------------+-----------------+-------------------+---------------------+
3 rows in set (0.00 sec)
#插入数据
mysql> INSERT INTO users (id, username, password, email, created_at)-> VALUES ->     (2, 'charlie_black', 'securepassword5', 'charlie@example.com', NOW()),->     (3, 'diana_green', 'securepassword6', 'diana@example.com', NOW()),->     (4, 'edward_white', 'securepassword7', 'edward@example.com', NOW())-> ON DUPLICATE KEY UPDATE ->     password = VALUES(password), ->     email = VALUES(email), ->     created_at = NOW();
Query OK, 5 rows affected (0.00 sec)
Records: 3  Duplicates: 2  Warnings: 0
#更新数据后
mysql> select * from users;
+----+--------------+-----------------+---------------------+---------------------+
| id | username     | password        | email               | created_at          |
+----+--------------+-----------------+---------------------+---------------------+
|  1 | john_doe     | securepassword1 | john@example.com    | 2024-10-30 22:47:26 |
|  2 | jane_smith   | securepassword5 | charlie@example.com | 2024-10-31 08:25:29 |
|  3 | alice_jones  | securepassword6 | diana@example.com   | 2024-10-31 08:25:29 |
|  4 | edward_white | securepassword7 | edward@example.com  | 2024-10-31 08:25:29 |
+----+--------------+-----------------+---------------------+---------------------+
4 rows in set (0.00 sec)

2. 读取–RETRIEVE

2.1 基本使用方法

语法:

SELECT[DISTINCT] {* | {column [, column] ...}[FROM table_name][WHERE ...][ORDER BY column [ASC | DESC], ...][LIMIT ...]
  • SELECT是用于指定要从数据库中检索哪些数据的关键字。
  • [DISTINCT]是可选的,用于指示只返回唯一的结果集,去除重复行。
  • {* | {column [, column]...}可以选择返回所有列(用*表示)或者指定具体的一列或多列
  • FROM table_name指定要从中检索数据的表。这是查询的基础,明确数据的来源。
  • WHERE...用于添加筛选条件,只有满足这些条件的行才会被包含在结果集中。可以根据特定的列值、逻辑运算符等进行条件判断。
  • ORDER BY column [ASC | DESC],...用于对结果集进行排序。可以指定一个或多个列作为排序依据,并且可以选择升序(ASC,默认如果不指定排序方式)或降序(DESC)。
  • LIMIT...用于限制结果集的行数。可以指定要返回的最大行数,常用于分页查询等场景。

案例:

SELECT DISTINCT username, email 
FROM users 
WHERE created_at >= '2024-01-01' 
ORDER BY username ASC 
LIMIT 5;

2.2 SELECT列

  • 全列查询

语法:

SELECT * FROM table_name;

案例:

##返回employees表中的所有列和所有行的数据。
SELECT * FROM employees;
  • 指定列查询

语法:

SELECT column1, column2,... FROM table_name;

案例:

#返回员工的姓名和所属部门两列的数据
SELECT name, department FROM employees;
  • 查询字段为表达式

语法:

SELECT column1 + column2 AS sum_column FROM table_name;

案例:

#查询员工的姓名、当前薪水以及将薪水增加 10% 后的结果,并将增加后的薪水列命名为increased_salary
SELECT name, salary, salary * 1.1 AS increased_salary FROM employees;
  • 为列指定别名

语法:

SELECT column_name AS alias_name FROM table_name;

案例:

#将name列别名为employee_name,department列别名为dept
SELECT name AS employee_name, department AS dept FROM employees;
  • 为表指定别名

语法:

SELECT t.column_name FROM table_name AS t;

案例:

#为employees表设置别名为e,然后在查询中使用别名来引用表的列
SELECT e.name, e.department FROM employees AS e;
  • 结果去重

语法:

SELECT DISTINCT column1, column2,... FROM table_name;

案例:

#此查询返回employees表中所有不同的部门名称,去除了重复的部门值
SELECT DISTINCT department FROM employees;

2.3 WHERE条件

2.3.1 比较运算符

运算符说明
>,>=,<,<=大于,大于等于,小于,小于等于
=等于,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 个)任意字符;_ 表示任意一个字符

2.3.2 逻辑运算符

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

2.4 结果排序

语法:

SELECT column1, column2,...
FROM table_name
[WHERE condition]
ORDER BY column_name [ASC|DESC],...;
  • SELECT:选择要查询的列。
  • FROM:指定要查询的表。
  • WHERE(可选):添加筛选条件。
  • ORDER BY:指定用于排序的列名。可以指定多个列进行排序,以逗号分隔。
  • ASC(可选,默认值):升序排序。如果不指定排序方式,默认为升序。
  • DESC:降序排序。

2.5 筛选分页结果

-- 起始下标为 0
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

3. 更新–UPDATE

3.1 基本使用方法

UPDATE table_name
SET column1 = value1, column2 = value2,...
[WHERE condition];
  • UPDATE:指定要进行更新操作的关键字。
  • table_name:要更新数据的表名。
  • SET:用于指定要更新的列和新的值。可以同时更新多个列,列与值之间用等号连接,不同列的更新之间用逗号分隔。
  • WHERE(可选):添加筛选条件,只有满足条件的行才会被更新。如果不指定WHERE子句,将会更新表中的所有行

3.2 更新单个列的值

UPDATE employees SET salary = 6000 WHERE id = 1;

3.3 更新多个列的值

UPDATE employees SET salary = 5500, department = 'HR' WHERE name = 'John';

4. 删除–DELETE

4.1 基本使用方法

语法:

DELETE FROM table_name
[WHERE condition];
  • DELETE FROM:指定要进行删除操作的关键字。
  • table_name:要删除数据的表名。
  • WHERE(可选):添加筛选条件,只有满足条件的行才会被删除。如果不指定WHERE子句,将会删除表中的所有行。

删除满足特定条件的行:

DELETE FROM employees WHERE department = 'Marketing';

删除表中的所有行:

DELETE FROM employees;

5. 截断表

语法:

TRUNCATE [TABLE] table_name

注意事项:

  • TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚
  • 会重置 AUTO_INCREMENT 项
  • 只能对整表操作

6. 聚合函数

函数说明
COUNT([DISTINCT] expr)返回查询到的数据的 数量
SUM([DISTINCT] expr)返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr)返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT] expr)返回查询到的数据的 最大值,不是数字没有意义
MIN([DISTINCT] expr)返回查询到的数据的 最小值,不是数字没有意义

7. group by子句

GROUP BY 用于将数据按照一个或多个列进行分组,通常与聚合函数一起使用,以便对每个组进行计算

语法:

SELECT column1, column2,...
FROM table_name
WHERE condition
GROUP BY column1, column2,...;
  • SELECT:选择要查询的列,可以是原始列或聚合函数的结果。
  • FROM:指定要查询的表。
  • WHERE(可选):添加筛选条件,用于在分组之前过滤数据。
  • GROUP BY:指定用于分组的列。可以使用一个或多个列进行分组.

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

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

相关文章

预览 PDF 文档

引言 在现代Web应用中&#xff0c;文件预览功能是非常常见的需求之一。特别是在企业级应用中&#xff0c;用户经常需要查看各种类型的文件&#xff0c;如 PDF、Word、Excel 等。本文将详细介绍如何在Vue项目中实现 PDF 文档的预览功能。 实现原理 后端API 后端需要提供一个…

【c++ gtest】使用谷歌提供的gtest和抖音豆包提供的AI大模型来对代码中的函数进行测试

【c gtest】使用谷歌提供的gtest和抖音豆包提供的AI大模型来对代码中的函数进行测试 下载谷歌提供的c测试库在VsCode中安装抖音AI大模型找到c项目文件夹&#xff0c;使用VsCode和VS进行双开生成gtest代码进行c单例测试 下载谷歌提供的c测试库 在谷歌浏览器搜索github gtest, 第…

Pycharm,2024最新版Pycharm现在安装环境配置汉化详细教程!

码&#xff08;文末附带精品籽料&#xff09;&#xff1a; K384HW36OBeyJsaWNlbnNlSWQiOiJLMzg0SFczNk9CIiwibGljZW5zZWVOYW1lIjoibWFvIHplZG9uZyIsImxpY2Vuc2VlVHlwZSI6IlBFUlNPTkFMIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsIm…

【论文分享】TensorTEE 24‘ASPLOS

目录 AbstractIntroductionContribution BackgroundCollaborative ComputingLLM CPU-NPU collaborative computing Memory ProtectionMemory encryption Integrity verificationHeterogeneous NPU TEEIntegrated NPU TEEDiscrete NPU TEE Threat Model MotivationInefficient C…

力扣每日一题合集

3211. 生成不含相邻零的二进制字符串 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<string> validStrings(int n) {vector<string> ans;ans.emplace_back("0");ans.emplace_back("1");for(int i 1; i < n; i)…

Vue3 中实现过渡动画的几种方式?

前言 首先抛开 vue 本身&#xff0c;假设需要给某个 Dom 元素实现一些过渡动画&#xff0c;那么下面这些事是必须的&#xff1a; 实现目标元素不同时刻下的样式&#xff0c;常见做法就是抽取在不同的 css 选择器中根据不同时刻切换不同的 css 选择器以达到样式的变化设置样式…

Linux 中,flock 对文件加锁

在Linux中&#xff0c;flock是一个用于对文件加锁的实用程序&#xff0c;它可以帮助协调多个进程对同一个文件的访问&#xff0c;避免出现数据不一致或冲突等问题。以下是对flock的详细介绍&#xff1a; 基本原理 flock通过在文件上设置锁来控制多个进程对该文件的并发访问。…

【华为HCIP实战课程二十七】中间到中间系统协议IS-IS Hello报文,网络工程师

一、IS-IS术语 1、IIH: ISIS hello 报文,相当于OSPF的Hello报文,hello-interval 10s, hold-time 30s 2、LSP:链路状态数据单元,类似OSPF的LSA,携带路由信息(L1和L2的LSP) 3、SNP:系列号PDU (1)、PSNP:部分序列号协议数据单元,类似OSPF的ACK,Request (2)、CSNP:…

python-opencv给图片或视频去水印

文章目录 引言inpaint函数的使用方法鼠标事件回调函数cv2.setMouseCallback介绍去水印步骤实现代码 引言 本文主要基于cv2.inpaint函数实现图片的水印去除。 inpaint函数基于图像修复算法&#xff0c;通过对缺陷区域周围像素的分析和插值&#xff0c;生成合适的像素值来填充缺…

渗透测试-百日筑基—文件上传篇特征截断渲染%00绕过——下篇

目录 day10-渗透测试文件上传篇&绕过&特征&截断&渲染 一、黑名单大小写绕过代码分析 1、获取文件后缀名进行判断&#xff0c;如果后缀在这个字典里就禁止上传。 2、黑名单大小写绕过攻击 二、利用 windows 系统特征绕过上传 1、windows 系统特征绕过漏洞…

C语言 | Leetcode C语言题解之第522题最长特殊序列II

题目&#xff1a; 题解&#xff1a; #define MAX(a, b) ((a) > (b) ? (a) : (b))bool is_subseq(const char *s, const char *t) {int pt_s 0, pt_t 0;int len_s strlen(s), len_t strlen(t);while (pt_s < len_s && pt_t < len_t) {if (s[pt_s] t[pt_…

STM32CUBEMX安富莱STM32-V6开发板使用FMC驱动SDRAM芯片MT48LC4M32B2TG

文章的目的是快速使用SDRAM芯片&#xff0c;没有详细讲解原理。 1、环境&#xff1a; 单片机&#xff1a;STM32F429VIT6 CUBE版本&#xff1a;STM32CUBMX 6.12.1 编译&#xff1a;KEIL MDK 硬件&#xff1a;安富莱STM32-V6开发板 SDRAM芯片&#xff1a;MT48LC4M32B2TG 2、配…

为什么QNAP威联通NAS的APP center无法安装APP?

创作立场&#xff1a;原创不易&#xff0c;拒绝搬运~ hello大家好&#xff0c;我是你们的老伙伴&#xff0c;稳重的大王~ 如题&#xff0c;大王带你一起来排查一下&#xff0c;可能遇到的问题。如有帮助&#xff0c;请给个关注鼓励&#xff0c;互谢~ 1 首先&#xff0c;安装…

人工智能算法之粒子群优化算法

人工智能算法之粒子群优化算法 粒子群优化算法&#xff08;PSO&#xff09;是一种群体智能优化算法&#xff0c;由Kennedy和Eberhart在1995年提出&#xff0c;灵感来源于鸟群、鱼群等生物群体行为。PSO通过群体中个体的交互及对周围环境的感知&#xff0c;快速找到最优解。PSO算…

【深入浅出】深入浅出transformer(附面试题)

本文的目的是为了帮助大家面试transformer&#xff0c;会结合我的面试经历以及看法去讲解transformer&#xff0c;并非完整的技术细致讲解&#xff0c;介意请移步。 结构 提到transformer网络模型&#xff0c;大家脑海中是否有这张图呢&#xff1f; 这是网络结构中经典的编解…

net 获取本地ip地址,net mvc + net core 两种

net mvc public static string GetIP(HttpRequestBase request){// 尝试获取 X-Forwarded-For 头string result request.Headers["X-Forwarded-For"]?.Split(,).FirstOrDefault()?.Trim();if (string.IsNullOrEmpty(result)){// 获取用户的 IP 地址result reques…

Handler、Looper、message进阶知识

Android Handler、Looper、Message的进阶知识 在Android开发中&#xff0c;Handler、Looper和Message机制是多线程通信的核心。为了深入理解并优化它们的使用&#xff0c;尤其是在高并发和UI性能优化中&#xff0c;可以利用一些高级特性。 1. Handler的高阶知识 Handler在基本…

开源一款基于 JAVA 的仓库管理系统,支持三方物流和厂内物流,包含 PDA 和 WEB 端的源码

大家好&#xff0c;我是一颗甜苞谷&#xff0c;今天分享一款基于 JAVA 的仓库管理系统,支持三方物流和厂内物流,包含 PDA 和 WEB 端的源码。 前言 在当前的物流仓储行业&#xff0c;企业面临着信息化升级的迫切需求&#xff0c;但往往受限于高昂的软件采购和维护成本。现有的…

Sigrity Power SI Resonance analysis模式如何进行谐振分析操作指导

Sigrity Power SI Resonance analysis模式如何进行谐振分析操作指导 Sigrity Power SI可以方便快捷的进行谐振分析,谐振分析的目的是为了分析电源地平面组成的腔体的谐振频率以及谐振幅度,让频率在谐振频率附近的信号避开谐振腔,以及添加相应的电容来降低谐振峰值. 仍然以这…

vue特性

Vue.js是一套构建用户界面的渐进式框架&#xff0c;其特性主要包括以下几点&#xff1a; MVVM模式 Vue.js采用了MVVM&#xff08;Model-View-ViewModel&#xff09;的设计模式。在这种模式下&#xff0c;Model代表数据模型&#xff0c;View代表用户界面&#xff0c;ViewModel…