1008 字
5 分钟
MySQL学习笔记 (1)
NOTE基于 MySQL 26.7。参考手册
SQL 是什么
SQL 指结构化查询语言,全称 Structured Query Language。
- SQL 用来访问和处理数据库。
- SQL 可以查询、插入、更新和删除数据。
- SQL 可以创建数据库和表。
- SQL 由 ANSI / ISO 标准化。现行标准是 ISO/IEC 9075(SQL<2023>2023>)。
本机是 MySQL Community Server 26.7.0。版本号是日历制:年.月.补丁。版本说明
不同数据库对 SQL 的支持不完全一样,但 SELECT、INSERT、UPDATE、DELETE、CREATE 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_name 和 hire_date 列:
SELECT last_name, hire_dateFROM employeeWHERE dept_no = 'D01';SQL 对大小写不敏感:SELECT 与 select 相同。
字符串用单引号。字符串里的单引号要写两个:
SELECT 'O''Brien';表名、列名建议用小写字母、数字和下划线,不要用空格。
一些最重要的 SQL 命令
SELECT- 从数据库中提取数据UPDATE- 更新数据库中的数据DELETE- 从数据库中删除数据INSERT INTO- 向数据库中插入新数据CREATE SCHEMA- 创建新数据库CREATE TABLE- 创建新表ALTER TABLE- 修改表DROP TABLE- 删除表CREATE INDEX- 创建索引DROP INDEX- 删除索引
按功能也可以分成:
- DDL(数据定义):
CREATE/ALTER/DROP - DML(数据操纵):
SELECT/INSERT/UPDATE/DELETE - DCL(数据控制):
GRANT/REVOKE - 事务:
START TRANSACTION/COMMIT/ROLLBACK
术语
- 数据:库里存储的基本对象。
- 数据库(DB):有组织、可共享的数据集合。
- 数据库管理系统(DBMS):管理数据库的软件,例如 MySQL。
- 数据库系统(DBS):数据库、DBMS、应用程序和数据库管理员合在一起。
| 关系模型 | 库里常说 | 含义 |
|---|---|---|
| 关系 | 表 | 列加上行 |
| 属性 | 列 / 字段 | 一列的名字和类型 |
| 元组 | 行 / 记录 | 一行上的一组值 |
| 分量 | 字段值 | 某一格里的值 |
| 域 | 取值范围 | 这一列允许哪些值 |
- 主键:用来标识一行,不能重复,也不能是 NULL。
- 外键:本表的值必须在另一表的主键(或唯一键)里出现,用来关联两表。
- 复合键:多列合在一起当一个键。
- 索引:加快查找的辅助结构。
- 冗余:同一事实存多份,更新时容易不一致。
- 实体完整性:主键非空、不重复。
- 参照完整性:外键不能指向不存在的键。
E-R 图
E-R 图用来画实体和它们之间的联系,再对应到表。

- 实体集:矩形
- 属性:椭圆
- 联系:菱形,边上标注
1:1、1:n、m: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 不会找出空值。
参考
MySQL学习笔记 (1)
https://blog.chuwu.top/posts/sql/mysql1/