首页
学习
活动
专区
圈层
工具
发布

mysql int范围约束

基础概念

MySQL中的INT是一种整数数据类型,用于存储整数值。INT类型有不同的范围和大小,具体取决于其定义的精度(即位数)。MySQL中的INT类型有以下几种:

  • TINYINT: 1字节,范围是-128到127(无符号是0到255)
  • SMALLINT: 2字节,范围是-32768到32767(无符号是0到65535)
  • MEDIUMINT: 3字节,范围是-8388608到8388607(无符号是0到16777215)
  • INT: 4字节,范围是-2147483648到2147483647(无符号是0到4294967295)
  • BIGINT: 8字节,范围是-9223372036854775808到9223372036854775807(无符号是0到18446744073709551615)

相关优势

  • 存储效率:整数类型占用的空间相对较小,适合存储不需要小数部分的数值。
  • 查询速度:整数类型的比较和计算速度通常比其他数据类型更快。
  • 范围约束:可以通过定义数据类型来限制存储的值的范围,从而保证数据的正确性和一致性。

类型

如上所述,MySQL中的整数类型包括TINYINT, SMALLINT, MEDIUMINT, INT, 和BIGINT。每种类型都有有符号和无符号两种形式。

应用场景

  • 用户ID:通常使用INT或BIGINT来存储用户ID。
  • 计数器:如页面访问次数、产品数量等。
  • 评分系统:如电影评分、产品评分等,通常使用TINYINT或SMALLINT。

遇到的问题及解决方法

问题:插入超出范围的值

原因:尝试向INT类型的列插入超出其定义范围的值。

解决方法:

代码语言:txt
复制
-- 错误示例
INSERT INTO users (id) VALUES (2147483648);

-- 正确示例
INSERT INTO users (id) VALUES (2147483647);

或者使用无符号类型:

代码语言:txt
复制
-- 修改列类型为无符号
ALTER TABLE users MODIFY COLUMN id BIGINT UNSIGNED;

-- 插入值
INSERT INTO users (id) VALUES (2147483648);

问题:数据类型选择不当

原因:选择了不合适的数据类型,导致存储空间浪费或数据溢出。

解决方法:

代码语言:txt
复制
-- 错误示例
CREATE TABLE products (
    id INT,
    price FLOAT
);

-- 正确示例
CREATE TABLE products (
    id INT,
    price DECIMAL(10, 2)
);

参考链接

通过合理选择和使用INT类型及其变体,可以有效地存储和处理整数数据,同时避免常见的数据类型相关问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

mysql的数据类型int、bigint、smallint 和 tinyint取值范围

int 从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。...int 的 SQL-92 同义字为 integer。 smallint 从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。...但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。在 SQL Server 中,int 数据类型是主要的整数数据类型。...在数据类型优先次序表中,bigint 位于 smallmoney 和 int 之间。 只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。...SQL Server 不会自动将其它整数数据类型(tinyint、smallint 和 int)提升为 bigint。

