MySQL 库表操作全解析:从登录到权限管理的实战指南

学习目标:

  • 学习

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 定义数据库对象(库、表等) CREATEALTERDROP 创建数据库:CREATE DATABASE test_db;
DML 操作表中数据 INSERTUPDATEDELETE 插入数据:INSERT INTO user (id, name) VALUES (1, '张三');
DQL 查询表中数据 SELECT 查询所有数据:SELECT * FROM user;
DCL 管理用户权限 GRANTREVOKE 授权查询权限: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 支持utf8utf8mb4(支持 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 支持InnoDBMyISAM等引擎。

  • 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遍
  • 有错误请指出,作者会及时改正
相关推荐
韩立学长4 小时前
【开题答辩实录分享】以《自助游网站的设计与实现》为例进行选题答辩实录分享
java·mysql·spring
q_19132846956 小时前
基于Springboot+MySQL+RuoYi的会议室预约管理系统
java·vue.js·spring boot·后端·mysql·若依·计算机毕业设计
学海_无涯_苦作舟6 小时前
MySQL面试题
数据库·mysql·面试
君子剑mango7 小时前
MySQL8.0 窗口函数
数据库·mysql
vortex59 小时前
ORM是什么?如何理解ORM?ORM的优缺点?
java·数据库·sql·mysql·oracle·orm
九章-9 小时前
国企国产化替代标杆实践:金仓数据库赋能贵州磷化EMS系统自主可控升级
数据库·mysql·安全
麦麦鸡腿堡12 小时前
Java_MySQL介绍
java·开发语言·mysql
程序员阿鹏12 小时前
MySQL中给字段添加唯一约束的方式有哪些?
android·数据库·mysql
古月฿12 小时前
大学生素质测评系统设计与实现
java·vue.js·redis·mysql·spring·毕业设计
無量13 小时前
MySQL事务与锁机制深度剖析
后端·mysql