【Mysql】表的操作

查看所有表


语法

复制代码
  show tables;

(1)作用:查看当前选中数据库里面所有的数据表名称

(2)使用前提:必须先切换到对应的数据库,use 数据库名

  • 查看指定数据库下的表

    复制代码
    -- 查看指定数据库下的表,不用先use
    show tables from test;

创建表


语法模板

复制代码
   CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
   (
       field datatype [约束] [comment '注解内容'],
       [, field datatype [约束] [comment '注解内容']] ...
   ) [engine 存储引擎] [character set 字符集] [collate 排序规则];
  1. 参数解释
    (1)TEMPORARY:创建临时表 ,会话断开自动销毁
    (2)field:列名(字段名)
    (3)datatype:字段数据类型(int、bigint、varchar、date 等)
    (4)comment:字段注释,方便理解字段含义
    (5)engine:存储引擎,常用InnoDB(默认)、MyISAM
    (6)character set:字符集,推荐utf8mb4(支持 emoji)
    (7)collate:排序规则,utf8mb4_0900_ai_ci

示例

  1. 示例 1:创建 users 用户表,指定字符集和排序规则

    复制代码
    create table users (
        id bigint,
        name varchar(20) comment '用户名',
        password char(32) comment '密码是32位的md5值',
        birthday date comment '生日'
    ) CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
  2. 示例 2:创建表,指定存储引擎 MyISAM

    复制代码
    create table t_myisam (
        id bigint,
        name varchar(20) comment '用户名'
    ) engine = MyISAM;

表在磁盘上对应的文件

  • InnoDB 引擎(MySQL8 默认)

    (1)只生成 表名.ibd 文件,保存数据 + 索引

    (2)users 表 → users.ibd

  • MyISAM 引擎
    (1)生成 3 个文件:
    (a)表名.MYD:数据文件
    (b)表名.MYI:索引文件
    (c)表名.sdi:表结构信息文件(JSON 格式)


IF NOT EXISTS 校验语句

  1. 作用:防止表已存在时报错,如果表已经存在,只会产生警告,不会中断 SQL 执行

  2. 写法:

    复制代码
    create table if not exists users (
        id int,
        name varchar(20)
    );

    (1)如果表已存在:执行成功,只提示警告 Table 'users' already exists

    (2)查看警告命令:show warnings;


拓展

  1. 查看表结构(验证表创建成功)

    复制代码
    desc users;

    可以看到字段名、类型、注释

  2. 删除表

    复制代码
    drop table if exists t_myisam;

查看表结构


语法

复制代码
  desc 表名;

示例

复制代码
  desc users;

执行后返回这 6 列信息:


修改表


语法

复制代码
   ALTER TABLE tbl_name [alter_option [, alter_option] ...];
  1. alter_option 可选操作:
    (1)ADD [COLUMN]:添加列
    (2)MODIFY [COLUMN]:修改已有列(类型、长度、约束)
    (3)DROP [COLUMN]:删除列
    (4)RENAME COLUMN:重命名字段名
    (5)RENAME [TO | AS]:重命名数据表
  2. desc 表名; 查看表结构

示例


添加一列 ADD
复制代码
  -- 在 birthday 字段后面新增 assets 字段
  alter table users ADD assets varchar(100) comment '头像地址' after birthday;

(1)after birthday:指定新增字段放在 birthday 后面;first 放在第一列

(2)comment:字段注释


修改列长度 MODIFY
复制代码
  alter table users MODIFY assets varchar(255);

(1)MODIFY:不改字段名,只修改字段的数据类型、长度、是否为空等属性


重命名某列 RENAME COLUMN
复制代码
  alter table users RENAME COLUMN assets TO avatar;

(1)MySQL8.0 支持 RENAME COLUMN,专门修改字段名称,字段类型保留不变


删除字段 DROP
复制代码
  alter table users DROP avatar;

(1)危险操作:删除字段会丢失该列所有数据,生产环境谨慎执行


修改表名
  1. 方式 1:ALTER TABLE ... RENAME TO

    复制代码
    alter table users RENAME TO employee;
  2. 方式 2:RENAME TABLE

    复制代码
    RENAME TABLE users TO employee;

删除表


语法

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

(1)TEMPORARY:只删除临时表

(2)IF EXISTS:可选,推荐加上。如果表不存在,语句不会报错,只会警告

(3)tbl_name:要删除的表名;支持一次性删除多张表,逗号分隔


示例

复制代码
   -- 删除 employee 表
   DROP TABLE employee;

   -- 删除 t_myisam 表
   DROP TABLE t_myisam;

   -- 查看所有表,验证删除
   SHOW TABLES;
  1. 优化写法

    复制代码
    DROP TABLE IF EXISTS employee;
  2. 一次性删除多张表:

    复制代码
    DROP TABLE IF EXISTS employee, t_myisam;

注意事项

  • 高危操作, DROP TABLE
    删除整张表:表结构 + 里面所有数据全部直接清除,无法回滚(没有备份就找不回来)
  • 删除成功后,数据库磁盘上对应的数据文件会被删掉
  • 支持批量删除多个表,表名逗号隔开
  • IF EXISTS 作用:防止表不存在时报错,写脚本的时候非常有用
相关推荐
Q26433650231 小时前
【有源码】基于SpringBoot+Vue的居民健康体检与慢病干预管理系统-面向智慧医疗的体检预约与健康知识服务平台
java·vue.js·spring boot·mysql·毕业设计·javaweb·课程设计
TDengine (老段)1 小时前
工业数据十大痛点系列 · 第 6 篇
数据库·时序数据库·tdengine·涛思数据·idmp·工业数据分析·ai 分析数据
ly76892 小时前
PostgreSQL 流复制与高可用切换:主从延迟、同步提交与 Spring Boot 读写分离的边界
数据库·spring boot·postgresql·读写分离·流复制·高可用切换
l1t2 小时前
修改两处,让SQLite求解数独SQL在datafusion上运行
服务器·数据库·sql
data analyse 4562 小时前
服务端统计时区切换的日期归并
大数据·前端·数据库·人工智能·数据分析
要开心吖ZSH2 小时前
《通过SeaTunnel 把 MySQL 的数据搬进 Doris》番外篇:容量、切分与速度——Doris 能扛多少,比 MySQL 快多少
mysql·性能优化·doris·分区·分表·分桶
远方16093 小时前
108-ORA-00600 [kdsgrp1-qetlbr] 内部错误排查与 RMAN 块级恢复
大数据·linux·数据库·oracle
福娃筱欢3 小时前
SQLServer迁移至KES SQLServer模式 问题整理
数据库·oracle·sqlserver
hflmwl83 小时前
RedisDesktopManager安装包中文版官方下载,redis可视化客户端工具下载
数据库·redis·缓存·可视化客户端工具