5.2K31
  • mysql中int、bigint、smallint 和 tinyint的区别和存储的范围

    部门中有个字段存储的是十进制数字 , 但是表示的意思是转成二进制后 ,每一个位代表不同功能的开关状态 当超过32个功能开关的时候 , 就需要将int类型转换成bigint类型 , 原因就是int只能存储...4个字节也就是2的32次方的整型值 , 装不下了, 下面就是具体的存的范围 bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807...int 从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。...int 的 SQL-92 同义字为 integer。 smallint 从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。...但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。

    2.3K10

    MySQL约束

    约束 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。...非空约束 (not null 被设置非空约束的字段值不能为空) - 建表时添加非空约束: - create table student( - id int not null, - id_number...唯一约束 (unique 被设置唯一约束的字段值不能重复,但是可以为空) - 建表时添加唯一约束 - create table student( - id int, - id_number...- create table student( - id int primary key, -- 给id添加主键约束 - name varchar(20), - ); 删除主键约束:alter table...,自增长列一般和主键搭配 创建的时候添加:id int primary key auto_increment, 删除自动增长:alter table 表名 modify 字段名 数据类型; 添加自动增长

    2.6K20

    MySQL 约束

    核心目标: 学习如何使用约束来强制执行 MySQL 表中数据的完整性和规则,确保数据的准确性、一致性和可靠性。 什么是约束? 约束是在表的数据列上强制执行的规则。...当插入新行时,如果未指定该列的值,MySQL 会自动为其生成一个比当前最大值大 1 的唯一序列号。...NO ACTION: 同 RESTRICT (标准 SQL 的概念,MySQL 中行为类似)。 SET DEFAULT: 父表记录删除/更新时,将子表中相应的外键列设置为其默认值。...PRIMARY KEY, username VARCHAR(50), registration_date DATE DEFAULT (CURDATE()), -- MySQL 8.0.13+ 支持表达式默认值..., 2), 必须大于 0), dept_id (INT), 并添加一个外键约束 fk_emp_dept,将 dept_id 关联到 departments 表的 dept_id 列,当部门被删除时,员工的

    79810

    MySQL 约束

    域完整性(Domain Integrity):例如:年龄范围0-120,性别范围“男/女”。...2.分类 根据约束数据列的限制, 约束可分为: 单列约束:每个约束只约束一列(字段) 多列约束:每个约束可约束多列数据 根据约束的作用范围,约束可分为: 列级约束:只能作用在一个列上,跟在列的定义后面...检查约束 检查约束允许你定义满足特定条件值的范围或规则,用于检查字段值是否有效。 例如,学生信息表中的年龄字段是没有负数的,并且数值也是有限制的。如果是小学生,年龄不低于 6 岁才可入学。...在 MySQL 中,通常情况下,这个值通常为 def,因为 MySQL 不使用目录的概念。 CONSTRAINT_SCHEMA:这是包含约束的数据库的名称。它指定了约束所属的数据库。...5.删除约束 要删除 MySQL 表中的约束,可以使用 ALTER TABLE 语句并指定要删除的约束类型和名称。

    4.8K10

    composer 包版本的范围指定(版本约束)

    包版本范围指定(自动下载版本约束范围中的最新版) ---- 名称 实例 说明 不指定版本 根据当前Path环境变量中的php版本下载最合适的最新版 确切的版本 6.0.1 指定下载的具体版本号 范围...= > 6.0,范围,自动下载该范围中的最新版 通配符 * 5.*,6.0.* 5.* 代表版本范围 [5, 6.0) 6.0.* 代表版本范围 [6.0, 6.1) 赋值运算符(...最低版本) ~ ~1.2,~6.1.0 ~1.2 代表版本范围 [1.2, 2.0) ~6.1.0 代表版本范围 [6.1.0, 6.2) 脱字号版本(最低版本) ^ ^1.2.3 ^1.2.3 代表版本范围...[1.2.3, 2.0.0) 版本约束使用示例 : 和 = 都可以 版本约束可以加引号,也可以不加 composer文档使用的是 : 并且版本约束加引号(可以说更加规范吧) composer create-project...官网的在线测试版本约束 ---- a. 查看文档 b. 进入版本约束文档 站长源码网 c. 进入在线测试版本约束页面(页面最底部) d. 测试版本约束

    2K10

    初识MySQL · 约束

    在MySQL中就可以通过主键或者是唯一键来约束数据不能重复,等等等等。 说白了,我们学习这里的约束和结合生活中的场景是非常容易理解的,那么话不多说,我们直接进入主题。...对于初学MySQL的同学来说看到10肯定是蒙蔽的,我们从数据的大小,int的大小是4字节,和10也没有关系。...肯定不能,所以我们创建了主键就默认该数据不能为空了,我们可以试试: mysql> create table test_pri( -> id int primary key, -> age...当然不是,所以我们可以用两个,或者三个字段来标识: mysql> create table test_pri_2( -> id int, -> age int, -> primary...mysql> create table test_pri_3( id int, primary key(id,age), address char(20), age int ); 这里也是没有所谓的声明顺序而言的

    1.6K00

    【MySQL】约束类型

    一、数据库约束的本质与价值 数据库约束是嵌入在表结构中的规则集合,用于限制存入表中的数据范围和关系,从而保证数据的完整性(Integrity)。...,应优先为关键业务字段添加 对于可选信息(如用户的昵称、备注)不应设置非空约束 MySQL中,字符串类型的非空列如果未指定默认值,插入时必须显式提供值 2....示例: -- 单字段主键 CREATE TABLE student ( id INT PRIMARY KEY, -- 主键约束 -- id INT NOT NULL UNIQUE 这种写完也是主键约束...CHECK:检查约束 定义:限制列值必须满足指定的条件(如范围、格式等)。 应用场景:需要对列值进行范围或格式限制的场景,如年龄必须为正数、成绩在0-100之间、性别只能是"男"或"女"等。..., '女')), -- 性别只能是男女 ); 数据库兼容性: MySQL 5.7及之前版本:会解析CHECK约束但不生效(忽略检查) MySQL 8.0及以上版本:完全支持CHECK约束 PostgreSQL

    59810

    mysql的约束

    在mysql设计表中,有个概念叫做约束 什么是约束 约束英文:constraint 约束实际上就是表中数据的限制条件 约束种类 mysql的约束大概分为以下几种: 非空约束(not null) 唯一性约束...(unique) 主键约束(primary key) PK 外键约束(foreign key) FK 检查约束(目前MySQL不支持、Oracle支持,本文不做介绍) 为了能继续看下去,打开mysql,...(非空约束,主键约束,唯一性约束);在后面会使用到外键约束 非空约束 非空约束是我们最常见的一种约束方式,它规定了我们插入数据不允许为空(在mysql中,''不是空,null才是),例如以下插入语句:...表级多字段约束 我们可以约束多个表字段,来进行联合约束 create table `unique_test2`(     `id` int(11) auto_increment primary key...表:子表 创建先创建父表 删除先删除子表数据 插入先插入父表数据 外键约束将会让mysql在插入,删除,更新会增加额外的判断,严格来说,不允许使用外键约束,如果需要限制,请在代码层限制

    3.2K10

    MySQL 约束介绍

    用来限制某个字段/某列的值不能重复 同一个表可以有多个唯一约束 唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。...唯一性约束允许列值为空。 在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同。 MySQL会给唯一约束的列上默认创建一个唯一索引。...字段名 字段类型 UNIQUE; 3、主键约束 用来唯一标识表中的一行记录 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值 一个表最多只能有一个主键约束 主键约束对应着表中的一列或者多列...字段名 数据类型; 5、外键约束 限定某个表的某个字段的引用完整性 从表的外键列,必须引用/参考主表的主键或唯一约束的列 在创建外键约束时,如果不给外键约束命名,默认名不是列名,而是自动产生一个外键名...从表”中指定外键约束,并且一个表可以建立多个外键约束 当创建外键约束时,系统默认会在所在的列上建立对应的普通索引,索引名是外键的约束名,删除外键约束后,必须手动删除对应的索引 CREATE TABLE

    3.1K41

    MySQL(条件约束)

    id int not null , name varchar(20)); 2:unique 保证某列的每一行必须有唯一的值,后续再插入数据的时候,都会先进行查询表里是否已经存在这个数据了 应用:create...这里递增是不会重复利用之前的值的 这里插入了100,101后,再想在(4,100)这个区间自增插入id数值就不可以了 注:①unique可以为空,但是主键不能为空 ②如果数据库是由多个mysql...服务器构成的“集群”,此时自增主键就无法生效了 6:foreign key(外键约束) (保证一个表中的数据匹配另一个表中的数据的参照完整性) 所以引入外键约束(被约束的表叫“子表”,约束别人的表...叫“父表”) “父亲约束儿子” create table student (id int , name varchar(20) , classId int , foreign key(classId...) references class(classId)); 注:前面几个约束关键字,都是哪一列需要约束,就在该列的后面加上约束条件,而foreign key是在列定义完成之后,加在最后最后面。

    3.4K10

    史上最全的short、int、long、float、double取值范围

    史上最全的short、int、long、float、double取值范围 一、分析基本数据类型的特点,最大值和最小值。...、String) 2.从复杂度来看,Java 中的数据类型分为基本数据类型和复杂数据类型 int 是前者;Integer 是后者(也就是一个类) 3.初始化的方式不同 int i =1; Integer...i= new Integer(1);//integer 是一个类 int 是基本数据类型(面向过程留下的痕迹,不过是对java的有益补充);Integer 是一个类,是int的扩展,定义了很多的转换方法...Java中int和Integer关系是比较微妙的。...关系如下: int是基本的数据类型; Integer是int的封装类; int和Integer都可以表示某一个数值; int和Integer不能够互用,因为他们两种不同的数据类型; 举例说明

    9.6K10

    MySQL的int (10) 和 int (11) 的区别

    mysql 中整数数据类型 不同类型的取值范围 不同数据类型的默认显示宽度 显示的宽度跟负号没有关系,它只在人工设置了 ZEROFILL 属性有效。...一旦人工设置了 ZEROFILL 属性,MySQL 会自动设置 UNSIGNED 属性(即 ZEROFILL 不能存储负数)。 那取值范围和显示宽度到底有什么关系呢?...如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。 同理,所以 int (10) 和 int (11) 无任何区别,就是显示宽度不同。...Mysql 可以为整数类型指定宽度,例如 INT (11),对大多数应用这是没有意义的:他不会限制值的合法范围,只是规定了 Mysql 的一些交互工具,如 Mysql 命令行客户端,用来显示字符的个数。...对于存储和运算来说, INT (1) 和 INT (8) 是相同的。 是的,设置自动填充的时候用来显示补充0有点 用而已

    2.7K30
    领券