【MySQL】MySQL 使用全教程

MySQL 使用全教程

介绍

MySQL 是一种广泛使用的开源关系型数据库管理系统(Relational Database Management System),它基于 Structured Query Language(SQL)进行数据管理,允许用户存储、检索、更新和删除数据库中的数据。通过提供高性能、可扩展性以及可靠性,MySQL 被广泛应用于各种规模的数据驱动网站和应用,支持多线程、多用户操作,并能够处理大型数据库,是构建动态网站和应用程序的重要后端组件。

一个关系型数据库由一个或数个表格组成,如下所示的一个表格


    name ▼ 键            ▼ 列(col)
┌┈┈┈┈┬┈┈┈┈┈┈┈┈┬┈┈┈┈┈┈┬┈┈┈┈┈┈┈┐
id ┆ name   ┆ uid  ┆ level ┆  ◀ 表头header
├┈┈┈┈┼┈┈┈┈┈┈┈┈┤┈┈┈┈┈┈┤┈┈┈┈┈┈┈┤
1 ┆ mysql  ┆ 03├┈┈┈┈┼┈┈┈┈┈┈┈┈┤┈┈┈┈┈┈┤┈┈┈┈┈┈┈┤
2 ┆ redis  ┆ 121     ┆  ◀ 行 row
└┈┈┈┈┴┈┈┈┈┈┈┈┈┴┈┈┈┈┈┈┴┈┈┈┈┈┈┈┘
    redis ▲ 值

  • 表头(header) 每一列的名称
  • 列(col) 具有相同数据类型的数据的集合
  • 行(row) 每一行用来描述某个人/物的具体信息
  • 值(value) 行的具体信息,每个值与该列数据类型相同
  • 键(key) 用来识别某个特定的人/物的方法,有唯一性

登录 MySQL

# 默认用户名<root>,-p 是密码,
# ⚠️参数后面不需要空格
mysql -h 127.0.0.1 -u <用户名> -p<密码>
mysql -D 数据库名 -h 主机名 -u 用户名 -p
mysql -h <host> -P <端口号> -u <user> -p [db_name]
mysql -h <host> -u <user> -p [db_name]

常用的

数据库 Database
:-:-
CREATE DATABASE db ;创建数据库
SHOW DATABASES;列出数据库
USE db;切换到数据库
CONNECT db ;切换到数据库
DROP DATABASE db;删除数据库
表 Table
:-:-
SHOW TABLES;列出当前数据库的表
SHOW FIELDS FROM t;表的列表字段
DESC t;显示表格结构
SHOW CREATE TABLEt;显示创建表sql
TRUNCATE TABLEt;删除表中的所有数据
DROP TABLEt;删除表格
Proccess
:-:-
show processlist;列出进程
kill pid;杀死进程

查看 MySQL 信息

# 显示当前mysql的version的各种信息
mysql> status;
# 显示当前mysql的version信息
mysql> select version(); 
# 查看 MySQL 端口号
mysql> show global variables like 'port';

退出 MySQL 会话

mysql> exit 

退出 quit;\q; 一样的效果

备份

创建备份

mysqldump -u user -p db_name > db.sql

导出不带架构的数据库

mysqldump -u user -p db_name --no-data=true --add-drop-table=false > db.sql

恢复备份

mysql -u user -p db_name < db.sql

MySQL 示例

管理表格

创建一个包含三列的新表

CREATE TABLE t (
    id    INT,
    name  VARCHAR DEFAULT NOT NULL,
    price INT DEFAULT 0
    PRIMARY KEY(id)
);

从数据库中删除表 t

DROP TABLE t ;

向表中添加新列

ALTER TABLE t ADD column;

从表中删除列 c

ALTER TABLE t DROP COLUMN c ;

添加约束

ALTER TABLE t ADD constraint;

删除约束

ALTER TABLE t DROP constraint;

将表从 t1 重命名为 t2

ALTER TABLE t1 RENAME TO t2;

将列 c1 重命名为 c2

ALTER TABLE t1 CHANGE c1 c2 datatype;
ALTER TABLE table_name RENAME COLUMN c1 TO c2;

将列 c1 的数据类型改为 datatype

ALTER TABLE t1 MODIFY c1 datatype;

删除表中的所有数据

TRUNCATE TABLE t;

从表中查询数据

从表中查询列 c1、c2 中的数据

SELECT c1, c2 FROM t

查询表 t 中的所有行和列

SELECT * FROM t

查询数据并使用条件筛选行

SELECT c1, c2 FROM t
WHERE condition

查询表中的不同行

