MySQL数据库之数据类型与表约束

 更新时间:2026年07月06日 15:23:05   作者:澪贰  
在MySQL数据库中,数据类型和表约束是非常重要的概念,它们帮助确保数据的完整性、准确性和安全性,下面我将分别介绍MySQL中的数据类型和表约束,感兴趣的朋友一起看看吧

MySQL 设计表结构时,数据类型选得对、约束用得好,表结构就稳了一半。这篇文章把「数据类型」和「表约束」两大核心知识点讲透

1.MySQL 数据类型

MySQL 数据类型主要分四大类:数值类型、字符串类型、日期时间类型、枚举/集合类型

1.1 数值类型

最常用: TINYINTINTBIGINTFLOATDECIMAL

整数类型

  • TINYINT1字节,-128~127;无符号 0~255
  • INT4字节,常用作主键 ID
  • BIGINT8字节,超大数字用
-- 无符号 tinyint(0~255)
create table tt2(num tinyint unsigned);

小数类型

  • FLOAT:单精度,4字节,精度一般
  • DECIMAL(M,D):高精度定点数,钱/金额必须用它
-- 高精度小数,推荐用 decimal
create table tt8(
    salary float(10,8), 
    salary2 decimal(10,8)
);

BIT 类型

  • 0/1 最省空间
  • 显示时按 ASCII 码展示
create table tt5(gender bit(1)); -- 只能存 0 或 1

1.2 字符串类型

CHAR(size)

  • 固定长度,最大 255 字符
  • 速度快,空间浪费
  • 适合:身份证、手机号、MD5
name char(32); -- 永远占 32 字符空间

VARCHAR(size)

  • 可变长度,用多少占多少
  • 最大 65535 字节
  • UTF8 下最大 21844 字符
name varchar(60); -- 变长,节省空间

CHAR vs VARCHAR 怎么选?

  • 长度固定 → CHAR
  • 长度不固定 → VARCHAR
  • 定长浪费空间、效率高;变长省空间、效率稍低

1.3 日期时间类型

  • DATEyyyy-mm-dd
  • DATETIMEyyyy-mm-dd hh:mm:ss
  • TIMESTAMP:时间戳,更新行时自动刷新
create table birthday (
    t1 date, 
    t2 datetime, 
    t3 timestamp
);

1.4 ENUM 与 SET(单选/多选)

  • ENUM:单选(男/女)
  • SET:多选(游泳、篮球、登山)
create table votes(
    username varchar(30),
    hobby set('登山','游泳','篮球'),
    gender enum('男','女')
);

查询 SET 必须用 find_in_set

select * from votes where find_in_set('登山', hobby);

2.MySQL 表约束

约束 = 保证数据合法、不乱、不重复、不空。

2.1 NOT NULL 非空

字段不允许为 NULL业务字段强烈建议加

create table myclass(
    class_name varchar(20) not null,
    class_room varchar(10) not null
);

2.2 DEFAULT 默认值

插入时不填则自动用默认值。

age tinyint unsigned default 0,
sex char(2) default '男'

2.3 COMMENT 字段注释

必加!方便维护,通过 show create table 表名\G 可以看到该字段。

name varchar(20) not null comment '用户姓名';

2.4 ZEROFILL 补零

数字不足长度时前面补 0。

id int(5) unsigned zerofill;
-- 1 → 00001

2.5 PRIMARY KEY 主键

  • 唯一 + 非空
  • 一张表只能一个主键
id int unsigned primary key auto_increment

复合主键

create table tt14(
id int unsigned,
course char(10) comment '课程代码',
score tinyint unsigned default 60 comment '成绩',
primary key(id, course) -- id和course为复合主键
);

如果有多个字段作为主键,可以使用复合主键,多个字段组合起来必须唯一

当表创建好以后但是没有主键的时候,可以再次追加主键

alter table 表名 add primary key(字段列表)

删除主键

alter table 表名 drop primary key;

2.6 AUTO_INCREMENT 自增长

配合主键使用,自动 +1,自增长字段必须是整数,一张表最多只能有一个自增长。

id int primary key auto_increment

2.7 UNIQUE 唯一键

