Mysql 常見數據類型及約束

来源:https://www.cnblogs.com/chenjieyouge/archive/2019/10/05/11626008.html
-Advertisement-
Play Games

Mysql 常見數據類型及約束 最近在跟幾個不太懂技術的同事(哈哈, 其實我也不懂), 要整一個資料庫項目, 然後前端, 後端, 都沒有像樣的, 數據輸出還不是由我們控制.... 這可難受了, 然後總數被圍繞著, 怎麼導入數據, 導出EXCEL .... 之類的, 或者是說導入數據不方便, 怎麼欄位 ...


Mysql 常見數據類型及約束

最近在跟幾個不太懂技術的同事(哈哈, 其實我也不懂), 要整一個資料庫項目, 然後前端, 後端, 都沒有像樣的, 數據輸出還不是由我們控制....

這可難受了, 然後總數被圍繞著, 怎麼導入數據, 導出EXCEL .... 之類的, 或者是說導入數據不方便, 怎麼欄位還要有類型.... 每至於此, 我其實內心是崩潰的, 但非常理解. 不理解, 還能怎麼辦呢.(當然, 開個玩笑)

這裡引出一個問題, 為啥要舌設置類型以及約束? 因為數據類型影響著數據存儲的資源占用空間和保證數據的完整性. 經常讓我頭疼的是, 拿到一些都是公式嵌套的Excel表, 一打開, 該進程直接涼涼, 或者是表沒有唯一標識, 或是欄位總在變化, 這可讓我難受壞了, so, 規則的約定是非常重要的呀, 於是找了一些常用的, 做一個簡單記錄.

小結: 數據類型是為了"節約記憶體,提高計算", 數據約束是為了, 完整性(存儲關係).

數據類型

常用數據類型

  • 整數: tinyint, smallint(2, 無符號, 0-32367), mediumint (3, 8388607), int...
  • 小數: decimal, float, double..
  • 字元串: char, varchar, text...
  • 時間日期: date, time, datetime
  • 枚舉型: enum
  • decimal 表示浮點數, 如decimal(5,2)表示一個有5位數, 小數占2位
  • char 表示固定長度的字元串, 如char(5), 如果值是"yg", 則會自動補齊空格
  • varchar表可變長度字元串, 如, varchar(5), 值為"yg",則存儲的仍是'yg'
  • text 表示存大文本, 一種說法是說, 字元大於4000時才會用

常見數據約束

  • Primary key: 物理上的存儲順序, 主鍵, 一個表設置id欄位, 類型為 int unsigned.

  • Not null: 該欄位不允許空值.
  • Unique: 該欄位不允許值重覆.
  • Default: 給該欄位給定一個預設值.
  • Foreign key: 表之間的"溝通"欄位, 在insert 和delete是都要先在關聯表中查詢.

雖然外鍵約束可以保證數據的有效性, 做開發時也非常方便, 但在增刪查改時, 會降低資料庫性能, 不能隨意增刪數據(好比excel的數據嵌套了其它表), 操作上的確有些難受.

附-數據類型(常用)

整數類型

類型 位元組 Signed Unsigned
tinyint 1 -128 ~ 127 0 ~ 255
smallint 2 -32768 ~ 32767 0 ~ 65535
mediumint 3 -838 8608 ~ 838 8608 0 ~ 1677 7215
int 4 -21 4748 3648 ~ 21億 0 ~ 42億
bigint 8 很大 0 ~ 真的大

字元串

類型 位元組
char 0 ~ 65535
varchar 0 ~ 65535
text 0 ~ 很大

效率來說基本是char>varchar>text,但是如果使用的是Innodb引擎的話,推薦使用varchar代替char。

char和varchar可以有預設值,text不能指定預設值。

資料庫選擇合適的數據類型存儲還是很有必要的,對性能有一定影響. 對於int類型的,如果不需要存取負值,最好加上unsigned;對於經常出現在where語句中的欄位,考慮加索引,整形的尤其適合加索引。

日期時間類型

類型 位元組 演示
date 4 "2020-01-01"
time 3 "12:56:49"
datetime 8 "2020-01-01 12:12:12"
year 1 '2020'
timestamp 4 2019-10-05 22:21:23

小結

  • 數據類型是為了"節約記憶體,提高計算", 數據約束是為了, 完整性(存儲關係).

  • Mysql常用的數據類型: bit, int; decimal, float; char, varchar; date, time, date time; enum...
  • 儘量使用占位空間小的類型, 同時為提高查詢效率, 可建立合適的索引.

  • Mysql常見欄位約束: Primary key; Not null; Unique; Default; Foreign key.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 舊電腦,原來使用的是win xp。隨著win及其支持的軟體的“成長”,電腦運行越來越慢了。一個操作需要很長的時間等待,終於,失去了耐心,換了新的電腦。 舊電腦棄置多年,留之無用,棄之可惜。偶發奇想,換Linux試一試。 經過幾天的百度,決定選用StartOS試一試。 一、下載StartOS 百度St ...
  • 此處接前文,分析free_area_init_nodes()函數最後部分,分析其末尾的迴圈: 這裡面的關鍵函數是free_area_init_node(),其入參find_min_pfn_for_node()用於獲取node節點中最低的記憶體頁框號。 而free_area_init_node()其實現 ...
  • 前面構建記憶體管理框架,已經將記憶體管理node節點設置完畢,接下來將是管理區和頁面管理的構建。此處代碼實現主要在於setup_arch()下的一處鉤子:x86_init.paging.pagetable_init()。據前面分析可知x86_init結構體內該鉤子實際上掛接的是native_pageta ...
  • 有句老話說得好,是金子總會發光的。最近恩智浦在國外的產品發佈會上著重介紹了i.MXRT1170,“單片機首次邁入1GHz主頻大關”,這句宣傳語徹底引爆微控制器界,i.MXRT1170終於火了,痞子衡也理解了6月份媒體交流會上Geoff沒有重點介紹RT1170的原因,不想讓RT1170鋒芒畢露,導致7... ...
  • tar -xvvf sublime_text_3_build_3207_x64.tar.bz2 解壓; 再使用 mv sublime_text_3 /opt/ 命令把sublime_text_3文件夾移動到/opt文件夾下; 找到移動後的sublime_text_3文件夾,進入終端, vim /op ...
  • 解決方法:請進入MySQL的bin目錄,併在bin目錄打開命令行視窗,在命令行視窗輸入:mysqld --install,回車,提示:Service successfully installed。表示安裝MySQL服務成功,命令行視窗輸入:net start mysql ,可以正常啟動 ...
  • MySQL的數據存儲目錄為data,data目錄通常在C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data位置。在data下的每個目錄都代表一個資料庫。 安裝文件所在路徑,不要包含中文和空格 ...
  • 本篇文章將通過一條 SQL 的執行過程來介紹 MySQL 的基礎架構。 首先有一個 user_info 表,表裡有一個 id 欄位,執行下麵這條查詢語句: 返回結果為: 下麵給出 MySQL 的基本架構示意圖,可以看出 SQL 語句在 MySQL 的各個模塊中的執行過程。 MySQL 基本架構 大體 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...