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

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

mysql怎么添加無(wú)符號(hào) mysql字段設(shè)置無(wú)符號(hào)

在mysql中要將id設(shè)置成自增并且要在前面自動(dòng)補(bǔ)0,應(yīng)該要怎么實(shí)現(xiàn)????

隨著 MySQL 8.0.16 的發(fā)布,我們?yōu)?MGR 添加了一些功能,以增強(qiáng)其高可用性。其中一個(gè)功能是能夠在某些情況下啟用已離開(kāi)組的成員自動(dòng)重新加入,而無(wú)需用戶(hù)干預(yù)。

在廬江等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供成都網(wǎng)站建設(shè)、做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,成都營(yíng)銷(xiāo)網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站制作,廬江網(wǎng)站建設(shè)費(fèi)用合理。

為了理解這個(gè)功能的好處以及如何使用它,我們將快速查看它背后的概念以及它首先存在的動(dòng)機(jī)。

介紹

MGR 允許 MySQL 用戶(hù)輕松管理高可用組,并完成保證系統(tǒng)高可用所需的所有特征,例如容錯(cuò)或故障檢測(cè)。

MGR 中提供的基本保證之一是該組呈現(xiàn)給用戶(hù)的是一個(gè)不可分割的整體,這意味著一旦成員加入或離開(kāi)該組,該更改將立即被其他成員得知。默認(rèn)情況下,組內(nèi)的數(shù)據(jù)本身最終是一致的,盡管可以被修改。為了實(shí)現(xiàn)這種保證,MGR 使用組成員服務(wù),以及通過(guò)一致性算法檢測(cè)有沖突的事務(wù)并中止它們。MGR 的這一方面超出了本文的范圍,與成員自動(dòng)重新加入功能并不完全相關(guān),本文不作贅述。

組內(nèi)新成員必須符合一些條件。其中新成員需要在事務(wù)方面趕上組進(jìn)度(是通過(guò)選擇組內(nèi)一個(gè)成員來(lái)將已處理的事務(wù)流式傳輸給他,在 MGR 中稱(chēng)為“捐贈(zèng)”)。最后,只要在此“分布式恢復(fù)”過(guò)程中沒(méi)有遇到任何錯(cuò)誤,組內(nèi)新成員將被聲明為 ONLINE 狀態(tài)。

MGR 依靠組通信層 (GCS) 來(lái)管理組。該層實(shí)現(xiàn)了用于解決沖突事務(wù)的一致性算法,并強(qiáng)制執(zhí)行一些通信特性。對(duì)于實(shí)現(xiàn)前面提到的組的不可分割視圖,這些特性至關(guān)重要,如消息的總順序、安全傳遞或視圖同步等。

GCS 需要能夠檢測(cè)組中哪些成員失效或看起來(lái)失效。一旦這些成員被檢測(cè)為失效,就將其從該組中移除,以便保持該組正常使用。為此 GCS 在每個(gè)成員中引入了一個(gè)故障檢測(cè)器,用于分析組內(nèi)交換的消息。如果它在一段時(shí)間內(nèi)沒(méi)有收到來(lái)自指定成員的消息,則故障檢測(cè)器將對(duì)該成員產(chǎn)生“懷疑”,并認(rèn)為該成員可能已經(jīng)失效。成員從“懷疑”到真正失效的等待時(shí)間是可以配置的。

重新加入成員存在的問(wèn)題

我們已經(jīng)了解 MGR 必須為了高可用提供的策略,以及它如何實(shí)現(xiàn),接下來(lái)請(qǐng)看示例:

一個(gè)小組由三個(gè)成員組成,其中一個(gè)成員偶爾會(huì)遇到丟失數(shù)據(jù)包、斷連或者其它導(dǎo)致無(wú)法解決的錯(cuò)誤情況的影響組內(nèi)通信。還要考慮這些錯(cuò)誤持續(xù)時(shí)間超過(guò)?group_replication_member_expel_timeout的值。

其中一個(gè)組員發(fā)生故障,小組的其他成員將決定踢出該成員。問(wèn)題是,一旦該成員重新入組,他將被組驅(qū)逐加入失敗,需要通過(guò)手動(dòng)干預(yù)。