SELECT DISTINCT c1 FROM t
WHERE condition

按升序或降序对结果集排序

SELECT c1, c2 FROM t
ORDER BY c1 ASC [DESC]

跳过行的偏移并返回下 n 行

SELECT c1, c2 FROM t
ORDER BY c1 
LIMIT n OFFSET offset

使用聚合函数对行进行分组

SELECT c1, aggregate(c2)
FROM t
GROUP BY c1

使用 HAVING 子句筛选组

SELECT c1, aggregate(c2)
FROM t
GROUP BY c1
HAVING condition

从多个表查询

内部连接 t1 和 t2

SELECT c1, c2 
FROM t1
INNER JOIN t2 ON condition

左连接t1和t1

SELECT c1, c2 
FROM t1
LEFT JOIN t2 ON condition

右连接 t1 和 t2

SELECT c1, c2 
FROM t1
RIGHT JOIN t2 ON condition

执行完全外部连接

SELECT c1, c2 
FROM t1
FULL OUTER JOIN t2 ON condition

生成表中行的笛卡尔积

SELECT c1, c2 
FROM t1
CROSS JOIN t2

执行交叉连接的另一种方法

SELECT c1, c2 
FROM t1, t2

使用 INNER Join 子句将 t1 连接到自身

SELECT c1, c2
FROM t1 A
INNER JOIN t1 B ON condition

使用 SQL 运算符,合并两个查询中的行

SELECT c1, c2 FROM t1
UNION [ALL]
SELECT c1, c2 FROM t2

返回两个查询的交集

SELECT c1, c2 FROM t1
INTERSECT
SELECT c1, c2 FROM t2

从另一个结果集中减去一个结果集

SELECT c1, c2 FROM t1
MINUS
SELECT c1, c2 FROM t2

使用模式匹配 % 查询行_

SELECT c1, c2 FROM t1
WHERE c1 [NOT] LIKE pattern

查询列表中的行

SELECT c1, c2 FROM t
WHERE c1 [NOT] IN value_list

查询两个值之间的行

SELECT c1, c2 FROM t
WHERE  c1 BETWEEN low AND high

检查表中的值是否为 NULL

SELECT c1, c2 FROM t
WHERE  c1 IS [NOT] NULL

使用 SQL 约束

将 c1 和 c2 设置为主键

CREATE TABLE t(
    c1 INT, c2 INT, c3 VARCHAR,
    PRIMARY KEY (c1,c2)
);

将 c2 列设置为外键

CREATE TABLE t1(
    c1 INT PRIMARY KEY,  
    c2 INT,
    FOREIGN KEY (c2) REFERENCES t2(c2)
);

使列 c1 和 c2 中的值唯一

CREATE TABLE t(
    c1 INT, c2 INT,
    UNIQUE(c1,c2)
);

确保 c1>0 和 c1>=c2 中的值

CREATE TABLE t(
  c1 INT, c2 INT,
  CHECK(c1> 0 AND c1 >= c2)
);

c2 列中的设置值不为 NULL

CREATE TABLE t(
     c1 INT PRIMARY KEY,
     c2 VARCHAR NOT NULL
);

修改数据

在表格中插入一行

INSERT INTO t(column_list)
VALUES(value_list);

在表格中插入多行

INSERT INTO t(column_list)
VALUES (value_list), 
       (value_list),;

将行从 t2 插入 t1

INSERT INTO t1(column_list)
SELECT column_list
FROM t2;

更新列 c1 中所有行的新值

UPDATE t
SET c1 = new_value;

更新列 c1、c2 中与条件匹配的值

UPDATE t
SET c1 = new_value, 
        c2 = new_value
WHERE condition;

删除表中的所有数据

DELETE FROM t;

删除表中的行子集

DELETE FROM t
WHERE condition;

管理视图

创建由 c1 和 c2 组成的新视图

CREATE VIEW v(c1,c2) 
AS
SELECT c1, c2
FROM t;

使用选中选项创建新视图

CREATE VIEW v(c1,c2) 
AS
SELECT c1, c2
FROM t;
WITH [CASCADED | LOCAL] CHECK OPTION;

创建递归视图

CREATE RECURSIVE VIEW v 
AS
select-statement -- anchor part
UNION [ALL]
select-statement; -- recursive part

创建临时视图

CREATE TEMPORARY VIEW v 
AS
SELECT c1, c2
FROM t;

删除视图

DROP VIEW view_name;

管理触发器

创建或修改触发器

