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

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:通常使用INTBIGINT来存储用户ID。
  • 计数器:如页面访问次数、产品数量等。
  • 评分系统:如电影评分、产品评分等,通常使用TINYINTSMALLINT

遇到的问题及解决方法

问题:插入超出范围的值

原因:尝试向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类型及其变体,可以有效地存储和处理整数数据,同时避免常见的数据类型相关问题。

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

相关·内容

C语言int的取值范围_c语言int表示范围

C语言int的取值范围 我们常常看到int取值范围为-32768~32767,实际上int的取值范围依赖于计算机系统,在16位机器中,int占16位,其中一位为符号位,所以取值范围为前面所说的...而在32位和64位机器中,int占32位,取值范围为-2147483648~2147483647( )。ISO/ANSI C规定,int类型的最小范围为-32768到32767。...其它int类型的情况: short int类型可能占用比int类型更少的存储空间,C保证short类型至少16位长,用于只需小数值的场合以节省空间。...long int 类型(或简写为long类型)可能占用比int类型更多的存储空间,C保证long类型至少32位长,用于使用大数值的场合。...我们可以通过sizeof函数得到以字节为单位的大小(1byte=8bit),加以验证: #include int main() { printf("int size: %

5.2K31
  • 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 约束

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

    4.5K10

    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 列,当部门被删除时,员工的

    64310

    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.4K00

    【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

    46310

    MySQL 约束介绍

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

    3K41

    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.1K10
    领券