如果該成員的驅(qū)逐超時(shí)屬性設(shè)置不為 0,則它將在被驅(qū)逐前等待滿(mǎn)足該時(shí)間量(將超時(shí)設(shè)置為 0 意味著他將永遠(yuǎn)等待)。超時(shí)后成員將被驅(qū)逐并重新建立連接,并且無(wú)法重新加入舊組,需要再次手動(dòng)干預(yù)。

于此,當(dāng)存在網(wǎng)絡(luò)故障時(shí),顯然需要手動(dòng)干預(yù)。

在 MySQL 8.0.16 中,我們引入了自動(dòng)重新加入組的功能,一旦成員被驅(qū)逐出組,它就會(huì)自動(dòng)嘗試重新加入該組,直到達(dá)到預(yù)設(shè)的次數(shù)為止。有時(shí)每次重試之間至少等待5分鐘。

如何啟動(dòng)自動(dòng)重新加入?

可以通過(guò)將group_replication_autorejoin_tries設(shè)置為所需的重試次數(shù)來(lái)開(kāi)啟并使用自動(dòng)重新加入功能。

SET GLOBAL group_replication_autorejoin_tries = 3

默認(rèn)值為 0,表示服務(wù)器禁用自動(dòng)重新加入。

如何驗(yàn)證自動(dòng)重新加入?

與 MySQL 中的許多功能一樣,自動(dòng)重新加入過(guò)程是可以監(jiān)測(cè)的。自動(dòng)重新加入的可檢測(cè)性依賴(lài)于性能模式基礎(chǔ)架構(gòu),階段式收集有關(guān)數(shù)據(jù)。

他們獲取以下信息:

事件發(fā)生的線(xiàn)程ID(THREAD_ID)

活動(dòng)名稱(chēng)(EVENT_NAME)

起止時(shí)間戳以及事件的總持續(xù)時(shí)間(TIMER_START,TIMER_END 和 TIMER_WAIT)

在事件停止之前完成的工作單位和預(yù)估工作單位(WORK_COMPLETED,WORK_ESTIMATED)

因此,當(dāng)自動(dòng)重新加入過(guò)程開(kāi)始時(shí),它將在performance schema中注冊(cè)一個(gè)名為“stage / grouprpl / Undergoing auto-rejoinprocedure”的事件。使用表performance_schema.events_stage_current,??performance_schema.events_stages_summary_global_by_event_name和performance_schema.events_stages_history_long我們可以觀(guān)察到以下內(nèi)容:

是否正在進(jìn)行自動(dòng)重新加入程序

到目前為止,已經(jīng)減少重試的次數(shù)

直到下一次重試的估計(jì)剩余時(shí)間

自動(dòng)重新加入過(guò)程狀態(tài)

可以通過(guò)過(guò)濾包含“auto-rejoin”字符串的活動(dòng)事件來(lái)查找自動(dòng)重新加入過(guò)程狀態(tài)(即,是否正在進(jìn)行):

SELECT COUNT(*) FROM performance_schema.events_stages_current

WHERE EVENT_NAME LIKE '%auto-rejoin%';

COUNT(*)

1

查詢(xún)結(jié)果存在,證明服務(wù)器上運(yùn)行了自動(dòng)重新加入過(guò)程。

到目前為止的重試次數(shù)

如果正在進(jìn)行自動(dòng)重新加入程序,我們可以通過(guò)選擇階段事件上的工作單元數(shù)來(lái)檢查到目前為止嘗試的重試次數(shù):

SELECT WORK_COMPLETED FROM performance_schema.events_stages_current WHERE

EVENT_NAME LIKE '%auto-rejoin%';

WORK_COMPLETED

1

在這個(gè)例子中,到目前為止只有一次嘗試。

預(yù)計(jì)到下次重試的剩余時(shí)間

在每次重新加入嘗試之間,服務(wù)器將處于 5 分鐘的可中斷睡眠中。 重新加入嘗試直到成功或失敗之間的時(shí)間是無(wú)法估計(jì)的。 因此,為了粗略估計(jì)剩余時(shí)間,我們可以將到目前為止嘗試的重試次數(shù)乘以 5 分鐘,并減去到目前為止的階段事件所花費(fèi)的時(shí)間,以估計(jì)我們還需要多長(zhǎng)時(shí)間:

SELECT (300.0 - ((TIMER_WAIT*10e-12) - 300.0 * num_retries)) AS time_remaining FROM

(SELECT COUNT(*) - 1 AS num_retries FROM

performance_schema.events_stages_current WHERE EVENT_NAME LIKE '%auto-rejoin%') AS T,

