国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL:數(shù)據(jù)類型和表的約束

這篇具有很好參考價值的文章主要介紹了MySQL:數(shù)據(jù)類型和表的約束。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 數(shù)據(jù)類型

學(xué)習(xí)語言的時候首先就是學(xué)習(xí)數(shù)據(jù)類型,數(shù)據(jù)類型起著為變量合理分配空間的作用。數(shù)據(jù)庫同樣需要合理使用空間,其次還可以約束SQL語句的正確性,所以同樣需要數(shù)據(jù)類型。

1.0. 數(shù)據(jù)類型分類

分類 數(shù)據(jù)類型 解釋
數(shù)值類型 BIT (M) 位類型。M指定位數(shù),默認為1,范圍1-64
BOOL 使用1或0表示真或假
整型 TINYINT [UNSIGNED] 相當于C語言中的char類型
SMALLINT [UNDIGNED] 相當于C語言中的short類型
INT [UNSIGNED] 相當于C語言中的int類型
BIGINT [UNSIGNED] 相當于C語言中的long long類型
小數(shù)類型 FLOAT [ (M, D) ] [UNSIGNED] 小數(shù)類型,M指定長度,D指定小數(shù)位數(shù)
DOUBLE [ (M, D) ] [UNSIGNED] 對應(yīng)C的double類型,M長度,D小數(shù)位數(shù)
DECIMAL (M, D) [UNSIGNED] M長度,D小數(shù)位數(shù)
文本、二進制類型 CHAR (SIZE) 定長字符串,最大長度255
VARCHAR (SIZE) 變長字符串,最大長度65536
BLOB 二進制數(shù)據(jù)
TEXT 大文本,不支持全文索引,不支持默認值
時間日期 DATE / DATETIME / TIMESTAMP (yyyy-mm-dd) / (yyyy-mm-dd hh:mm:ss)
String 類型 ENUM 字符串對象
SET 字符串對象

1.1. 數(shù)值類型

MySQL:數(shù)據(jù)類型和表的約束

C語言給變量賦值超過其本身承受的大小,會自行截斷。但SQL中當我們插入了類型大小范圍之外的越界數(shù)據(jù),SQL會直接拒絕。數(shù)據(jù)類型的本質(zhì)就是一種SQL對我們的約束。

tinyint類型

MySQL:數(shù)據(jù)類型和表的約束

  • 在MySQL中,整型可以指定有無符號兩種,默認是有符號的。可在類型之后指明unsigned以示無符號。

盡量不使用unsigned,對于有符號類型存不下不如提升至更大容量的類型。

bit類型
bit[(M)] # 位字段類型。M表示每個值的位數(shù),范圍1-64。如果不帶M默認為1。

MySQL:數(shù)據(jù)類型和表的約束

MySQL5.7默認以ASCII字符顯示,MySQL8.0默認以十六進制顯示。

小數(shù)類型
float[(M, D)] [unsigned] # M指顯示長度,D指小數(shù)位數(shù),總大小4字節(jié)
  • 比如 float(4,2) 表示的范圍是:-99.99~99.99,MySQL在保存時會進行四舍五入。

MySQL:數(shù)據(jù)類型和表的約束

  • float(4,2) usigned 表示的范圍是:0~99.99,并不會將正數(shù)范圍擴大2倍。
decimal(m, d) [unsigned] # M指顯示長度,D指小數(shù)位數(shù)

MySQL:數(shù)據(jù)類型和表的約束

如果希望小數(shù)精度更高,推薦使用decimal。float表示最大精度為7位,decimal最大為30位。

如果D被省略默認為0,M默認為10。但最好不要省略,可能版本不一致會導(dǎo)致問題。

1.2. 字符串類型

char類型
char(L) # 定長字符串 L是可以存儲的字符長度,最大長度為255字符

字符和字節(jié)不一樣,一個字符一定占一個字節(jié),比如Unicode字符。