值不能重复,但允许 NULL

email varchar(64) unique

2.8 FOREIGN KEY 外键

保证关联表数据合法性,防止无效关联。外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或 unique 约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为 null

foreign key (class_id) references myclass(id)

建立外键的本质其实就是把相关性交给 mysql 去审核了,提前告诉 mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql 不允许你插入

到此这篇关于MySQL数据库之数据类型与表约束的文章就介绍到这了,更多相关mysql数据类型与表约束内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL MGR搭建过程中常遇见的问题及解决办法

    MySQL MGR搭建过程中常遇见的问题及解决办法

    这篇文章主要介绍了MySQL MGR搭建过程中常遇见的问题及解决办法,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-03-03
  • MySQL数据库社招必考题:索引如何优化WHERE子句?

    MySQL数据库社招必考题:索引如何优化WHERE子句?

    本文系统分享WHERE子句优化方法,从定位低效SQL、分析原因到逐步改进,涵盖索引、写法调整及数据访问优化,通过实战案例说明常见错误及解决策略,强调优化需逻辑而非仅建索引,助力面试准备
    2025-09-09
  • MySQL 压测实战之sysbench 从入门到精通(最新)

    MySQL 压测实战之sysbench 从入门到精通(最新)

    本文详细介绍了如何使用sysbench对MySQL进行压测,包括安装、常用压测场景、参数配置和结果解读,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • 详解如何对MySQL数据库进行授权管理

    详解如何对MySQL数据库进行授权管理

    MySQL数据授权是指数据库管理员通过设置权限,控制用户对数据库中的数据的访问和操作能力,在MySQL中,每个用户账户都有特定的权限,本文给大家介绍了如何对MySQL数据库进行授权管理,需要的朋友可以参考下
    2024-11-11
  • MySQL数据,查询QPS,TPS数据方式

    MySQL数据,查询QPS,TPS数据方式

    文章详细介绍了查询MySQL数据库QPS和TPS的方法和工具,包括直接通过命令行、PerformanceSchema、mysqladmin、Prometheus、自动化脚本等,同时,还提供了优化建议,如索引优化、SQL调优、事务控制和配置调优
    2025-02-02
  • MySQL导入sql脚本错误:2006 解决方法

    MySQL导入sql脚本错误:2006 解决方法

    本文给大家分享的是在使用mysql导入数据的时候,提示脚本错误2006 MySQL server has gone away的解决方法,非常实用,有需要的小伙伴,可以参考下。
    2015-07-07
  • Mysql根据一个表的数据更新另一个表数据的SQL写法(三种写法)

    Mysql根据一个表的数据更新另一个表数据的SQL写法(三种写法)

    这篇文章主要介绍了Mysql根据一个表的数据更新另一个表数据的SQL写法,本文给大家分享三种解决方法,需要的朋友可以参考下
    2023-06-06
  • MySQL中的系统库(sys系统库、information_schema)调优方法

    MySQL中的系统库(sys系统库、information_schema)调优方法

    MySQL性能调优涉及数据库设计、查询优化、配置及硬件调整,MySQL性能调优是一个复杂且多维度的过程,下面从数据库设计、查询优化、配置参数调整、硬件优化几个方面为你介绍相关的调优方法,感兴趣的朋友跟随小编一起看看吧
    2025-08-08
  • MySQL数据库通过Binlog恢复数据的详细步骤

    MySQL数据库通过Binlog恢复数据的详细步骤

    MySQL的binlog日志是MySQL日志中非常重要的一种日志,记录了数据库所有的DML操作,下面这篇文章主要给大家介绍了关于MySQL数据库通过Binlog恢复数据的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • MySQL曝中间人攻击Riddle漏洞可致用户名密码泄露的处理方法

    MySQL曝中间人攻击Riddle漏洞可致用户名密码泄露的处理方法

    Riddle漏洞存在于DBMS Oracle MySQL中,攻击者可以利用漏洞和中间人身份窃取用户名和密码。下面小编给大家带来了MySQL曝中间人攻击Riddle漏洞可致用户名密码泄露的处理方法,需要的朋友参考下吧
    2018-01-01

最新评论