performance_schema.events_stages_current WHERE EVENT_NAME LIKE '%auto-rejoin%';

time_remaining

30.0

所以在這個(gè)例子中,在下一次重新加入之前還有 30 秒。注意性能模式表中的所有時(shí)間記帳都以微秒精度保持,因此我們將 TIMER_WAIT 縮放為秒。

使用自動(dòng)重新加入與驅(qū)逐超時(shí)的權(quán)衡

到目前為止,在這篇文章中我們只關(guān)注自動(dòng)重新加入。實(shí)際上,有兩種不同的方法可以實(shí)現(xiàn)離開(kāi)組的成員的重新加入:

設(shè)置自動(dòng)重新加入嘗試次數(shù)來(lái)實(shí)現(xiàn)自動(dòng)重新加入

設(shè)置該成員的驅(qū)逐超時(shí)時(shí)間然后配合手動(dòng)干預(yù)

能有延緩刪除組內(nèi)可疑成員,并且如果配置為足夠長(zhǎng)的驅(qū)逐超時(shí)時(shí)間,則增加了重新建立連接的機(jī)會(huì),再次與組進(jìn)行交互。

雖然這兩個(gè)功能實(shí)現(xiàn)了相同的目標(biāo),但它們的工作方式是不同的,并且需要權(quán)衡。通過(guò)使用驅(qū)逐超時(shí),您可以維護(hù)組中可疑的成員,其缺點(diǎn)是您無(wú)法添加或刪除成員或選擇新的主機(jī)。如果通過(guò)使用自動(dòng)重新加入,該成員將不再是該組的正常組員,將保持在 superreadonly 模式,直到重新加入該組。但在此期間,重新加入成員的同步舊數(shù)據(jù)的可能性將增加。自動(dòng)重新加入過(guò)程可監(jiān)控,而驅(qū)逐超時(shí)不是真正可監(jiān)控的。

所以,總結(jié)一下:

驅(qū)逐超時(shí)的優(yōu)點(diǎn)

- 該成員一直在該組內(nèi)

- 可能更適合足夠小的網(wǎng)絡(luò)故障

驅(qū)逐超時(shí)的缺點(diǎn)

- 在懷疑某個(gè)成員時(shí),無(wú)法在該組上添加/刪除成員

- 在懷疑某個(gè)成員時(shí),無(wú)法選擇新的主機(jī)

- 您無(wú)法監(jiān)控此過(guò)程

自動(dòng)重新加入的優(yōu)點(diǎn)

- 該組將在沒(méi)有重新加入成員的情況下運(yùn)行,您可以添加/刪除成員并選擇新的主機(jī)

- 您可以監(jiān)控該過(guò)程

自動(dòng)重新加入的缺點(diǎn)

- 您增加了重新加入成員上過(guò)時(shí)讀取的可能性

- 可能不適合足夠小的網(wǎng)絡(luò)故障

總而言之,我從啟用自動(dòng)重新加入中獲得了什么?

通過(guò)啟用自動(dòng)重新加入,您可以減少對(duì)MySQL實(shí)例的手動(dòng)干預(yù)的需要。您的系統(tǒng)

更加適應(yīng)瞬間網(wǎng)絡(luò)故障,同時(shí)滿(mǎn)足對(duì)容錯(cuò)性和高可用的保證。

摘要

我們引入了一個(gè)名為group_replication_autorejoin_tries的新系統(tǒng)變量,允許用戶(hù)設(shè)置 MGR 成員在被驅(qū)逐或與組的大多數(shù)人失去聯(lián)系后嘗試重新加入組的次數(shù)。

默認(rèn)情況下,此自動(dòng)重新加入過(guò)程處于關(guān)閉狀態(tài)。它能幫助用戶(hù)在面對(duì)瞬間網(wǎng)絡(luò)故障時(shí)避免對(duì) MGR 成員進(jìn)行手動(dòng)干預(yù)。

關(guān)于mysql數(shù)據(jù)庫(kù)里面數(shù)據(jù)類(lèi)型number的問(wèn)題

MySQL 數(shù)據(jù)類(lèi)型細(xì)分下來(lái),大概有以下幾類(lèi):

數(shù)值,典型代表為 tinyint,int,bigint

浮點(diǎn)/定點(diǎn),典型代表為 float,double,decimal 以及相關(guān)的同義詞

字符串,典型代表為 char,varchar