varchar類型
varchar(L) # 變長字符串,L表示字符長度,最大為65536字節(jié)
  • varchar最大長度是65536字節(jié)不是字符,char最大長度是255字符不是字節(jié)。

  • varchar和char的(L)值的單位一樣,都是字符長度。

  • char 不管存儲的數(shù)據(jù)如何,實際占用始終都是L個字符的大小,varchar 的實際占用和數(shù)據(jù)大小相關(guān)。定長和變長體現(xiàn)在實際存儲大小。

可以理解成char類型就是C語言中的字符數(shù)據(jù)char*,varchar就是C++中的string容器。

  • 如果數(shù)據(jù)長度一樣就用定長char,如果變化就用變長varchar;
  • 定長浪費空間但效率高,變長節(jié)省空間但效率低。
日期和時間類型

常用的日期時間類型有三個:

類型 含義 格式 解釋
date 日期 yyyy-mm-dd 占用三字節(jié)
datetime 日期時間 yyyy-mm-dd HH:ii:ss 表示范圍從1000到9999,占用八字節(jié)
timestamp 時間戳 yyyy-mm-dd HH:ii:ss 只能表示從1970年開始的時間,占用四字節(jié)

MySQL:數(shù)據(jù)類型和表的約束

  • datedatetime的區(qū)別就是格式上的區(qū)別
  • timestamp自動更新當前操作的時間,不需要手動設(shè)置。

設(shè)置日期時的輸入格式比較寬松,最后都會轉(zhuǎn)成標準格式。

1.3. enum和set類型

# 枚舉,單選類型
enum ('選項1', '選項2', '選項3', ...);
  • 插入是必須插入規(guī)定的選項值,不允許其他值。

MySQL:數(shù)據(jù)類型和表的約束

  • 使用enum枚舉類型,實際上在存儲的時候使用 的是從1開始的數(shù)字字符。

MySQL:數(shù)據(jù)類型和表的約束

規(guī)范使用,不推薦使用數(shù)字做插入篩選等操作。

# 集合,多選類型
set  ('選項1', '選項2', '選項3', ...);
  • enum枚舉只能單選,但set集合類型可以多選。同樣,set類型只能插入規(guī)定好的值。

MySQL:數(shù)據(jù)類型和表的約束

如圖所示,set類型由于能夠表示多個選項,數(shù)字和選項不能單純按順序?qū)?yīng)。

請?zhí)砑訄D片描述

set類型存儲時采用的是位圖結(jié)構(gòu)。從低到高每個比特位表示一個選項,比特位為1表示具有該選項,反之則沒有。

MySQL:數(shù)據(jù)類型和表的約束

  • 單純用where xx='xx'查詢會嚴格篩選出只具有該選項的記錄,若想要篩選出包含該選項的記錄可以使用find_in_set。

MySQL:數(shù)據(jù)類型和表的約束

?

數(shù)據(jù)類型本質(zhì)也就是一種約束,所謂約束可以理解為不滿足條件就不允許操作。約束給予了表中的數(shù)據(jù)極大的確定性。

2. 表的約束

沒有規(guī)矩不成方圓,MySQL為了讓數(shù)據(jù)庫表中的數(shù)據(jù)完整性一致性非常強,MySQL會給我們提供強約束。

2.1. 空屬性

兩個值:NULL和NOT NULL。MySQL中的NULL表示不存在、為空,和C語言中的NULL沒有任何關(guān)系。

數(shù)據(jù)庫字段默認一般都為空,但實際中需要盡量保證字段非空。設(shè)置了非空就不能不插入了。

設(shè)置not null方式如下:

MySQL:數(shù)據(jù)類型和表的約束

2.2. 默認值

設(shè)置default可以避免該字段為空,不填自動設(shè)置為默認值。

MySQL:數(shù)據(jù)類型和表的約束

如果一個字段即設(shè)置 not null 又設(shè)置 default,那么 not null 就失去作用了。

2.3. 列描述

列描述:comment 字段,沒有實際意義,用來描述字段,相當于注釋的作用。

MySQL:數(shù)據(jù)類型和表的約束

