学习目标:
- 学习
MySQL 作为关系型数据库的经典代表,库表操作 是其核心应用能力的基石。本文将从登录解析、SQL 基础、库表操作、数据类型、约束、存储引擎到用户授权,全方位拆解 MySQL 库表操作的关键知识点,助力你从入门到精通。
3.1 登录解析:开启 MySQL 交互之门
MySQL 的登录是操作数据库的第一步,掌握不同登录方式和参数至关重要。
-
本地登录 :在安装 MySQL 的服务器上,通过命令行直接登录,语法为
mysql -u 用户名 -p,执行后输入密码即可进入交互界面。示例:bash
mysql -u root -p -
远程登录 :从其他机器连接 MySQL 服务器时,需指定主机地址,语法为
mysql -h 主机IP -u 用户名 -p。示例(连接 IP 为192.168.1.100的服务器):bash
mysql -h 192.168.1.100 -u root -p -
登录参数说明:
-h:指定 MySQL 服务器主机地址,本地登录可省略;-u:指定登录用户名;-p:提示输入密码(也可直接写-p123456,但存在安全风险,不建议);-P:指定 MySQL 服务端口(默认 3306,端口修改时需显式指定)。
3.2 SQL 语句基础:数据库操作的 "语法骨架"
SQL(结构化查询语言)是与 MySQL 交互的核心工具,按功能可分为四类:
| 类型 | 功能 | 关键命令 | 示例 |
|---|---|---|---|
| DDL | 定义数据库对象(库、表等) | CREATE、ALTER、DROP |
创建数据库:CREATE DATABASE test_db; |
| DML | 操作表中数据 | INSERT、UPDATE、DELETE |
插入数据:INSERT INTO user (id, name) VALUES (1, '张三'); |
| DQL | 查询表中数据 | SELECT |
查询所有数据:SELECT * FROM user; |
| DCL | 管理用户权限 | GRANT、REVOKE |
授权查询权限:GRANT SELECT ON test_db.* TO 'test_user'; |
3.3 库操作:数据库的 "增删改查"
数据库是表的容器,掌握库的基本操作是管理数据的前提。
-
创建数据库:可指定字符集(避免乱码)
sql
CREATE DATABASE IF NOT EXISTS test_db CHARACTER SET utf8mb4;(
IF NOT EXISTS避免重复创建报错,CHARACTER SET指定字符集) -
查看数据库:
sql
SHOW DATABASES; -- 查看所有数据库 SHOW CREATE DATABASE test_db; -- 查看test_db的创建细节 -
选择数据库:操作某数据库前需先选择
sql
USE test_db; -
删除数据库:谨慎操作,删除后数据不可恢复
sql
DROP DATABASE IF EXISTS test_db;
3.4 数据库字符集:数据存储的 "编码规则"
字符集决定了数据库如何存储和处理文本数据,MySQL 支持utf8、utf8mb4(支持 emoji)、gbk等字符集。
-
查看字符集:
sql
SHOW CREATE DATABASE test_db;执行后可看到
CHARACTER SET指定的字符集。 -
修改字符集:
sql
ALTER DATABASE test_db CHARACTER SET utf8mb4; -
选择建议 :需支持多语言、emoji → 选
utf8mb4;仅处理中文 →gbk可选,但utf8mb4是趋势。
3.5 数据库数据类型:数据的 "分类容器"
MySQL 为不同类型的数据提供了丰富的数据类型,合理选择可优化存储和查询效率。
数值类型
- 整数型:
TINYINT(1 字节)、INT(4 字节)、BIGINT(8 字节)等。示例:age INT(3)(存储年龄)。 - 浮点型:
FLOAT(单精度)、DOUBLE(双精度)、DECIMAL(高精度,适合金额)。示例:price DECIMAL(10,2)(总长度 10,小数位 2)。
字符串类型
CHAR:固定长度(如手机号CHAR(11))。VARCHAR:可变长度(如姓名VARCHAR(50))。TEXT:大文本(如文章内容TEXT)。
日期时间类型
DATE:日期(YYYY-MM-DD),示例:birthday DATE。DATETIME:日期时间(YYYY-MM-DD HH:MM:SS),示例:create_time DATETIME。TIMESTAMP:时间戳(可自动更新),示例:update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。
3.6 数据库表操作:表的 "生命周期管理"
表是数据存储的核心载体,掌握表的创建、修改、删除是必备技能。
-
创建表:指定表名、列名、数据类型及约束
sql
CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, -- 主键+自增 name VARCHAR(50) NOT NULL, -- 姓名+非空 age INT, gender CHAR(1), create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); -
查看表:
sql
SHOW TABLES; -- 查看当前库所有表 DESC user; -- 查看user表结构 SHOW CREATE TABLE user; -- 查看user表创建语句 -
修改表:
- 添加列:
ALTER TABLE user ADD COLUMN email VARCHAR(50); - 修改列类型:
ALTER TABLE user MODIFY COLUMN age TINYINT; - 修改列名:
ALTER TABLE user CHANGE COLUMN gender sex CHAR(1); - 删除列:
ALTER TABLE user DROP COLUMN email;
- 添加列:
-
删除表:谨慎操作,数据不可恢复
sql
DROP TABLE IF EXISTS user;
3.7 数据库对象:表之外的 "功能扩展"
除了表,MySQL 还有视图、存储过程、函数、触发器等对象,用于扩展数据库功能。
-
视图:基于查询结果的虚拟表,简化复杂查询
sql
CREATE VIEW v_user_age AS SELECT name, age FROM user WHERE age > 20;查询视图:
SELECT * FROM v_user_age; -
存储过程:预编译的 SQL 集合,可带逻辑
sql
DELIMITER // -- 临时修改语句结束符(避免与存储过程内分号冲突) CREATE PROCEDURE get_user(IN uid INT) BEGIN SELECT * FROM user WHERE id = uid; END // DELIMITER ; -- 还原语句结束符调用存储过程:
CALL get_user(1); -
函数:返回单个值的存储程序
sql
CREATE FUNCTION get_age_avg() RETURNS INT BEGIN DECLARE avg_age INT; SELECT AVG(age) INTO avg_age FROM user; RETURN avg_age; END;调用函数:
SELECT get_age_avg(); -
触发器:表数据变更时自动执行的程序
sql
DELIMITER // CREATE TRIGGER trg_user_insert AFTER INSERT ON user FOR EACH ROW BEGIN INSERT INTO user_log (user_id, action) VALUES (NEW.id, 'insert'); END // DELIMITER ;
3.8 数据库表的复制:数据的 "快速克隆"
表复制可用于备份、测试或结构复用,MySQL 提供多种复制方式。
-
复制表结构(不含数据):
sql
CREATE TABLE user_copy LIKE user; -
复制表结构 + 数据:
sql
CREATE TABLE user_copy AS SELECT * FROM user; -
复制部分数据:
sql
CREATE TABLE user_adult AS SELECT * FROM user WHERE age >= 18; -
跨库复制表:
sql
CREATE TABLE test_db_new.user_copy AS SELECT * FROM test_db_old.user;
3.9 数据库字典:MySQL 的 "自我描述系统"
数据库字典是 MySQL 存储自身元数据 (库、表、列、权限等)的系统表,位于information_schema库中,可通过查询它了解数据库结构。
-
查询所有数据库:
sql
SELECT SCHEMA_NAME FROM information_schema.SCHEMATA; -
查询表结构:
sql
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'test_db' AND TABLE_NAME = 'user'; -
查询索引信息:
sql
SELECT INDEX_NAME, COLUMN_NAME FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = 'test_db' AND TABLE_NAME = 'user';
3.10 表约束:数据完整性的 "保障机制"
约束用于保证表中数据的准确性和一致性,MySQL 支持多种约束。
| 约束类型 | 作用 | 示例 |
|---|---|---|
| 主键(PRIMARY KEY) | 唯一标识记录,非空且唯一 | CREATE TABLE user (id INT PRIMARY KEY, ...); |
| 唯一(UNIQUE) | 列值唯一,可空 | CREATE TABLE user (phone CHAR(11) UNIQUE, ...); |
| 非空(NOT NULL) | 列值不可为空 | CREATE TABLE user (name VARCHAR(50) NOT NULL, ...); |
| 默认(DEFAULT) | 列无值时取默认值 | CREATE TABLE user (status TINYINT DEFAULT 1, ...); |
| 外键(FOREIGN KEY) | 建立表间关联,保证引用完整性 | CREATE TABLE order (user_id INT, FOREIGN KEY (user_id) REFERENCES user(id)); |
3.11 存储引擎:表的 "底层存储引擎"
存储引擎决定了表的存储方式、性能特性和功能支持 ,MySQL 支持InnoDB、MyISAM等引擎。
-
InnoDB:
- 支持事务、行级锁、外键,是 MySQL 默认存储引擎;
- 适合高并发、需事务支持的业务(如电商订单);
- 示例:
CREATE TABLE user (...) ENGINE=InnoDB;
-
MyISAM:
- 不支持事务,支持全文索引,查询性能较好;
- 适合只读 / 读多写少、无需事务的场景(如日志表);
-
查看 / 修改存储引擎:
sql
SHOW CREATE TABLE user; -- 查看存储引擎 ALTER TABLE user ENGINE = MyISAM; -- 修改存储引擎
3.12 用户和授权:数据库的 "门禁管理"
用户管理和权限控制是数据库安全的核心,MySQL 通过user表和GRANT语句实现。
-
创建用户:
sql
-- 本地用户(仅允许localhost登录) CREATE USER 'test_user'@'localhost' IDENTIFIED BY '123456'; -- 远程用户(%表示任意IP可登录) CREATE USER 'test_user'@'%' IDENTIFIED BY '123456'; -
授予权限:
- 授予所有权限:
GRANT ALL ON test_db.* TO 'test_user'@'localhost'; - 授予部分权限:
GRANT SELECT, INSERT ON test_db.user TO 'test_user'@'localhost'; - 授予管理员权限(谨慎):
GRANT ALL ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
- 授予所有权限:
-
查看 / 回收 / 删除权限:
sql
SHOW GRANTS FOR 'test_user'@'localhost'; -- 查看权限 REVOKE INSERT ON test_db.user FROM 'test_user'@'localhost'; -- 回收权限 DROP USER 'test_user'@'localhost'; -- 删除用户
通过以上 12 个模块的学习,你已掌握 MySQL 库表操作的核心知识体系------ 从登录到权限管理,从表结构到数据类型,从基础操作到高级对象。建议结合业务场景多动手实践,才能真正做到融会贯通,让这些知识点成为你驾驭 MySQL 数据库的坚实基础
学习时间:
学习时间为学习时间
|-----------|------------|
| 学习时间 | 筋肉人 |
| 为学习时间 | future |
内容为笔记【有时比较抽象,有时比较过于详细,请宽恕。作者可能写的是仅个人笔记,筋肉人future】
学习产出:
- 技术笔记 1遍
- 有错误请指出,作者会及时改正