時(shí)間日期,典型代表為 date,datetime,time,timestamp

二進(jìn)制,典型代表為 binary,varbinary

位類(lèi)型

枚舉類(lèi)型

集合類(lèi)型

大對(duì)象,比如 text,blob

json 文檔類(lèi)型

一、數(shù)值類(lèi)型(不是數(shù)據(jù)類(lèi)型,別看錯(cuò)了)如果用來(lái)存放整數(shù),根據(jù)范圍的不同,選擇不同的類(lèi)型。

以上是幾個(gè)整數(shù)選型的例子。整數(shù)的應(yīng)用范圍最廣泛,可以用來(lái)存儲(chǔ)數(shù)字,也可以用來(lái)存儲(chǔ)時(shí)間戳,還可以用來(lái)存儲(chǔ)其他類(lèi)型轉(zhuǎn)換為數(shù)字后的編碼,如 IPv4 等。示例 1用 int32 來(lái)存放 IPv4 地址,比單純用字符串節(jié)省空間。表 x1,字段 ipaddr,利用函數(shù) inet_aton,檢索的話(huà)用函數(shù) inet_ntoa。

查看磁盤(pán)空間占用,t3 占用最大,t1 占用最小。所以說(shuō)如果整數(shù)存儲(chǔ)范圍有固定上限,并且未來(lái)也沒(méi)有必要擴(kuò)容的話(huà),建議選擇最小的類(lèi)型,當(dāng)然了對(duì)其他類(lèi)型也適用。root@ytt-pc:/var/lib/mysql/3305/ytt# ls -sihl總用量 3.0G3541825 861M -rw-r----- 1 mysql mysql 860M 12月 10 11:36 t1.ibd3541820 989M -rw-r----- 1 mysql mysql 988M 12月 10 11:38 t2.ibd3541823 1.2G -rw-r----- 1 mysql mysql 1.2G 12月 10 11:39 t3.ibd

二、浮點(diǎn)數(shù) / 定點(diǎn)數(shù)先說(shuō)?浮點(diǎn)數(shù),float 和 double 都代表浮點(diǎn)數(shù),區(qū)別簡(jiǎn)單記就是 float 默認(rèn)占 4 Byte。float(p) 中的 p 代表整數(shù)位最小精度。如果 p 24 則直接轉(zhuǎn)換為 double,占 8 Byte。p 最大值為 53,但最大值存在計(jì)算不精確的問(wèn)題。再說(shuō)?定點(diǎn)數(shù),包括 decimal 以及同義詞 numeric,定點(diǎn)數(shù)的整數(shù)位和小數(shù)位分別存儲(chǔ),有效精度最大不能超過(guò) 65。所以區(qū)別于 float 的在于精確存儲(chǔ),必須需要精確存儲(chǔ)或者精確計(jì)算的最好定義為 decimal 即可。示例 3創(chuàng)建一張表 y1,分別給字段 f1,f2,f3 不同的類(lèi)型。mysql-(ytt/3305)-create table y1(f1 float,f2 double,f3 decimal(10,2));Query OK, 0 rows affected (0.03 sec)

三、字符類(lèi)型字符類(lèi)型和整形一樣,用途也很廣。用來(lái)存儲(chǔ)字符、字符串、MySQL 所有未知的類(lèi)型??梢院?jiǎn)單說(shuō)是萬(wàn)能類(lèi)型!

char(10) 代表最大支持 10 個(gè)字符存儲(chǔ),varhar(10) 雖然和 char(10) 可存儲(chǔ)的字符數(shù)一樣多,不同的是 varchar 類(lèi)型存儲(chǔ)的是實(shí)際大小,char 存儲(chǔ)的理論固定大小。具體的字節(jié)數(shù)和字符集相關(guān)。示例 4例如下面表 t4 ,兩個(gè)字段 c1,c2,分別為 char 和 varchar。mysql-(ytt/3305)-create table t4 (c1 char(20),c2 varchar(20));Query OK, 0 rows affected (0.02 sec)

所以在 char 和 varchar 選型上,要注意看是否合適的取值范圍。比如固定長(zhǎng)度的值,肯定要選擇 char;不確定的值,則選擇 varchar。

四、日期類(lèi)型日期類(lèi)型包含了 date,time,datetime,timestamp,以及 year。year 占 1 Byte,date 占 3 Byte?!?/p>