CREATE OR MODIFY TRIGGER trigger_name
WHEN EVENT
ON table_name TRIGGER_TYPE
EXECUTE stored_procedure;
WHEN
:-:-
BEFORE在事件发生前调用
AFTER事件发生后调用
EVENT
:-:-
INSERT为INSERT调用
UPDATE调用UPDATE
DELETE调用DELETE
TRIGGER_TYPE
:-:-
FOR EACH ROW-
FOR EACH STATEMENT-

管理索引

在表 t 的 c1 和 c2 上创建索引

CREATE INDEX idx_name 
ON t(c1,c2);

在表 t 的 c3、c4 上创建唯一索引

CREATE UNIQUE INDEX idx_name
ON t(c3,c4)

删除索引

DROP INDEX idx_name ON t;

MySQL 数据类型

Strings

--
CHARString (0 - 255)
VARCHARString (0 - 255)
TINYTEXTString (0 - 255)
TEXTString (0 - 65535)
BLOBString (0 - 65535)
MEDIUMTEXTString (0 - 16777215)
MEDIUMBLOBString (0 - 16777215)
LONGTEXTString (0 - 429496­7295)
LONGBLOBString (0 - 429496­7295)
ENUMOne of preset options
SETSelection of preset options

Date & time

Data TypeFormat
DATEyyyy-MM-dd
TIMEhh:mm:ss
DATETIMEyyyy-MM-dd hh:mm:ss
TIMESTAMPyyyy-MM-dd hh:mm:ss
YEARyyyy

Numeric

--
TINYINT xInteger (-128 to 127)
SMALLINT xInteger (-32768 to 32767)
MEDIUMINT xInteger (-8388608 to 8388607)
INT xInteger (-2147­483648 to 214748­3647)
BIGINT xInteger (-9223­372­036­854­775808 to 922337­203­685­477­5807)
FLOATDecimal (precise to 23 digits)
DOUBLEDecimal (24 to 53 digits)
DECIMAL"­DOU­BLE­" stored as string

函数

聚合函数

函数解释
SUM()计算一列值的总和
AVG()计算一列值的平均值
COUNT()计算行数,可选择性地忽略NULL值
MAX()找出一列的最大值
MIN()找出一列的最小值

数学函数

函数解释示例语法结果
ABS(x)返回数值的绝对值ABS(-5)5
ROUND(x,y)四舍五入到指定的小数位数,y为小数位数,默认为0ROUND(3.1415,2)3.14
FLOOR(x)向下取整至最接近的整数FLOOR(3.7)3
CEIL(x)向上取整至最接近的整数CEIL(3.3)4
SQRT(x)返回一个数的平方根SQRT(16)4
MOD(x,y)返回x除以y的余数MOD(10,3)1
RAND([seed])返回0到1之间的随机数,可选种子值RAND()RAND(123)0.345...

日期和时间函数

函数解释
NOW()返回当前日期和时间
CURDATE()返回当前日期
CURTIME()返回当前时间
DATE_FORMAT()格式化日期时间输出
DATEDIFF()计算两个日期之间相差的天数
STR_TO_DATE()将字符串转换为日期格式

字符串函数

函数解释示例语法结果
CONCAT(s1,s2,...)连接两个或更多字符串CONCAT('Hello, ','World!')'Hello, World!'
LOWER(str)转换为小写LOWER('HELLO')'hello'
UPPER(str)转换为大写UPPER('world')'WORLD'
TRIM(str)去除字符串两端空格TRIM(' Hello ')'Hello'
LEFT(str,len)提取字符串左侧的若干字符LEFT('Hello', 3)'Hel'
RIGHT(str,len)提取字符串右侧的若干字符RIGHT('Hello', 2)'lo'
SUBSTR(str,pos,len)提取字符串中的一部分SUBSTR('Hello', 2, 3)'ell'
REPLACE(str,from_str,to_str)替换字符串中的部分文本REPLACE('Hello', 'l', 'L')'HeLLo'

高级函数

