MySQL 学习笔记(第二期):SQL 语言之库表操作与数据类型

MySQL 学习笔记(第二期):SQL 语言之库/表操作与数据类型

本笔记承接第一期,进入 SQL 语言核心部分。本期重点:数据库与表的创建、修改、删除操作,MySQL 数据类型详解,字符集与排序规则,以及约束属性的使用。所有代码经过整理与注释,便于理解和实践。


一、SQL 语言概述

1.1 SQL 分类

类别 全称 功能 常用语句
DDL Data Definition Language 定义数据结构(库、表、索引等) CREATE, DROP, ALTER
DML Data Manipulation Language 操作表中数据 INSERT, DELETE, UPDATE
DQL Data Query Language 查询表中数据 SELECT
DCL Data Control Language 权限控制 GRANT, REVOKE
TCL Transaction Control Language 事务控制 BEGIN, COMMIT, ROLLBACK, SAVEPOINT

1.2 SQL 语言规范

  • SQL 语句不区分大小写(建议关键字大写,表名/库名在某些系统中区分大小写)

  • 语句以分号 ; 结尾,可单行或多行书写

  • 关键词不能跨行或简写

  • 使用空格和缩进提高可读性

  • 注释方式:

    sql

    复制代码
    -- 单行注释
    # MySQL 特有的单行注释
    /*
       多行注释
    */

1.3 数据库对象与命名规则

数据库组件:数据库、表、索引、视图、用户、存储过程、函数、触发器、事件调度器等。

命名规则

  • 可包含字母、数字和 # _ $
  • 不能使用 MySQL 保留字

二、字符集与排序规则

2.1 查看支持的字符集

sql