time,timestamp,datetime 在不包含小數(shù)位時(shí)分別占用 3 Byte,4 Byte,8 Byte;小數(shù)位部分另外計(jì)算磁盤(pán)占用,見(jiàn)下面表格。

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

注意:timestamp 代表的時(shí)間戳是一個(gè) int32 存儲(chǔ)的整數(shù),取值范圍為 '1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999';datetime 取值范圍為 '1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999'。

綜上所述,日期這塊類(lèi)型的選擇遵循以下原則:

1. 如果時(shí)間有可能超過(guò)時(shí)間戳范圍,優(yōu)先選擇 datetime。2. 如果需要單獨(dú)獲取年份值,比如按照年來(lái)分區(qū),按照年來(lái)檢索等,最好在表中添加一個(gè) year 類(lèi)型來(lái)參與。3. 如果需要單獨(dú)獲取日期或者時(shí)間,最好是單獨(dú)存放,而不是簡(jiǎn)單的用 datetime 或者 timestamp。后面檢索時(shí),再加函數(shù)過(guò)濾,以免后期增加 SQL 編寫(xiě)帶來(lái)額外消耗。

4. 如果有保存毫秒類(lèi)似的需求,最好是用時(shí)間類(lèi)型自己的特性,不要直接用字符類(lèi)型來(lái)代替。MySQL 內(nèi)部的類(lèi)型轉(zhuǎn)換對(duì)資源額外的消耗也是需要考慮的。

示例 5

建立表 t5,對(duì)這些可能需要的字段全部分離開(kāi),這樣以后寫(xiě) SQL 語(yǔ)句的時(shí)候就很容易了。

當(dāng)然了,這種情形占用額外的磁盤(pán)空間。如果想在易用性與空間占用量大這兩點(diǎn)來(lái)折中,可以用 MySQL 的虛擬列來(lái)實(shí)時(shí)計(jì)算。比如假設(shè) c5 字段不存在,想要得到 c5 的結(jié)果。mysql-(ytt/3305)-alter table t5 drop c5, add c5 year generated always as (year(c1)) virtual;Query OK, 1 row affected (2.46 sec)Records: 1 ?Duplicates: 0 ?Warnings: 0

五、二進(jìn)制類(lèi)型

binary 和 varbinary 對(duì)應(yīng)了 char 和 varchar 的二進(jìn)制存儲(chǔ),相關(guān)的特性都一樣。不同的有以下幾點(diǎn):

binary(10)/varbinary(10) 代表的不是字符個(gè)數(shù),而是字節(jié)數(shù)。

行結(jié)束符不一樣。char 的行結(jié)束符是 \0,binary 的行結(jié)束符是 0x00。

由于是二進(jìn)制存儲(chǔ),所以字符編碼以及排序規(guī)則這類(lèi)就直接無(wú)效了。

示例 6

來(lái)看這個(gè) binary 存取的簡(jiǎn)單示例,還是之前的變量 @a。

切記!這里要提前計(jì)算好 @a 占用的字節(jié)數(shù),以防存儲(chǔ)溢出。

六、位類(lèi)型

bit 為 MySQL 里存儲(chǔ)比特位的類(lèi)型,最大支持 64 比特位, 直接以二進(jìn)制方式存儲(chǔ),一般用來(lái)存儲(chǔ)狀態(tài)類(lèi)的信息。比如,性別,真假等。具有以下特性:

1. 對(duì)于 bit(8) 如果單純存放 1 位,左邊以 0 填充 00000001。2. 查詢(xún)時(shí)可以直接十進(jìn)制來(lái)過(guò)濾數(shù)據(jù)。3. 如果此字段加上索引,MySQL 不會(huì)自己做類(lèi)型轉(zhuǎn)換,只能用二進(jìn)制來(lái)過(guò)濾。

示例 7

創(chuàng)建表 c1, 字段性別定義一個(gè)比特位。mysql-(ytt/3305)-create table c1(gender bit(1));Query OK, 0 rows affected (0.02 sec)

mysql-(ytt/3305)-select cast(gender as unsigned) ?'f1' from c1;+------+| f1 ? |+------+| ? ?0 || ? ?1 |+------+2 rows in set (0.00 sec)

