跳到主要内容

MySQL 学习笔记:数据增删查改

SQL 是一个数据库编程语言.

数据库操作

【增】新增数据库 CREATE DATABASE

CREATE DATABASE [IF NOT EXISTS] <database_name>
[CHARACTER SET <charset_name>]
[COLLATE <collation_name>];
  • 若同名数据库已存在则会报错,使用 IF NOT EXISTS 可以跳过报错。
  • CHARACTER SET 指定编码集。要存储 UTF-8 编码的字符,请使用 CHARACTER SET utf8mb4
  • COLLATE 指定排序方法。例如 COLLATE utf8mb4_general_ci

【删】删除数据库 DROP DATABASE

DROP DATABASE [IF EXISTS] <database_name>;

【查】查询数据库 SHOW DATABASES

  • 列举所有数据库:SHOW DATABASES;
  • 选择数据库:USE database_name;
  • 退出 MySQL:EXIT;QUIT;

数据表操作

【增】新增数据表 CREATE TABLE

CREATE TABLE table_name (
column1 datatype,
column2 datatype,
...
);

例子:

CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
birthdate DATE,
is_active BOOL DEFAULT TRUE
);
  • PRIMARY KEY 表示置为主键,AUTO_INCREMENT 表示每次自增。
  • NOT NULL 表示不能为空,否则报错。
  • DEFAULT 设置默认值。

【删】删除数据表 DROP TABLE

DROP TABLE [IF EXISTS] table_name;

【查】查询数据表 SHOW TABLES

  • 列举数据库中所有表:SHOW TABLES;
  • 查看表结构:DESC table_name

记录操作

【增】新增记录 INSERT INTO

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

column1 是列名,value1 是相应的值。字符串、日期等需要写在引号 '' 中间。

例子:

INSERT INTO users (username, email, birthdate, is_active)
VALUES ('test', 'test@runoob.com', '1990-01-01', true);

其它未指定的列将设为默认值. 若省略列名, 则必须填充所有列:

INSERT INTO users
VALUES (NULL, 'test', 'test@runoob.com', '1990-01-01', true);

NULL 表示空, 此处自动填充自增 id。也可以一次添加若干列

INSERT INTO users (username, email, birthdate, is_active)
VALUES
('test1', 'test1@runoob.com', '1985-07-10', true),
('test2', 'test2@runoob.com', '1988-11-25', false),
('test3', 'test3@runoob.com', '1993-05-03', true);

【删】删除记录 DELETE FROM

DELETE FROM table_name
WHERE condition;

会删除所有满足条件的行数据。

例子:

DELETE FROM users
WHERE username = 'test3';

【查】查询记录 SELECT FROM

SELECT column1, column2, ...
FROM table_name
[WHERE condition]
[ORDER BY column_name [ASC | DESC]]
[LIMIT number];
  • SELECT * 而不输入列名表示返回所有行。
  • WHERE 筛选数据。
  • ORDER BY 排序,默认 ASC 升序,也可以 DESC 降序。
  • LIMIT 指定最多返回的行数。

【改】修改记录 UPDATE SET

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

会更新所有满足条件的行数据。

例子:

UPDATE users
SET is_active = true
WHERE username = 'test2';

数据库、数据表、记录增删查改总结

数据库数据表记录
CREATE DATABASECREATE TABLEINSERT INTO
DROP DATABASEDROP TABLEDELETE FROM
SHOW DATABASESSHOW TABLESSELECT FROM
UPDATE SET

数据类型

类别名称存储范围
整数TINYINT [UNSIGNED]有符号 [128,127][-128, 127]。无符号下限值是 00、上限值是有符号上限值的 22 倍再加 11,下同。
整数SMALLINT [UNSIGNED]有符号 [32768,32767][-32768, 32767]
整数MEDIUMINT [UNSIGNED]有符号 [±8.4×106][\pm 8.4\times 10^6]
整数INT [UNSIGNED]有符号 [±2.1×109][\pm 2.1 \times 10^9]
整数BIGINT [UNSIGNED]有符号 [±9.2×1018][\pm 9.2 \times 10^{18}]
小数FLOAT[(M, D)] [UNSIGNED]103810^{38}103810^{-38} 量级,77 位有效数字。M 是显示长度,D 是小数位数,下同。
小数DOUBLE[(M, D)] [UNSIGNED]1030810^{308}1030810^{-308} 量级,1515 位有效数字。
小数DEMICAL(M, D) [UNSIGNED]高精度小数。
逻辑值BOOL{,}\{\top, \bot\}
字符串CHAR(L)不超过 255 字节。长度为 L 的字符串,空位用空字符补齐。汉字、字母都算一个字符,下同。
字符串VARCHAR(L)不超过 65535 字节。长度最多为 L 的字符串。
日期时间DATE1000-01-01 至 9999-12-31。
日期时间TIME±838:59:59。
日期时间YEAR1901 至 2155。
日期时间DATETIME1000-01-01 00:00:00 至 9999-12-31 23:59:59。
日期时间TIMESTAMP1970-01-01 00:00:00 UTC 至 2038-01-19 03:14:07 UTC。
预设值ENUM(A, B, ...)若干个预设值中,单选一个。
预设值SET(A, B, ...)若干个预设值中,多选一个或多个。

其它查询语句

查找条件 WHERE

WHERE 子句有如下用法:

  • 关系符 = != > < >= <=,例 WHERE column = value

  • 组合条件 AND OR,例 WHERE cond1 AND cond2

  • 否定条件,例 WHERE NOT cond

  • IN 条件,例 WHERE column IN (value1, value2, ...)

  • BETWEEN AND 条件,例 WHERE column1 BETWEEN value1 AND value2

  • IS NULL IS NOT NULL 条件,例 WHERE column IS NULL

  • 字符串模糊匹配 LIKE,用 % 表示零个或多个字符,用 _ 表示一个字符,例 WHERE column LIKE a% 表示匹配以 a 开头的字符串。

  • 正则表达式匹配 RLINE [BINARY],其中 BINARY 表示区分大小写,例 WHERE column RLIKE a.* 表示匹配以 a 开头的字符串。

合并输出 UNION

合并多个 SELECT 语句的结果输出。每个 SELECT 语句选定列的数量和对应数据类型必须相同。

SELECT column1, column2, ...
FROM table1
WHERE condition1
UNION [ALL]
SELECT column1, column2, ...
FROM table2
WHERE condition2
[ORDER BY column1, column2, ...];

UNION 将会删除重复行,UNION ALL 则不会。

排序输出 ORDER BY

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;

本系列的参考文献

[1] 菜鸟教程. MySQL 教程. https://www.runoob.com/mysql/mysql-tutorial.html

[2] CSDN: 争不过朝夕,又念着往昔. MySQL数据类型. https://blog.csdn.net/m0_74189279/article/details/137098187.