1. 程式人生 > >關於建立資料表的問題

關於建立資料表的問題

比如這條建立表的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之間

這些只是我個人的想法,有問題可以評論,謝謝