過(guò)濾數(shù)據(jù)也一樣,二進(jìn)制或者直接十進(jìn)制都行。mysql-(ytt/3305)-select conv(gender,16,10) as gender \???- from c1 where gender = b'1';?+--------+| gender |+--------+| 1??????|+--------+1 row in set (0.00 sec)????mysql-(ytt/3305)-select conv(gender,16,10) as gender \????- from c1 where gender = '1';+--------+| gender |+--------+| 1??????|+--------+1 row in set (0.00 sec)

其實(shí)這樣的場(chǎng)景,也可以定義為 char(0),這也是類(lèi)似于 bit 非常優(yōu)化的一種用法。

mysql-(ytt/3305)-create table c2(gender char(0));Query OK, 0 rows affected (0.03 sec)

那現(xiàn)在我給表 c1 簡(jiǎn)單的造點(diǎn)測(cè)試數(shù)據(jù)。

mysql-(ytt/3305)-select count(*) from c1;+----------+| count(*) |+----------+| 33554432 |+----------+1 row in set (1.37 sec)

把 c1 的數(shù)據(jù)全部插入 c2。

mysql-(ytt/3305)-insert into c2 select if(gender = 0,'',null) from c1;Query OK, 33554432 rows affected (2 min 18.80 sec)Records: 33554432 ?Duplicates: 0 ?Warnings: 0

兩張表的磁盤(pán)占用差不多。root@ytt-pc:/var/lib/mysql/3305/ytt# ls -sihl總用量 1.9G4085684 933M -rw-r----- 1 mysql mysql 932M 12月 11 10:16 c1.ibd4082686 917M -rw-r----- 1 mysql mysql 916M 12月 11 10:22 c2.ibd

檢索方式稍微有些不同,不過(guò)效率也差不多。所以說(shuō),字符類(lèi)型不愧為萬(wàn)能類(lèi)型。

七、枚舉類(lèi)型

枚舉類(lèi)型,也即 enum。適合提前規(guī)劃好了所有已經(jīng)知道的值,且未來(lái)最好不要加新值的情形。枚舉類(lèi)型有以下特性:

1. 最大占用 2 Byte。2. 最大支持 65535 個(gè)不同元素。3. MySQL 后臺(tái)存儲(chǔ)以下標(biāo)的方式,也就是 tinyint 或者 smallint 的方式,下標(biāo)從 1 開(kāi)始。4. 排序時(shí)按照下標(biāo)排序,而不是按照里面元素的數(shù)據(jù)類(lèi)型。所以這點(diǎn)要格外注意。

示例 8

創(chuàng)建表 t7。mysql-(ytt/3305)-create table t7(c1 enum('mysql','oracle','dble','postgresql','mongodb','redis','db2','sql server'));Query OK, 0 rows affected (0.03 sec)

八、集合類(lèi)型

集合類(lèi)型 SET 和枚舉類(lèi)似,也是得提前知道有多少個(gè)元素。SET 有以下特點(diǎn):

1. 最大占用 8 Byte,int64。2. 內(nèi)部以二進(jìn)制位的方式存儲(chǔ),對(duì)應(yīng)的下標(biāo)如果以十進(jìn)制來(lái)看,就分別為 1,2,4,8,...,pow(2,63)。3. 最大支持 64 個(gè)不同的元素,重復(fù)元素的插入,取出來(lái)直接去重。4. 元素之間可以組合插入,比如下標(biāo)為 1 和 2 的可以一起插入,直接插入 3 即可。

示例 9

定義表 c7 字段 c1 為 set 類(lèi)型,包含了 8 個(gè)值,也就是下表最大為 pow(2,7)。

mysql-(ytt/3305)-create table c7(c1 set('mysql','oracle','dble','postgresql','mongodb','redis','db2','sql server'));Query OK, 0 rows affected (0.02 sec)

插入 1 到 128 的所有組合。

mysql-(ytt/3305)-INSERT INTO c7WITH RECURSIVE ytt_number (cnt) AS ( ? ? ? ?SELECT 1 AS cnt ? ? ? ?UNION ALL ? ? ? ?SELECT cnt + 1 ? ? ? ?FROM ytt_number ? ? ? ?WHERE cnt pow(2, 7) ? ?)SELECT *FROM ytt_number;Query OK, 128 rows affected (0.01 sec)Records: 128 ?Duplicates: 0 ?Warnings: 0

九、數(shù)據(jù)類(lèi)型在存儲(chǔ)函數(shù)中的用法