2.4. zerofill

當我們創(chuàng)建一個int類型的字段時,MySQL會自動為我們添加一個(11)。如果我們沒有設(shè)置zerofill屬性,這個值是無意義的。

如果插入的數(shù)據(jù)低于指定的位數(shù),就在前面補0,如果插入的數(shù)據(jù)超過了指定的位數(shù),就正常顯示,這就是zerofill的作用。只對顯示結(jié)果調(diào)整,不影響存儲結(jié)果。

MySQL:數(shù)據(jù)類型和表的約束

2.5. 主鍵

數(shù)據(jù)庫存儲數(shù)據(jù)不是唯一的目的,還要考慮到提取數(shù)據(jù)。一般,要求數(shù)據(jù)庫表中的記錄有一個特定的唯一標識,來表示唯一性。

這個唯一的特定標識就是主鍵,類似于序號學(xué)號這樣的唯一標識,可以根據(jù)主鍵來唯一地篩選出一條記錄。

  • 創(chuàng)建表并指定主鍵字段,主鍵字段不可重復(fù)。

MySQL:數(shù)據(jù)類型和表的約束

  • 為已存在字段刪除主鍵約束
alter table `tb_name` drop primary key; # 刪除主鍵

只是為字段去掉主鍵約束,并不是刪除整列。

  • 為已存在字段追加主鍵
alter table `tb_name` add primary key(`field`); # 追加主鍵

如果字段有重復(fù)值,會追加失敗。

復(fù)合主鍵
create table `tb_name` (
	`field` datatype,
    primary key (`field`) # 設(shè)置復(fù)合主鍵
); 

如果想讓多個字段合起來作為主鍵,就可以使用復(fù)合主鍵。也就是讓多個字段聯(lián)合在一起作為唯一標識,單個重復(fù)是無所謂的,只要不是多個字段一起沖突就行。

MySQL:數(shù)據(jù)類型和表的約束

2.6. 自增長

auto_increment設(shè)置的字段,可以不給值,會自動被系統(tǒng)從當前最大值加1設(shè)置到記錄。一般自增長的字段都是作為主鍵。

MySQL:數(shù)據(jù)類型和表的約束

  • 自增長字段不用設(shè)置初始值,默認從1開始遞增。
  • 自增長字段也可以插入數(shù)據(jù),只要不與已有數(shù)據(jù)重復(fù)即可。之后新增數(shù)據(jù)會從最大值開始遞增。
  • 被自增長的字段必須作為主鍵或者其他具有唯一性的鍵使用。

2.7. 唯一鍵

一張表中往往存在多個字段需要唯一,但主鍵只有一個,只能用唯一鍵解決這個問題。

MySQL:數(shù)據(jù)類型和表的約束

  • 唯一鍵和主鍵性質(zhì)差不多,但唯一鍵允許為空,NULL表示沒有不參與任何運算。如果將唯一鍵設(shè)置為不能為空則自動轉(zhuǎn)換成主鍵。
  • 主鍵是用來保證整個表的記錄的唯一性的,唯一鍵用來保證所設(shè)置的字段在業(yè)務(wù)上的唯一性。主鍵只能有一個,唯一鍵能設(shè)置多個。

可以說,主鍵和唯一鍵并不沖突,他們不是用來對比的,只是負責數(shù)據(jù)在不同層面的唯一性。

2.8. 外鍵

外鍵用來將主表和從表之間建立關(guān)系,讓從表和主表產(chǎn)生關(guān)聯(lián)的字段就叫做外鍵。外鍵定義在從表上,一般外鍵就對應(yīng)著主表的主鍵。

create table `tb_name` (
    # ... ,
	foregin key (`field`) reference `tb_master`(`field`)
)

MySQL:數(shù)據(jù)類型和表的約束

通過外鍵產(chǎn)生關(guān)系的表,除了在邏輯上有關(guān)聯(lián),MySQL也會維護該邏輯對用戶操作產(chǎn)生約束。

