1008 字
5 分钟
MySQL学习笔记 (1)
2026-08-25
NOTE

基于 MySQL 26.7。参考手册

SQL 是什么#

SQL 指结构化查询语言,全称 Structured Query Language。

  • SQL 用来访问和处理数据库。
  • SQL 可以查询、插入、更新和删除数据。
  • SQL 可以创建数据库和表。
  • SQL 由 ANSI / ISO 标准化。现行标准是 ISO/IEC 9075(SQL<2023>)。

本机是 MySQL Community Server 26.7.0。版本号是日历制:年.月.补丁版本说明

不同数据库对 SQL 的支持不完全一样,但 SELECTINSERTUPDATEDELETECREATE TABLE 这些命令用法相近。

SQL 能做什么#

  • 从数据库取回数据
  • 在数据库中插入新的记录
  • 更新数据库中的数据
  • 从数据库删除记录
  • 创建新数据库
  • 在数据库中创建新表
  • 在数据库中创建视图
  • 设置表的权限

RDBMS#

RDBMS 指关系型数据库管理系统(Relational Database Management System)。

数据存放在表里。表由列和行组成:一列是一个字段,一行是一条记录。

MySQL、PostgreSQL、SQLite 都属于 RDBMS。

登录#

mysql -u root -p

查看版本:

mysql --version

也可以写成 mysql -V(大写 V)。远程连接加上 -h 主机

SQL 语句#

大部分工作都由 SQL 语句完成。语句通常以分号结束。

下面的语句从 employee 表选取 last_namehire_date 列:

SELECT last_name, hire_date
FROM employee
WHERE dept_no = 'D01';

SQL 对大小写不敏感:SELECTselect 相同。

字符串用单引号。字符串里的单引号要写两个:

SELECT 'O''Brien';

表名、列名建议用小写字母、数字和下划线,不要用空格。

一些最重要的 SQL 命令#

  • SELECT - 从数据库中提取数据
  • UPDATE - 更新数据库中的数据
  • DELETE - 从数据库中删除数据
  • INSERT INTO - 向数据库中插入新数据
  • CREATE SCHEMA - 创建新数据库
  • CREATE TABLE - 创建新表
  • ALTER TABLE - 修改表
  • DROP TABLE - 删除表
  • CREATE INDEX - 创建索引
  • DROP INDEX - 删除索引

按功能也可以分成:

  1. DDL(数据定义):CREATE / ALTER / DROP
  2. DML(数据操纵):SELECT / INSERT / UPDATE / DELETE
  3. DCL(数据控制):GRANT / REVOKE
  4. 事务START TRANSACTION / COMMIT / ROLLBACK

术语#

  • 数据:库里存储的基本对象。
  • 数据库(DB):有组织、可共享的数据集合。
  • 数据库管理系统(DBMS):管理数据库的软件,例如 MySQL。
  • 数据库系统(DBS):数据库、DBMS、应用程序和数据库管理员合在一起。
关系模型库里常说含义
关系列加上行
属性列 / 字段一列的名字和类型
元组行 / 记录一行上的一组值
分量字段值某一格里的值
取值范围这一列允许哪些值
  • 主键:用来标识一行,不能重复,也不能是 NULL。
  • 外键:本表的值必须在另一表的主键(或唯一键)里出现,用来关联两表。
  • 复合键:多列合在一起当一个键。
  • 索引:加快查找的辅助结构。
  • 冗余:同一事实存多份,更新时容易不一致。
  • 实体完整性:主键非空、不重复。
  • 参照完整性:外键不能指向不存在的键。

E-R 图#

E-R 图用来画实体和它们之间的联系,再对应到表。

E-R 图

  • 实体集:矩形
  • 属性:椭圆
  • 联系:菱形,边上标注 1:11:nm:n

例如:学生、课程、教师、院系。多对多关系用一张单独的表来存放。

逻辑模型还有层次、网状、关系三种。关系数据库用二维表表示实体和联系:

逻辑模型

表头是列名,一行是一条记录,格子里的值必须符合该列的类型。

表格示例

注释#

-- 单行注释(-- 后面要有空格)
SELECT 1; -- 行尾注释
/* 多行注释 */

NULL#

NULL 表示缺少值,不是 0,也不是空字符串 ''

判断是否为 NULL,要用 IS NULL / IS NOT NULL

SELECT * FROM employee WHERE salary IS NULL;
SELECT * FROM employee WHERE salary IS NOT NULL;

注意:WHERE salary = NULL 不会找出空值。


参考#

  1. MySQL 26.7 · SQL Standards
  2. MySQL 26.7 · SQL Statement Syntax
  3. MySQL 26.7 · Language Structure
  4. MySQL 26.7 · Working with NULL
  5. MySQL 26.7 · What Is New
  6. ISO/IEC 9075(SQL<2023>
MySQL学习笔记 (1)
https://blog.chuwu.top/posts/sql/mysql1/
作者
ChuwuYo
发布于
2026-08-25
许可协议
CC BY-NC-SA 4.0