函數(shù)里除了顯式聲明的變量外,默認(rèn) session 變量的數(shù)據(jù)類(lèi)型很弱,隨著給定值的不同隨意轉(zhuǎn)換。

示例 10

定義一個(gè)函數(shù),返回兩個(gè)給定參數(shù)的乘積。定義里有兩個(gè)變量,一個(gè)是 v_tmp 顯式定義為 int64,另外一個(gè) @vresult 隨著給定值的類(lèi)型隨意變換類(lèi)型。

簡(jiǎn)單調(diào)用下。

mysql-(ytt/3305)-select ytt_sample_data_type(1111,222) 'result';+--------------------------+| result ? ? ? ? ? ? ? ? ? |+--------------------------+| The result is: '246642'. |+--------------------------+1 row in set (0.00 sec)

總結(jié)

本篇把 MySQL 基本的數(shù)據(jù)類(lèi)型做了簡(jiǎn)單的介紹,并且用了一些容易理解的示例來(lái)梳理這些類(lèi)型。我們?cè)趯?shí)際場(chǎng)景中,建議選擇適合最合適的類(lèi)型,不建議所有數(shù)據(jù)類(lèi)型簡(jiǎn)單的最大化原則。比如能用 varchar(100),不用 varchar(1000)。

mysql創(chuàng)建無(wú)符號(hào)數(shù)據(jù)類(lèi)型