函数解释示例语法结果
BIN(x)返回 x 的二进制编码,x 为十进制数。BIN(2)10
BINARY(s)将字符串 s 转换为二进制字符串。BINARY 'RUNOOB''RUNOOB'(显示效果,实际存储为二进制)
CASE复合条件函数,根据条件返回不同结果。CASE WHEN 1 > 0 THEN '1 > 0' WHEN 2 > 0 THEN '2 > 0' ELSE '3 > 0' END'1 > 0'
CAST(x AS type)转换数据类型。CAST('2017-08-29' AS DATE)2017-08-29
COALESCE(expr1, expr2, ..., expr_n)返回第一个非空表达式的值。COALESCE(NULL, NULL, 'runoob.com', NULL, 'google.com')'runoob.com'
CONNECTION_ID()返回当前连接的唯一ID。CONNECTION_ID()4292835(示例值)
CONV(x, f1, f2)将 f1 进制数转换为 f2 进制数。CONV(15, 10, 2)1111
CONVERT(s USING cs)转换字符串 s 的字符集为 cs。CHARSET(CONVERT('ABC' USING gbk))gbk
CURRENT_USER()返回当前用户。CURRENT_USER()guest@%
DATABASE()返回当前数据库名。DATABASE()runoob
IF(expr, v1, v2)条件表达式,expr 为真则 v1,否则 v2。IF(1 > 0, '正确', '错误')'正确'
IFNULL(v1, v2)如果 v1 不为 NULL,则返回 v1,否则返回 v2。IFNULL(NULL, 'Hello Word')'Hello Word'
ISNULL(expression)判断表达式是否为 NULL。ISNULL(NULL)1
LAST_INSERT_ID()返回最近生成的 AUTO_INCREMENT 值。LAST_INSERT_ID()6(示例值)
NULLIF(expr1, expr2)若 expr1 等于 expr2,则返回 NULL,否则返回 expr1。NULLIF(25, 25)NULL

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

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

相关文章

vscode设置特定扩展名文件的打开编码格式

