关于创建数据表的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37865510/article/details/84666032

比如这条创建表的sql

create table `db_goods` (
  `id` bigint unsigned not null AUTO_INCREMENT comment '主键',
  `goods_id` int(11) unsigned not null comment '商品id',
  `goods_title` varchar(225) not null DEFAULT '' comment '商品名称',
  `goods_price` decimal(10,2) not null comment '商品价格',
  `create_time` timestamp not null DEFAULT CURRENT_TIMESTAMP comment '创建时间',
  `update_time` timestamp not null DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  comment '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品表';

今天大佬突然说让我们把要上线的sql改一下,我一直不明白为啥,首先把主键id变成bigint,并且为无符号的,今天从网上查了一下,发现了中间的不同。

bigint 
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。 
P.S. bigint已经有长度了,在mysql建表中的length,只是用于显示的位数 
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 个字节。 
tinyint 
从 0 到 255 的整型数据。存储大小为 1 字节。 

基本小的类型什么的,如果只有是或者否的类型,那么就可以用tinyint,存储小。

如果数据表不是很常用,那么我们就可以用int,如果是用户表或者日志表,就可以用无符号的bigint

int类型在数据库中占4个字节(byte),即32位

int有符号类型 取值在 - 2147483648 ~ 2147483647之间

int无符号类型 取值在 0 ~ 4294967295之间

这些只是我个人的想法,有问题可以评论,谢谢

猜你喜欢

转载自blog.csdn.net/m0_37865510/article/details/84666032