create table test(

id int unsigned....

之前的最佳答案誤人子弟,無(wú)符號(hào)的英語(yǔ)都寫(xiě)錯(cuò)。

mysql基礎(chǔ)數(shù)據(jù)類(lèi)型118-124

#常見(jiàn)的數(shù)據(jù)類(lèi)型

/*

數(shù)值型:

整形

小數(shù):

? ? 定點(diǎn)數(shù)

? ? 浮點(diǎn)數(shù)

字符型:

較短的文本:char、varchar

較長(zhǎng)的文本:text、blob(較長(zhǎng)的二進(jìn)制數(shù)據(jù))

日期型:

*/

#一、整形

/*

分類(lèi):

tinyint、smallint、mediumint、int/integer、bigint

1 ? ? ? ? ? ?2 ? ? ? ? ? ? ? ?3 ? ? ? ? ? ? ? ? ? ? ? ?4 ? ? ? ? ? ? ? ?8

特點(diǎn):

-如果不設(shè)置無(wú)符號(hào)還是有符號(hào),默認(rèn)是有符號(hào),如果想設(shè)置無(wú)符號(hào),需要添加unsigned關(guān)鍵字

-如果插入的數(shù)值超出了整形的范圍,會(huì)報(bào)out of range異常,并且插入臨界值

-如果不設(shè)置長(zhǎng)度,會(huì)有默認(rèn)的長(zhǎng)度

-長(zhǎng)度代表了顯示的最大寬度,如果不夠會(huì)用0在左邊填充,但是必須搭配zerofill使用

*/

#1.如何設(shè)置無(wú)符號(hào)和有符號(hào)

CREATE TABLE tab_int(

t1 INT

t2 INT ZEROFILL ?【無(wú)符號(hào)】

);

#二、小數(shù)

/*

浮點(diǎn)型

float(M, D)

double(M, D)

定點(diǎn)型

dec(M, D)

decimal(M, D)

特點(diǎn):

-M:整數(shù)部位+小數(shù)部位

-D:小數(shù)部位

-M和D都可以省略

如果是decimal,則M默認(rèn)為10,D默認(rèn)為0

如果是float和double,則會(huì)根據(jù)插入的數(shù)值的精度來(lái)決定精度

定點(diǎn)型的精確度較高,如果要求插入數(shù)值的精度較高如貨幣運(yùn)算等則考慮使用

*/

CREATE TABLE tab_float (

f1 FLOAT(5, 2)

f2 DOUBLE (5, 2)

f3 DECIMAL(5, 2)

)

#原則:

/*

所選擇的類(lèi)型越簡(jiǎn)單越好,能保存數(shù)值的類(lèi)型越小越好

*/

#三、字符型

/*

較短的文本:

char

varchar

較長(zhǎng)的文本:

text

blob(較大的二進(jìn)制)

特點(diǎn):

? ? ? ? ? ? ? ? 寫(xiě)法 ? ? ? ? ? ? ? ?M的意思 ? ? ? ? ? ? ????????????????????????????特點(diǎn) ? ? ? ? ? ? ? ? ? ????空間的耗費(fèi) ? ? ? ? ? ? ? ? ? ?效率????????

char ? ? ? ? ? ?char(M) ? ? ? 最大的字符數(shù),可以省略 ? ? ? ? 固定長(zhǎng)度的字符 ? ?????????比較耗費(fèi) ? ? ? ? ? ? ? ? ? ? ? ?高

varchar ? ? ?carchar(M) ? ?最大的字符數(shù),不可以省略 ? ?可變長(zhǎng)度的字符 ? ? ? ? ? ?比較節(jié)省 ? ? ? ? ? ? ? ? ? ? ? ?低

*/

CREATE TABLE tab_char(

c1 ENUM('a','b','c')

)

CREATE TABLE tab_set(

s1 ? ?SET ('a','b','c','d')

)

#四、日期型

特點(diǎn):

? ? ? ? ? ? ? ? ?字節(jié)? ? ? ? ? ? ? ? ? ? ? ? 范圍? ? ? ? ? ? ? ? ? ? 時(shí)區(qū)等的影響

datetime? ? ? ? ? ? ? ? ? ? ? ? ? 8? ? ? ? ? ? ? ? ? ? ? ? ? ? 10000-9999? ? ? ? ? ? 不受

timestamp? ? ? ? ? ? ? ? ? ? ? ? 4? ? ? ? ? ? ? ? ? ? ? ? 1970-2038? ? ? ? ? ? ? ? ? ? 受

CREATE TABLE tab_date(

t1? ? DATETIME,

t2? ? TIMESTAMP

)

#常見(jiàn)約束

/*

含義:一種限制,用于限制表中的數(shù)據(jù),為了保證表中的數(shù)據(jù)的準(zhǔn)確和可靠性

分類(lèi):六大約束

NOT NULL:非空,用于保證該字段的值不能為空,比如姓名、學(xué)號(hào)等

default:默認(rèn),用于保證該字段有默認(rèn)值,比如性別

primary key:主鍵,用于保證該字段的值具有唯一性,并且非空,比如學(xué)號(hào)等

unique:唯一,用于保證該字段的值具有唯一性,可以為空,比如座位號(hào)

check:檢查約束【mysql中不支持】,比如年齡、性別

foreign key:外鍵,用于限制兩個(gè)表的關(guān)系,用于保證該字段的值必須來(lái)自于主表的關(guān)聯(lián)列的值,在從表添加外鍵約束,用于引用主表中某列的值,比如員工表的部門(mén)編號(hào),員工表的工種編號(hào)

添加約束的時(shí)機(jī):

1.創(chuàng)建表時(shí)

2.修改表時(shí)

約束的添加分類(lèi):

列級(jí)約束:

? ? 六大約束語(yǔ)法上都支持,但外鍵約束沒(méi)有效果

表級(jí)約束:

? ? 除了非空、默認(rèn),其他的都支持

*/

CREATE TABLE 表名(

字段名? ? 字段類(lèi)型? ? 列級(jí)約束,

表級(jí)約束

)

#一、創(chuàng)建表時(shí)添加約束

/*

語(yǔ)法:

直接在字段名和類(lèi)型后面追加 約束類(lèi)型即可

只支持:

*/

#1.添加列級(jí)約束

create table stuinfo (

id int primary key,? #主鍵

stuName? varchar(20) not null,? ?#非空

gender char(1)? check(gender='男' OR gender ='女'),? #檢查約束

seat int unique,? #唯一約束

age? int? default? 18,? #默認(rèn)約束

majorId int foreign key references major (id)? #外鍵

)

create table major (

id int primary key,

majorName? varchar (20)

)

desc stuinfo? ?#查看表結(jié)構(gòu)

show index from stuinfo? #查看stuinfo表中所有的索引,包括主鍵、外鍵、唯一

#2、添加表級(jí)約束

create table stuinfo (

id int

stuName? varchar(20)?

gender char(1)?

seat int,

age? int? ,?

majorId int

constraint pk primary key (id),? #主鍵

constraint? uq unique (seat),? #唯一鍵

constraint? ck check (gender = '男' or gender = '女'),? ?#檢查

constraint? fk_stuinfo_major foreign key(majorid) references major(id)? #外鍵

)


文章題目:mysql怎么添加無(wú)符號(hào) mysql字段設(shè)置無(wú)符號(hào)
本文鏈接:http://weahome.cn/article/ddeccph.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部