MySQL 命令

数据库

-- 创建数据库
CREATE DATABASE database_name;
-- 删除数据库
DROP DATABASE database_name;
-- 选择数据库
USE database_name;

数据表

-- 创建数据表
CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    ...
);

-- 创建数据表案例
-- AUTO_INCREMENT 自增
-- PRIMARY KEY 主键
-- NOT NULL 不为空
-- BOOLEAN 布尔类型
-- DEFAULT TRUE 默认为 TRUE
-- ENGINE=InnoDB 设置存储引起为InnoDB
-- CHARACTER SET utf8mb4 设置字符集为utf8mb4
-- COLLATE utf8mb4_general_ci 设置排序规则为utf8mb4_general_ci
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    birthdate DATE,
    is_active BOOLEAN DEFAULT TRUE
)ENGINE=InnoDB  CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;


-- 删除数据表
DROP TABLE table_name ;

增/删/该数据

-- 插入数据
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

-- 更新数据
-- 一般需要通过WHERE来控制更新的数据范围
-- 防止全表更新这种错误操作
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

-- 删除数据
-- 通过WHERE控制数据范围,防止全部数据被删除
DELETE FROM table_name
WHERE condition;

查数据

SELECT * FROM table_name;

-- 条件查询
SELECT column1, column2, ...
FROM table_name
WHERE condition;
---------------------------------------------------------------------------------
-- 分页查询
SELECT column1, column2, ...
FROM table_name
LIMIT [offset] rows
-- 返回前10行数据
LIMIT 10
-- 从第21行开始,返回21~30的数据
LIMIT 20,10
---------------------------------------------------------------------------------
-- 模糊查询
SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;
-- pattern为模糊匹配的模型,包含通配符
-- 通过符有_与%,_为匹配一个字符,%匹配多个字符
-- 通常使用%进行模糊匹配
-- 匹配a开头的数据
Like 'a%'
-- 匹配a结尾的数据
Like '%a'
-- 匹配包含a的数据
Like '%a%'
---------------------------------------------------------------------------------
-- 分组查询
-- GROUP BY通常与聚合函数一起使用
-- 可以根据多个字段分组
-- HAVING 为过滤分组后的数据,不需要可以去掉
SELECT column1, SUM(column2) as count1
FROM table_name
WHERE condition
GROUP BY column1...
HAVING condition;
---------------------------------------------------------------------------------
-- 排序查询
-- ORDER BY 排序ASC升序,DESC降序,默认为ASC升序
-- 可以多字段排序
-- 很多时候配合limit使用
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC | DESC]...;
---------------------------------------------------------------------------------
-- 连接查询
-- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
SELECT column1, column2, ...
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;


-- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录
SELECT column1, column2, ...
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;


-- RIGHT JOIN(右连接):与LEFT JOIN相反,用于获取右表所有记录,即使左表没有对应匹配的记录
SELECT column1, column2, ...
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;


-- UNION 操作符用于连接两个及以上的SELECT语句结果组合到一个结果集中,并去除重复行
-- UNION ALL效果一样,但是不会去除重复行
SELECT column1, column2, ...
FROM table1
WHERE condition1
UNION
SELECT column1, column2, ...
FROM table2
WHERE condition2

NULL值处理

SELECT column1, column2, ...
FROM table_name

-- column1 = NULL
WHERE column1 IS NULL;
-- column1 != NULL
WHERE column1 IS NOT NULL;

ALTER命令(修改命令)

-- 添加列
ALTER TABLE table_name
ADD COLUMN new_column_name datatype;

-- 修改数据类型
ALTER TABLE TABLE_NAME
MODIFY COLUMN column_name new_datatype;

-- 修改列名
ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name datatype;

-- 删除列
ALTER TABLE table_name
DROP COLUMN column_name;

-- 添加主键
ALTER TABLE table_name
ADD PRIMARY KEY (column_name);

-- 添加外键
ALTER TABLE child_table
ADD CONSTRAINT fk_name
FOREIGN KEY (column_name)
REFERENCES parent_table (column_name);

-- 修改表名
ALTER TABLE old_table_name
RENAME TO new_table_name;

MySQL函数

MySQL有很多内置函数,这里仅列出比较实用的函数。

函数

描述

CONCAT(s1,s2...)

将多个字段拼接成一个字符串,没有间隔符

注意:如果有一个参数为NULL,那么返回值也为NULL

CONCAT_WS(separator,s1,s2...)

将多个字段拼接成一个字符串,可以自定义间隔符

注意:如果有一个参数为NULL,或设置的间隔符为NULL,那么返回值也为NULL

group_concat([distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator])

将GROUP BY产生的同一个分组中的值连接起来,返回一个zi'fu

IF(expr1,expr2,expr3)

判断expr1的值为true或false,true返回expr2,false返回expr3

IFNULL(expr1,expr2)

expr1的值为null,返回expr2, 不为null返回expr1

REPLACE(s,s1,s2)

在s中将s1替换为s2

MAX(expr)

返回字段中的最大值

MIN(expr)

返回字段中的最小值

AVG(expr)

返回字段的平均值

SUM(expr)

返回字段值的总和

COUNT()

返回字段的总数

NOW()

返回当前日期与时间

MySQL索引

-- 优化查询检测,相关详解请查看MySQL优化这篇文章
explain SQL

-- 查看表文件中已经存在的索引
SHOW INDEX FROM表
-- 创建索引
CREATE INDEX索引名 ON 表名 (字段...)
-- 删除索引
DROP INDEX索引名 on 表名