MySQL 备忘清单

本备忘单旨在快速理解 MySQL 所涉及的主要概念,提供了最常用的SQL语句,供您参考。

来源:https://dev.bi/docs/mysql.html

入门

介绍

MySQL 为关系型数据库(Relational Database Management System),一个关系型数据库由一个或数个表格组成,如下所示的一个表格


bash 复制代码
    name ▼ 键            ▼ 列(col)
┌┈┈┈┈┬┈┈┈┈┈┈┈┈┬┈┈┈┈┈┈┬┈┈┈┈┈┈┈┐
┆ id ┆ name   ┆ uid  ┆ level ┆  ◀ 表头header
├┈┈┈┈┼┈┈┈┈┈┈┈┈┤┈┈┈┈┈┈┤┈┈┈┈┈┈┈┤
┆  1 ┆ mysql  ┆ 0    ┆ 3     ┆
├┈┈┈┈┼┈┈┈┈┈┈┈┈┤┈┈┈┈┈┈┤┈┈┈┈┈┈┈┤
┆  2 ┆ redis  ┆ 12   ┆ 1     ┆  ◀ 行 row
└┈┈┈┈┴┈┈┈┈┈┈┈┈┴┈┈┈┈┈┈┴┈┈┈┈┈┈┈┘
    redis ▲ 值

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

登录MySQL

复制代码
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]

查看 MySQL 信息

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

退出MySQL会话

mysql 复制代码
mysql> exit 
退出 quit; 或 \q; 一样的效果

常用的

数据库 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; 杀死进程

备份

创建备份

sql 复制代码
mysqldump -u user -p db_name > db.sql

导出不带架构的数据库

shell 复制代码
mysqldump -u user -p db_name --no-data=true --add-drop-table=false > db.sql

恢复备份

shell 复制代码
mysql -u user -p db_name < db.sql

MySQL 示例

管理表格

创建一个包含三列的新表

sql 复制代码
CREATE TABLE t (
    id    INT,
    name  VARCHAR DEFAULT NOT NULL,
    price INT DEFAULT 0
    PRIMARY KEY(id)
);

从数据库中删除表

sql 复制代码
DROP TABLE t ;

向表中添加新列

sql 复制代码
ALTER TABLE t ADD column;

从表中删除列c

sql 复制代码
ALTER TABLE t DROP COLUMN c ;

添加约束

sql 复制代码
ALTER TABLE t ADD constraint;

删除约束

sql 复制代码
ALTER TABLE t DROP constraint;

将表从t1重命名为t2

sql 复制代码
ALTER TABLE t1 RENAME TO t2;

将列c1重命名为c2

sql 复制代码
ALTER TABLE t1 RENAME c1 TO c2 ;

将列c1的数据类型改为datatype

sql 复制代码
ALTER TABLE t1 MODIFY c1 datatype;

删除表中的所有数据

sql 复制代码
TRUNCATE TABLE t;

从表中查询数据

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

sql 复制代码
SELECT c1, c2 FROM t

查询表中的所有行和列

sql 复制代码
SELECT * FROM t

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

sql 复制代码
SELECT c1, c2 FROM t
WHERE condition

查询表中的不同行

sql 复制代码
SELECT DISTINCT c1 FROM t
WHERE condition

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

sql 复制代码
SELECT c1, c2 FROM t
ORDER BY c1 ASC [DESC]

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

sql 复制代码
SELECT c1, c2 FROM t
ORDER BY c1 
LIMIT n OFFSET offset

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

sql 复制代码
SELECT c1, aggregate(c2)
FROM t
GROUP BY c1

使用HAVING子句筛选组

sql 复制代码
SELECT c1, aggregate(c2)
FROM t
GROUP BY c1
HAVING condition

从多个表查询

内部连接 t1 和 t2

sql 复制代码
SELECT c1, c2 
FROM t1
INNER JOIN t2 ON condition

左连接t1和t1

sql 复制代码
SELECT c1, c2 
FROM t1
LEFT JOIN t2 ON condition

右连接t1和t2

sql 复制代码
SELECT c1, c2 
FROM t1
RIGHT JOIN t2 ON condition

执行完全外部连接

sql 复制代码
SELECT c1, c2 
FROM t1
FULL OUTER JOIN t2 ON condition

生成表中行的笛卡尔积

sql 复制代码
SELECT c1, c2 
FROM t1
CROSS JOIN t2

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

sql 复制代码
SELECT c1, c2 
FROM t1, t2

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

sql 复制代码
SELECT c1, c2
FROM t1 A
INNER JOIN t1 B ON condition

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

sql 复制代码
SELECT c1, c2 FROM t1
UNION [ALL]
SELECT c1, c2 FROM t2

返回两个查询的交集

sql 复制代码
SELECT c1, c2 FROM t1
INTERSECT
SELECT c1, c2 FROM t2

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

sql 复制代码
SELECT c1, c2 FROM t1
MINUS
SELECT c1, c2 FROM t2