比如班級表中得先有id為30的班級,才能在學(xué)生表中添加class_id為30的學(xué)生。

要刪除班級表中id為20的班級,首先必須保證學(xué)生表中沒有對應(yīng)班級的學(xué)生。

對于數(shù)據(jù)庫用戶來說,外鍵是為了方便業(yè)務(wù)關(guān)聯(lián),對于MySQL來說,外鍵是為了產(chǎn)生對應(yīng)的外鍵約束,保證數(shù)據(jù)的安全。

MySQL:數(shù)據(jù)類型和表的約束文章來源地址http://www.zghlxwxcb.cn/news/detail-450657.html

到了這里,關(guān)于MySQL:數(shù)據(jù)類型和表的約束的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • MySQL數(shù)據(jù)庫和表的基本操作

    MySQL數(shù)據(jù)庫和表的基本操作

    MySQL是一個客戶端服務(wù)器結(jié)構(gòu)的程序 主動發(fā)送數(shù)據(jù)的這一方,客戶端(client) 被動接受數(shù)據(jù)的這一方,服務(wù)器(server) 客戶端給服務(wù)器發(fā)送的數(shù)據(jù)叫做: 請求(request) 服務(wù)器給客戶端發(fā)送的數(shù)據(jù)叫做: 響應(yīng)(response) 客戶端和服務(wù)器之間是通過網(wǎng)絡(luò)進行通信的 服務(wù)器是存儲數(shù)據(jù)的主體

    2024年01月19日
    瀏覽(37)
  • MySQL——修改數(shù)據(jù)庫和表的字符編碼

    修改編碼: ( 1) 先停止服務(wù) ( 2 )修改 my.ini 文件 ( 3 )重新啟動服務(wù)說明: 如果是在修改 my.ini 之前建的庫和表,那么庫和表的編碼還是原來的 Latin1 ,要么刪了重建,要么使用 alter 語句修改編碼。 mysql create database 0728 db charset Latin1; Query OK, 1 row affected ( 0.00 sec) mysql use

    2024年02月09日
    瀏覽(24)
  • 在MySQL中查看數(shù)據(jù)庫和表的數(shù)據(jù)大小

    在MySQL中查看數(shù)據(jù)庫和表的數(shù)據(jù)大小

    在管理和維護MySQL數(shù)據(jù)庫時,了解數(shù)據(jù)庫和表的數(shù)據(jù)大小是非常重要的。這可以幫助您監(jiān)控數(shù)據(jù)庫的增長、優(yōu)化性能以及規(guī)劃存儲需求。本博客將介紹如何使用SQL查詢來查看MySQL數(shù)據(jù)庫和表的數(shù)據(jù)大小。 首先,我們將學(xué)習(xí)如何查看整個MySQL數(shù)據(jù)庫的總數(shù)據(jù)大小,包括所有數(shù)據(jù)庫

    2024年02月09日
    瀏覽(41)
  • 頭歌 MySQL數(shù)據(jù)庫 - 數(shù)據(jù)庫和表的基本操作(一)答案

    頭歌 MySQL數(shù)據(jù)庫 - 數(shù)據(jù)庫和表的基本操作(一)答案

    第1關(guān):查看表結(jié)構(gòu)與修改表名 編程要求 根據(jù)提示,在右側(cè)編輯器補充代碼: 把數(shù)據(jù)表 tb_emp 改名為 jd_emp ; 查看該數(shù)據(jù)庫下數(shù)據(jù)表的列表; 查看數(shù)據(jù)表 jd_emp 的 基本結(jié)構(gòu) 。 第2關(guān):修改字段名與字段數(shù)據(jù)類型 編程要求 根據(jù)提示,在右側(cè)編輯器補充代碼: 把數(shù)據(jù)表 tb_emp 的字

    2024年02月01日
    瀏覽(166)
  • 【MySQL】庫和表的操作

    【MySQL】庫和表的操作

    目錄 一、庫的操作 1.1創(chuàng)建數(shù)據(jù)庫 1.2創(chuàng)建數(shù)據(jù)庫案例 1.3字符集和校驗規(guī)則 (1)查看系統(tǒng)默認字符集以及校驗規(guī)則 (2)查看數(shù)據(jù)庫支持的字符集? (3)查看數(shù)據(jù)庫支持的字符集校驗規(guī)則 (4)校驗規(guī)則對數(shù)據(jù)庫的影響 1.4操縱數(shù)據(jù)庫 (1)查看數(shù)據(jù)庫 (2)顯示創(chuàng)建語句 (3)

    2024年02月15日
    瀏覽(21)
  • [ MySQL ] — 庫和表的操作

    [ MySQL ] — 庫和表的操作

    目錄 庫的操作 創(chuàng)建數(shù)據(jù)庫 語法: 使用: 字符集和校驗規(guī)則 查看系統(tǒng)默認字符集以及校驗規(guī)則 ?查看數(shù)據(jù)庫支持的字符集 ?查看數(shù)據(jù)庫支持的字符集校驗規(guī)則 校驗規(guī)則對數(shù)據(jù)庫的影響 操縱數(shù)據(jù)庫? 查看數(shù)據(jù)庫 顯示創(chuàng)建語句 修改數(shù)據(jù)庫 刪除數(shù)據(jù)庫 ?備份 ?恢復(fù) 查看連接情

    2024年02月14日
    瀏覽(21)
  • 【MySQL】庫和表的增刪查改

    【MySQL】庫和表的增刪查改

    需要云服務(wù)器等云產(chǎn)品來學(xué)習(xí)Linux的同學(xué)可以移步/--騰訊云--/--阿里云--/--華為云--/官網(wǎng),輕量型云服務(wù)器低至112元/年,新用戶首次下單享超低折扣。 ? 目錄 一、庫的操作 1、創(chuàng)建數(shù)據(jù)庫 2、數(shù)據(jù)庫所使用的編碼 2.1查詢編碼集和校驗集 2.2查看數(shù)據(jù)庫的字符集和校驗集 2.3創(chuàng)建數(shù)

    2024年02月08日
    瀏覽(28)
  • {MySQL} 數(shù)據(jù)庫約束& 表的關(guān)系& 新增&&刪除& 修改& 查詢

    {MySQL} 數(shù)據(jù)庫約束& 表的關(guān)系& 新增&&刪除& 修改& 查詢

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 提示:這里可以添加本文要記錄的大概內(nèi)容: 承接上文,繼續(xù)講一下MySQL 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 NOT NULL - 指示某列不能存儲 NULL 值。 UNIQUE - 保證某列的每行必須有唯一的值

    2024年02月03日
    瀏覽(90)
  • MySQL數(shù)據(jù)類型和約束

    MySQL支持許多的數(shù)據(jù)類型,包括數(shù)值、字符串、日期和時間等類型。數(shù)據(jù)類型的選擇既需要考慮數(shù)據(jù)的實際情況,也需要考慮存儲空間的大小以及計算效率等因素。 數(shù)值類型主要分為整數(shù)類型和小數(shù)類型。MySQL支持的整數(shù)類型包括TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT等類型;而

    2024年02月01日
    瀏覽(21)
  • 3. MySQL - 數(shù)據(jù)類型 & 選項約束

    3. MySQL - 數(shù)據(jù)類型 & 選項約束

    目錄 回顧 1. 命令行下的 MySql 客戶端 2. 圖形化界面的 MySQL-Client 3. 數(shù)據(jù)庫概述 3.1 數(shù)據(jù)庫管理系統(tǒng)是什么 3.2?工作模式 3.3 RDBMS 管理數(shù)據(jù)的結(jié)構(gòu) 3.4 客戶端連接服務(wù)器的信息 4. MySQL 中的數(shù)據(jù)類型 4.1?整型類型 4.2 字符串 4.3 日期/時間 5. MySQL 每個字段的選項約束 6. 練習(xí):將我們

    2024年02月15日
    瀏覽(80)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包