真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQL庫表設(shè)計的技巧有哪些

MySQL庫表設(shè)計的技巧有哪些,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

創(chuàng)新互聯(lián)主要為客戶提供服務(wù)項目涵蓋了網(wǎng)頁視覺設(shè)計、VI標(biāo)志設(shè)計、成都營銷網(wǎng)站建設(shè)、網(wǎng)站程序開發(fā)、HTML5響應(yīng)式重慶網(wǎng)站建設(shè)公司、手機(jī)網(wǎng)站開發(fā)、微商城、網(wǎng)站托管及成都網(wǎng)站維護(hù)、WEB系統(tǒng)開發(fā)、域名注冊、國內(nèi)外服務(wù)器租用、視頻、平面設(shè)計、SEO優(yōu)化排名。設(shè)計、前端、后端三個建站步驟的完善服務(wù)體系。一人跟蹤測試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為成都墻體彩繪行業(yè)客戶提供了網(wǎng)站改版服務(wù)。

1.int類型的選用

整型字段類型包含 tinyint、smallint、mediumint、int、bigint 五種,占用空間大小及存儲范圍如下圖所示:

MySQL庫表設(shè)計的技巧有哪些

存儲字節(jié)越小,占用空間越小。所以本著最小化存儲的原則,我們要盡量選擇合適的整型,下面給出幾個常見案例及選擇建議。

  • 根據(jù)存儲范圍選擇合適的類型,比如人的年齡用 unsigned tinyint(范圍 0~255,人的壽命不會超過 255 歲);海龜就必須是smallint,但如果是太陽的年齡,就必須是int。

  • 若存儲的數(shù)據(jù)為非負(fù)數(shù)值,建議使用 UNSIGNED 標(biāo)識,可以擴(kuò)大正數(shù)的存儲范圍。

  • 短數(shù)據(jù)使用 TINYINT 或 SMALLINT,比如:人類年齡,城市代碼。

  • 存儲狀態(tài)變量的字段用 TINYINT ,比如:是否刪除,0代表未刪除 1代表已刪除。

  • 主鍵列,無負(fù)數(shù),建議使用 INT UNSIGNED 或者 BIGINT UNSIGNED;預(yù)估字段數(shù)字取值會超過 42 億,使用 BIGINT 類型。

下面給出建表語句示范:

CREATE TABLE  `tb_int` (
  `increment_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主鍵',
  `stu_age` tinyint unsigned NOT NULL COMMENT '學(xué)生年齡',
  `is_deleted` tinyint unsigned DEFAULT '0' COMMENT '0:未刪除 1:刪除',
  `col1` bigint NOT NULL COMMENT 'bigint字段',
  PRIMARY KEY (`increment_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='int測試表';
2.時間類型的選用

時間字段類型可以選用datetime和timestamp,下面用一張表展示下二者的區(qū)別:

MySQL庫表設(shè)計的技巧有哪些

timestamp翻譯為漢語即”時間戳”,它是當(dāng)前時間到 Unix元年(1970 年 1 月 1 日 0 時 0 分 0 秒)的秒數(shù),占用4個字節(jié),而且是以UTC的格式儲存,它會自動檢索當(dāng)前時區(qū)并進(jìn)行轉(zhuǎn)換。datetime以8個字節(jié)儲存,不會進(jìn)行時區(qū)的檢索。也就是說,對于timestamp來說,如果儲存時的時區(qū)和檢索時的時區(qū)不一樣,那么拿出來的數(shù)據(jù)也不一樣。對于datetime來說,存什么拿到的就是什么。下面給出幾個常見案例及選擇建議。

  • 根據(jù)存儲范圍來選取,比如生產(chǎn)時間,保質(zhì)期等時間建議選取datetime,因為datetime能存儲的范圍更廣。

  • 記錄本行數(shù)據(jù)的插入時間和修改時間建議使用timestamp。

  • 和時區(qū)相關(guān)的時間字段選用timestamp。

  • 如果只是想表示年、日期、時間的還可以使用 year、 date、 time,它們分別占據(jù) 1、3、3 字節(jié),而datetime就是它們的集合。

如果timestamp字段經(jīng)常用于查詢,我們還可以使用MySQL內(nèi)置的函數(shù)FROM_UNIXTIME()、UNIX_TIMESTAMP(),將日期和時間戳數(shù)字來回轉(zhuǎn)換,轉(zhuǎn)換后可以用 INT UNSIGNED 存儲時間,數(shù)字是連續(xù)的,占用空間更小,并且可以使用索引提升查詢性能。下面給出示范建表語句及時間戳相關(guān)轉(zhuǎn)換SQL:

CREATE TABLE `tb_time` (
  `increment_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主鍵',
    `col1` datetime NOT NULL DEFAULT '2020-10-01 00:00:00' COMMENT '到期時間',
    `unix_createtime` int unsigned NOT NULL COMMENT '創(chuàng)建時間戳',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間',
  PRIMARY KEY (`increment_id`),
  KEY `idx_unix_createtime` (`unix_createtime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='time測試表';
# 插入數(shù)據(jù)
insert into tb_time (unix_createtime,create_time) values 
(UNIX_TIMESTAMP(now()),now());
# 時間戳數(shù)字與時間相互轉(zhuǎn)換
select UNIX_TIMESTAMP('2020-05-06 00:00:00')
select FROM_UNIXTIME(1588694400)
3.存儲IP值

IP值一般使用char或varchar進(jìn)行存儲,但是當(dāng)進(jìn)行查找和統(tǒng)計時,字符類型不是很高效。MySQL數(shù)據(jù)庫內(nèi)置了兩個IP相關(guān)的函數(shù)INET_ATON()、INET_NTOA(),可以實現(xiàn) IP 地址和整數(shù)類型的轉(zhuǎn)換。轉(zhuǎn)換后使用可以INT UNSIGNED 來存儲IP,轉(zhuǎn)換后的數(shù)字是連續(xù)的,提高了查詢性能,占用空間更小。

CREATE TABLE `tb_ip` (
  `increment_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主鍵',
  `name` varchar(100) NOT NULL COMMENT '姓名',
    `inet_ip` int(10) unsigned NOT NULL COMMENT 'IP',
  PRIMARY KEY (`increment_id`),
  KEY `idx_inet_ip` (`inet_ip`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='ip測試表';
# 插入數(shù)據(jù)
insert into `tb_ip` (`name`,`inet_ip`) values 
('wang',INET_ATON('192.168.0.1')),('lisi',INET_ATON('192.168.0.2'));
# 相互轉(zhuǎn)換
select INET_ATON('192.168.0.1');
select INET_NTOA(3232235521);

看完上述內(nèi)容,你們掌握MySQL庫表設(shè)計的技巧有哪些的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


標(biāo)題名稱:MySQL庫表設(shè)計的技巧有哪些
文章地址:http://weahome.cn/article/jejshi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部