使用模式匹配%查询行_

sql 复制代码
SELECT c1, c2 FROM t1
WHERE c1 [NOT] LIKE pattern

查询列表中的行

sql 复制代码
SELECT c1, c2 FROM t
WHERE c1 [NOT] IN value_list

查询两个值之间的行

sql 复制代码
SELECT c1, c2 FROM t
WHERE  c1 BETWEEN low AND high

检查表中的值是否为NULL

sql 复制代码
SELECT c1, c2 FROM t
WHERE  c1 IS [NOT] NULL

使用 SQL 约束

将c1和c2设置为主键

sql 复制代码
CREATE TABLE t(
    c1 INT, c2 INT, c3 VARCHAR,
    PRIMARY KEY (c1,c2)
);

将c2列设置为外键

sql 复制代码
CREATE TABLE t1(
    c1 INT PRIMARY KEY,  
    c2 INT,
    FOREIGN KEY (c2) REFERENCES t2(c2)
);

使c1和c2中的值唯一

sql 复制代码
CREATE TABLE t(
    c1 INT, c1 INT,
    UNIQUE(c2,c3)
);

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

sql 复制代码
CREATE TABLE t(
  c1 INT, c2 INT,
  CHECK(c1> 0 AND c1 >= c2)
);

c2列中的设置值不为NULL

sql 复制代码
CREATE TABLE t(
     c1 INT PRIMARY KEY,
     c2 VARCHAR NOT NULL
);

修改数据

在表格中插入一行

sql 复制代码
INSERT INTO t(column_list)
VALUES(value_list);

在表格中插入多行

sql 复制代码
INSERT INTO t(column_list)
VALUES (value_list), 
       (value_list), ...;

将行从t2插入t1

sql 复制代码
INSERT INTO t1(column_list)
SELECT column_list
FROM t2;

更新列c1中所有行的新值

sql 复制代码
UPDATE t
SET c1 = new_value;

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

sql 复制代码
UPDATE t
SET c1 = new_value, 
        c2 = new_value
WHERE condition;

删除表中的所有数据

sql 复制代码
DELETE FROM t;

删除表中的行子集

sql 复制代码
DELETE FROM t
WHERE condition;

管理视图

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

sql 复制代码
CREATE VIEW v(c1,c2) 
AS
SELECT c1, c2
FROM t;

使用选中选项创建新视图

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

创建递归视图

sql 复制代码
CREATE RECURSIVE VIEW v 
AS
select-statement -- anchor part
UNION [ALL]
select-statement; -- recursive part

创建临时视图

sql 复制代码
CREATE TEMPORARY VIEW v 
AS
SELECT c1, c2
FROM t;

删除视图

sql 复制代码
DROP VIEW view_name;

管理触发器

创建或修改触发器

sql 复制代码
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上创建索引

sql 复制代码
CREATE INDEX idx_name 
ON t(c1,c2);

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

sql 复制代码
CREATE UNIQUE INDEX idx_name
ON t(c3,c4)

删除索引

sql 复制代码
DROP INDEX idx_name ON t;

MySQL 数据类型

Strings

CHAR String (0 - 255)
VARCHAR String (0 - 255)
TINYTEXT String (0 - 255)
TEXT String (0 - 65535)
BLOB String (0 - 65535)
MEDIUMTEXT String (0 - 16777215)
MEDIUMBLOB String (0 - 16777215)
LONGTEXT String (0 - 429496­7295)
LONGBLOB String (0 - 429496­7295)
ENUM One of preset options
SET Selection of preset options

Date & time

DATE yyyy-MM-dd
TIME hh:mm:ss
DATETIME yyyy-MM-dd hh:mm:ss
TIMESTAMP yyyy-MM-dd hh:mm:ss
YEAR yyyy

Numeric

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

另见

相关推荐
FIN技术铺2 小时前
Redis集群模式之Redis Sentinel vs. Redis Cluster
数据库·redis·sentinel
内核程序员kevin4 小时前
在Linux环境下使用Docker打包和发布.NET程序并配合MySQL部署
linux·mysql·docker·.net
CodingBrother4 小时前
MySQL 中的 `IN`、`EXISTS` 区别与性能分析
数据库·mysql
kayotin4 小时前
Wordpress博客配置2024
linux·mysql·docker
代码小鑫4 小时前
A027-基于Spring Boot的农事管理系统
java·开发语言·数据库·spring boot·后端·毕业设计
小小不董5 小时前
Oracle OCP认证考试考点详解082系列16
linux·运维·服务器·数据库·oracle·dba
甄臻9245 小时前
Windows下mysql数据库备份策略
数据库·mysql
内蒙深海大鲨鱼5 小时前
qt之ui开发
数据库·qt·ui
杀神lwz5 小时前
Java 正则表达式
java·mysql·正则表达式
不爱学习的YY酱5 小时前
【计网不挂科】计算机网络第一章< 概述 >习题库(含答案)
java·数据库·计算机网络