用vscode 编辑c语言或者Verilog代码, 由于其它开发工具的文件编码格式无法修改,默认只能是gb2312, 与我们国内奉行的统一 utf8 不一致. 所以只能是更改特殊文件的打开方式. 配置方式如下. 关键配置如下: {"git.openRepositoryInParentFolders": "never",…

【办公类-57-01】美工室材料报销EXCEL表批量插入截图(图片)

背景需求&#xff1a; 我们班分到美工室&#xff0c;需要准备大量材料&#xff0c;根据原始的报销单EXCLE&#xff0c;里面有商品名称、图片、链接、单位、数量等信息 今天我和搭档一起填写新表&#xff0c;发现手机截图的图片插入EXCEL后非常大&#xff0c; 需要手动调整图片…

4 -《本地部署开源大模型》在Ubuntu 22.04系统下部署运行ChatGLM3-6B模型

在Ubuntu 22.04系统下部署运行ChatGLM3-6B模型 大模型部署整体来看并不复杂&#xff0c;且官方一般都会提供标准的模型部署流程&#xff0c;但很多人在部署过程中会遇到各种各样的问题&#xff0c;很难成功部署&#xff0c;主要是因为这个过程会涉及非常多依赖库的安装和更新及…

当当网获得dangdang商品详情 API 返回值说明

item_get-获得dangdang商品详情 dangdang.item_get 公共参数 请求地址: 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,i…

【AI】人工智能的应用与前景

目录 人工智能的应用与前景1. 人工智能的当前应用1.1 医疗领域1.1.1 医疗影像中的AI应用1.1.2 药物研发中的AI潜力 1.2 企业与商业领域1.2.1 数据驱动的智能决策1.2.2 自动化业务流程 1.3 智能生活领域1.3.1 自动驾驶技术的崛起1.3.2 智能家居中的AI应用 2. 人工智能的未来前景…

Golang | Leetcode Golang题解之第485题最大连续1的个数

题目&#xff1a; 题解&#xff1a; func findMaxConsecutiveOnes(nums []int) (maxCnt int) {cnt : 0for _, v : range nums {if v 1 {cnt} else {maxCnt max(maxCnt, cnt)cnt 0}}maxCnt max(maxCnt, cnt)return }func max(a, b int) int {if a > b {return a}return …

全面解析P2P网络

1. 引言 什么是P2P网络&#xff1f; P2P&#xff08;Peer-to-Peer&#xff09;网络是一种分布式网络架构&#xff0c;其中每个节点&#xff08;或称为“对等体”&#xff09;都是网络的参与者&#xff0c;节点之间直接进行数据交换与通信。不同于传统的客户端-服务器架构&…

区块链技术在网络安全中的应用研究

摘要&#xff1a; 随着网络技术的快速发展&#xff0c;网络安全问题日益凸显。区块链技术以其去中心化、不可篡改、可追溯等特性&#xff0c;为网络安全提供了新的解决方案。本文深入探讨了区块链技术在网络安全多个领域的应用&#xff0c;包括数据加密与存储、身份认证、网络攻…

Golang | Leetcode Golang题解之第494题目标和

题目&#xff1a; 题解&#xff1a; func findTargetSumWays(nums []int, target int) int {sum : 0for _, v : range nums {sum v}diff : sum - targetif diff < 0 || diff%2 1 {return 0}neg : diff / 2dp : make([]int, neg1)dp[0] 1for _, num : range nums {for j …

HICP--2

在area 0的路由器只生成 area 0 的数据库&#xff0c;只在area 1 的一样。但是既在又在的生成两个 area的 LSDB 一、区域间三类LSA 在OSPF&#xff08;Open Shortest Path First&#xff09;协议中&#xff0c;区域间三类LSA&#xff08;Link-State Advertisement&#xff09…

基于Java+jsp的CRM客户关系管理系统的实现

系统的详细设计和实现 根据上文的功能分析和数据库的分析&#xff0c;在系统的实现阶段上采用当今开源的SSH&#xff08;StrutsHibernateSpring&#xff09;整合框架实现。其目的是降低个模块间的耦合度&#xff0c;使各个模块之间的功能相互独立、模块内部结构清晰。 系统架…

隐藏移动端IOS和安卓上的滚动条

直接上代码&#xff0c;就几行 ::-webkit-scrollbar {/* 不显示出来&#xff0c;安卓上会自动补上滚动条 */display: block;/* 宽度为0&#xff0c;安卓上会自动补上滚动条 */width: .5px; }::-webkit-scrollbar-thumb {/* 让看不见但是存在 */background-color: transparent;…

Go 语言中的静态类型和动态类型

在 Go 语言中&#xff0c;类型系统的主要概念可以分为静态类型和动态类型&#xff0c;这两者的区别主要体现在如何确定和处理变量的类型。以下是对 Go 语言中的动态类型和静态类型的解释&#xff1a; 1. 静态类型&#xff08;Static Typing&#xff09; Go 是一种静态类型语言…

20240803 芯动科技 笔试

文章目录 1、单选题1.11.21.31.42、填空题2.12.23、问答题3.13.23.34、编程题4.14.24.3岗位:嵌入式软件工程师(25届校招)(J12042) 题型:4 道单选题,2 道填空题, 3 道简答题,3 道编程题 1、单选题 1.1 已知 5 个元素的出栈序列是 1,2,3,4,5,6 则对应的入栈顺序可能是 …

听泉鉴宝在三个月前已布局商标注册!

近日“听泉鉴宝”以幽默的风格和节目效果迅速涨粉至2500多万&#xff0c;连线出现“馆藏文物”和“盗墓现场”等内容&#xff0c;听泉鉴宝早在几个月前已布局商标注册。 据普推知产商标老杨在商标局网站检索发现&#xff0c;“听泉鉴宝”的主人丁某所持股的江苏灵匠申请了三十…

视图库对接系列(GA-T 1400)十六-二、视图库对接系列(本级)查询订阅

说明 之前我们在本级中少写了一个查询订阅的接口,这里的话 我们给本级中补充一个功能,实现查询订阅功能。文档 这面我们是向下级发送查询订阅的功能,我们目前测试的话需要手动触发下这个功能, 我们就写一个接口就叫/custom/VIID/Subscribes ,和1400接口的区别是增加了一个…

ffmpeg视频滤镜:双边滤波-bilateral

滤镜简述 bilateral 官网链接 > FFmpeg Filters Documentation 双边滤波是一种图片去噪的方法&#xff0c;它会综合考虑像素的空间和像素值来优化图片&#xff0c;可以看一下如下效果&#xff1a; 左边是 原图&#xff0c;右边是优化后的&#xff0c;相当于磨皮了。 要…

java使用 IDEA自动补全功能 AI 插件

国内插件&#xff1a; CodeGeeX&#xff1a; 功能特性&#xff1a; 由国内团队开发&#xff0c;是一款智能编程助手插件。它集成了多种人工智能技术&#xff0c;能够在多个编程语言中提供智能代码补全、代码生成、代码优化和注释生成等功能。该插件特别适用于常见的编程任务…

LeetCode Hot 100:普通数组

LeetCode Hot 100&#xff1a;普通数组 53. 最大子数组和 思路 1&#xff1a;动态规划 class Solution { public:int maxSubArray(vector<int> &nums){// 特判if (nums.empty())return 0;if (nums.size() 1)return nums[0];int n nums.size();// 状态数组vector…

代码随想录 -- 贪心 -- 合并区间

56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 先按照左边界从大到小对数组进行排序&#xff1b; 遍历数组&#xff1a;如果当前遍历的区间左边界小于等于前一个区间的右边界&#xff0c;更新当前区间的左边界为最小的左边界&#xff0c;右边界为最…