复制代码
SHOW CHARSET;
  • MySQL 8.0 默认字符集为 utf8mb4(早期为 latin1
  • utf8mb4 支持完整的 Unicode(包括 emoji),推荐使用

2.2 查看当前字符集变量

sql

复制代码
SHOW VARIABLES LIKE 'character%';

示例输出(默认 utf8mb4):

Variable_name Value
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8mb4
character_set_results utf8mb4
character_set_server utf8mb4

2.3 修改默认字符集(配置文件中)

ini

复制代码
# /etc/my.cnf.d/mysql-server.cnf
[mysqld]
character-set-server=utf8mb4

# /etc/my.cnf.d/client.cnf
[client]
default-character-set=utf8mb4

修改后需重启服务:

bash

复制代码
systemctl restart mysqld

2.4 查看排序规则

sql

复制代码
SHOW COLLATION;
SHOW VARIABLES LIKE 'collation%';
  • utf8mb4_0900_ai_ci 是 MySQL 8.0 的默认排序规则(不区分大小写)
  • utf8mb4_bin 区分大小写,按二进制值比较

三、管理数据库(DDL)

3.1 查看数据库列表

sql

复制代码
SHOW DATABASES;

默认四个系统库:information_schema, mysql, performance_schema, sys(不可删除)。

3.2 创建数据库

语法

sql

复制代码
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [create_option] ...

create_option:
    [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name
  | [DEFAULT] ENCRYPTION [=] {'Y' | 'N'}

范例

sql

复制代码
-- 基本创建
CREATE DATABASE testdb1;

-- 如果已存在则忽略错误
CREATE DATABASE IF NOT EXISTS testdb1;

-- 查看创建语句(含默认字符集)
SHOW CREATE DATABASE testdb1;

-- 创建时指定字符集
CREATE DATABASE testdb2 DEFAULT CHARACTER SET latin1;

-- 创建后修改字符集
ALTER DATABASE testdb2 CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

原理 :创建数据库本质是在数据目录(如 /var/lib/mysql/)下创建一个同名目录。

3.3 修改数据库

sql

复制代码
ALTER {DATABASE | SCHEMA} [db_name] alter_option ...

范例:

sql

复制代码
ALTER DATABASE testdb2 READ ONLY = 1;   -- 设为只读
ALTER DATABASE testdb2 READ ONLY = 0;   -- 取消只读
ALTER DATABASE testdb2 ENCRYPTION = 'Y'; -- 启用加密

3.4 删除数据库

sql

复制代码
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name;

范例:

sql

复制代码
DROP DATABASE testdb2;
DROP DATABASE IF EXISTS testdb2;   -- 如果不存在不报错

命令行等价操作

bash

复制代码
mysqladmin create db1
mysqladmin drop testdb1   # 会提示确认,加 -f 强制删除

四、数据类型(核心)

数据类型定义了字段可存储的数据种类、范围和格式,目的是保证规范性、节省空间、提升效率。

4.1 数值类型

整数类型
类型 字节 有符号范围 无符号范围 用途
TINYINT 1 -128 ~ 127 0 ~ 255 小整数(如性别 0/1)
SMALLINT 2 -32768 ~ 32767 0 ~ 65535 较大整数
MEDIUMINT 3 -8388608 ~ 8388607 0 ~ 16777215 中等整数
INT (INTEGER) 4 -2.1e9 ~ 2.1e9 0 ~ 4.29e9 最常用:年龄、ID
BIGINT 8 -9.22e18 ~ 9.22e18 0 ~ 1.84e19 极大整数(手机号、身份证号)
浮点与定点数
类型 字节 说明
FLOAT 4 单精度,约 7 位有效数字
DOUBLE 8 双精度,约 15 位有效数字
DECIMAL(M,D) 变长 定点数,精确,用于金额、价格,避免精度丢失。M 为总位数,D 为小数位数

示例:DECIMAL(10,2) 表示总共 10 位,其中小数 2 位(如 12345678.90)。

4.2 日期和时间类型

类型 字节 范围 格式 用途
DATE 3 '1000-01-01' ~ '9999-12-31' YYYY-MM-DD 日期值(出生日期)
TIME 3 '-838:59:59' ~ '838:59:59' HH:MM:SS 时间值或持续时间
YEAR 1 1901 ~ 2155 YYYY 年份
DATETIME 8 '1000-01-01 00:00:00' ~ '9999-12-31 23:59:59' YYYY-MM-DD HH:MM:SS 最常用:注册时间、订单时间
TIMESTAMP 4 '1970-01-01 00:00:01' UTC ~ '2038-01-19 03:14:07' UTC YYYY-MM-DD HH:MM:SS 时间戳,自动更新(范围较小)

注意:TIMESTAMP 存储的是 UTC 值,受时区影响;DATETIME 不受时区影响。推荐使用 DATETIME。

4.3 字符串类型

类型 最大长度(字符/字节) 说明
CHAR(n) 0 ~ 255 字符 定长字符串,效率高,存储固定长度信息(如身份证号)
VARCHAR(n) 0 ~ 65535 字符 变长字符串,节省空间,推荐用于姓名、地址等
TINYTEXT 255 字节 短文本
TEXT 65535 字节(约 64KB) 长文本
MEDIUMTEXT 16,777,215 字节(约 16MB) 中等长度文本
LONGTEXT 4,294,967,295 字节(约 4GB) 极大文本
BINARY/VARBINARY 类似 CHAR/VARCHAR 存储二进制字节串,无字符集
BLOB 系列 TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB 二进制数据(图片、文件)
ENUM 最多 65535 个值 枚举,从预设值中选择一个(如性别 'M','F')
SET 最多 64 个成员 集合,可选择多个值

使用建议

  • 定长且长度稳定的字段用 CHAR(如 MD5 密码)
  • 长度可变用 VARCHAR
  • 大文本用 TEXT 系列
  • 金额用 DECIMAL,避免 FLOAT/DOUBLE 的精度问题

4.4 列属性

属性 含义
NOT NULL 该列不能为空
DEFAULT 默认值
PRIMARY KEY 主键(唯一且非空)
AUTO_INCREMENT 自动递增(通常用于 INT 主键)
UNSIGNED 无符号(非负)
CHARACTER SET name 指定该列的字符集

五、管理表(DDL)

5.1 创建表

基本语法

sql

复制代码
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (
    column_name data_type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY],
    ...
) ENGINE=engine_name DEFAULT CHARSET=charset_name;

范例:创建学生表

sql

复制代码
USE db1;   -- 先切换到目标数据库

CREATE TABLE student (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,   -- 无符号自增主键
    name VARCHAR(20) NOT NULL,                    -- 变长字符串,非空
    age TINYINT UNSIGNED,                         -- 小整数,非负
    gender ENUM('M','F') DEFAULT 'M'              -- 枚举,默认为 M
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4;

查看表

sql

复制代码
SHOW TABLES;                -- 查看当前库所有表
DESC student;               -- 查看表结构(字段)
SHOW COLUMNS FROM student;  -- 同上
SHOW CREATE TABLE student;  -- 查看建表语句(含所有细节)

插入测试数据

sql

复制代码
INSERT INTO student (name, age) VALUES ('xiaoming', 20);
INSERT INTO student (name, age, gender) VALUES ('xiaohong', 18, 'F');

查询数据

sql

复制代码
SELECT * FROM student;

5.2 通过查询结果创建表(复制数据)

sql

复制代码
-- 复制数据(包含结构和数据)
CREATE TABLE student2 SELECT name, age FROM student;

-- 复制结构但不复制数据
CREATE TABLE student3 LIKE student;

5.3 修改表(ALTER TABLE)

修改表名

sql

复制代码
ALTER TABLE student RENAME TO stu;
添加字段

sql

复制代码
ALTER TABLE stu ADD phone VARCHAR(11) AFTER name;   -- 在 name 之后添加
修改字段类型

sql

复制代码
ALTER TABLE stu MODIFY phone INT;
修改字段名和类型

sql

复制代码
ALTER TABLE stu CHANGE COLUMN phone mobile CHAR(11);
删除字段

sql

复制代码
ALTER TABLE stu DROP COLUMN mobile;
修改表字符集

sql

复制代码
ALTER TABLE stu CHARACTER SET utf8;
同时修改字段类型和字符集

sql

复制代码
ALTER TABLE stu CHANGE name name CHAR(30) CHARACTER SET utf8;
设置字段默认值

sql

复制代码
ALTER TABLE stu ALTER COLUMN gender SET DEFAULT 'M';
添加字段并设置默认值

sql

复制代码
ALTER TABLE stu ADD is_del BOOL DEFAULT false;
ALTER TABLE stu MODIFY is_del BOOL DEFAULT true;   -- 修改默认值
添加主键

sql

复制代码
ALTER TABLE stu2 ADD PRIMARY KEY (id);
删除主键

sql

复制代码
ALTER TABLE stu2 DROP PRIMARY KEY;

5.4 查看表状态

sql

复制代码
-- 查看指定表状态
SHOW TABLE STATUS LIKE 'student'\G

-- 查看当前库所有表状态
SHOW TABLE STATUS FROM db1;

-- 查看所有存储引擎
SHOW ENGINES;

5.5 删除表

sql

复制代码
DROP TABLE [IF EXISTS] tbl_name [, tbl_name] ...;

范例:

sql

复制代码
DROP TABLE student2, student3;
DROP TABLE IF EXISTS student4;

六、本期知识点归纳一览表

类别 知识点 关键点/命令
SQL 分类 DDL / DML / DQL / DCL / TCL 各司其职
字符集 utf8mb4(推荐) SHOW CHARSET, SHOW VARIABLES LIKE 'character%'
排序规则 utf8mb4_0900_ai_ci(默认不区分大小写) SHOW COLLATION, SHOW VARIABLES LIKE 'collation%'
数据库操作 创建、修改、删除 CREATE DATABASE, ALTER DATABASE, DROP DATABASE
数值类型 INT, DECIMAL, TINYINT, BIGINT 金额用 DECIMAL,年龄用 INT UNSIGNED
日期类型 DATETIME(推荐), DATE, TIMESTAMP 注册时间用 DATETIME
字符串类型 VARCHAR(变长), CHAR(定长), TEXT, ENUM 姓名用 VARCHAR,固定码用 CHAR
列属性 NOT NULL, DEFAULT, AUTO_INCREMENT, PRIMARY KEY 主键通常为自增 INT
创建表 CREATE TABLE ... 需指定引擎(InnoDB)、字符集
查看表 SHOW TABLES, DESC, SHOW CREATE TABLE 快速获取结构
复制表 CREATE TABLE ... SELECT(含数据) CREATE TABLE ... LIKE(仅结构) 灵活复用
修改表 ALTER TABLE ADD/MODIFY/CHANGE/DROP/RENAME 谨慎使用 DROP COLUMN
删除表 DROP TABLE 不可恢复,慎用

下一期预告:SQL 语言之数据操作与单表查询(DML:INSERT/UPDATE/DELETE,DQL:SELECT 详解、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT、聚合函数等)。

相关推荐
行业研究员1 小时前
2026 AI Agent记忆解决方案:腾讯云数据库提供全场景支撑
数据库·人工智能·腾讯云·ai记忆
我是一颗柠檬1 小时前
【Redis】哨兵机制Day10
数据库·redis·后端·缓存
鲨鱼辣椒喔1 小时前
# 团队密码管理工具怎么选?对比 Bitwarden、Vault、Excel 和 OpsTiny
运维·数据库·安全·密码学·个人开发
fangdengfu1231 小时前
jenkins使用pipeline实现滚动发布
运维·jenkins
爱就是恒久忍耐1 小时前
Ubuntu解决pip3安装库提示This environment is externally managed的问题
linux·python·ubuntu
段一凡-华北理工大学1 小时前
工业领域的Hadoop架构学习~系列文章11:Kerberos安全认证
数据仓库·hadoop·学习·架构·高炉炼铁·工业智能体·高炉炼铁智能化
chushiyunen1 小时前
php笔记、下载安装等
开发语言·笔记·php
一锅炖出任易仙1 小时前
创梦汤锅学习日记day23
学习·ai·ue5
闲猫1 小时前
SSH 黑屏配置试用环境机器,受限bash和自定义shell
运维·ssh·bash