日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

从零开始学MySQL(四)

發(fā)布時間:2024/9/5 61 如意码农
生活随笔 收集整理的這篇文章主要介紹了 从零开始学MySQL(四) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

上節(jié)說到,在創(chuàng)建表的同時,需要給出列的定義。列的定義可展開如下:

列名 列的數(shù)據(jù)類型 列的一些其他屬性(可選)

由于列名可自定義,故這里不做詳細探討。建議不要使用關鍵字或保留字即可,非要使用的話就得加上反引號了(``),唯有如此,才能讓程序有效地將它們區(qū)分開。接下來,主要來學習一下列的數(shù)據(jù)類型及列的一些其他屬性吧。

本文概覽:

(一)列的數(shù)據(jù)類型

(二)列的一些其他屬性

ps:

原本打算自己寫的,適才發(fā)現(xiàn)實在沒有必要錯過網(wǎng)上一些良好的資源。以下列舉數(shù)據(jù)類型的截圖來自菜鳥教程,若您想查看原文,還請點擊下面的鏈接進行查閱:https://www.runoob.com/mysql/mysql-data-types.html 。即便如此,筆者還是建議您予以重視,因為列的數(shù)據(jù)類型還是蠻重要的(筆者親身經(jīng)歷過的一次筆試,其第一道題即要求列出某個數(shù)據(jù)庫的數(shù)據(jù)類型),何況其中不是一味照搬,還會有一些講解來輔助您的理解。

(一)列的數(shù)據(jù)類型


在創(chuàng)建表的時候,決定每一列將存儲什么樣類型的數(shù)據(jù)是必須的,因為這直接關系到對存儲空間的占用(無論是硬盤還是內存)。

ps: 對于存儲在硬盤上應該是沒有什么異議的,因為我們明顯能感受出物理存儲空間大小的變化;而內存則更像一條“通道”,負責將數(shù)據(jù)從第一地方帶到另外一個地方。比如在進行插入操作時,會先將數(shù)據(jù)讀入內存,然后再通過內存寫入到硬盤上達到永久的存儲;又如查詢操作,會先從硬盤上提取出相關的數(shù)據(jù)到內存,然后才顯示到客戶端。

在MySQL中,數(shù)據(jù)被分為三類:數(shù)字類型、字符串類型、日期和時間類型。需要注意的是,“日期和時間類型”是特殊的數(shù)字類型,因為它和數(shù)字一樣,可以進行計算。

1. 數(shù)值類型

數(shù)值類型包括整數(shù)(無小數(shù)位)、定點數(shù)(DECIMAL)、浮點數(shù)(可以有小數(shù)位)。

在這里,我們還需要了解的是,“精確值數(shù)”和“近似值數(shù)”的區(qū)別。

(1) 組成

精確值數(shù):整數(shù)(如,3、9)、帶小數(shù)點的數(shù)(由三部分組成:一個數(shù)字序列、一個小數(shù)點、另一個數(shù)字序列。如,3.9、3.、.9)。

近似值數(shù):采用科學計數(shù)法表示的浮點數(shù)(由三部分組成:帶小數(shù)點的數(shù)、一個底數(shù)、一個指數(shù)。底數(shù)是字母e或E,指數(shù)可正可負。如,3.9e-5、-3.9e5)。

(2) 運算

精確值數(shù)在使用時與指定值是完全一致的,因此其進行的是精確運算。也就是說,只要沒有超出那些數(shù)值的精度范圍,就不會丟失精度。如,3.98765就不允許插入到值允許兩位小數(shù)的列里。

近似值數(shù)進行的是近似運算,也就是說,會有舍入誤差。

另外,還需要和“無符號”取下經(jīng)。

無符號的標志是 UNSIGNED。如何使用呢?答曰:在對應的數(shù)值類型后面添加即可,記得要使用空格隔開,否則解析器理解不了。如 SMALLINT UNSIGNED、INT UNSIGNED等等。

2. 字符串類型

字符串類型包括定長、變長兩種類型,比如CHAR和VARCHAR的區(qū)別就在于此。

3. 日期和時間類型

日期和時間類型包括日期與時間、時間戳、年類型。

這里需要作額外講解的是:

① CHAR和VARCHAR兩者的區(qū)別和選用。

區(qū)別:

CHAR:屬于“定長”的字符串類型。什么是定長,通俗點講就是固定長度。比如CHAR(10)就是只能存儲大小為10個字節(jié)的數(shù)據(jù),可少不可多。少則系統(tǒng)會自動補充空白字符。

VARCHAR:屬于“變長”的字符串類型。變長,即可變化的長度。比如VARCHAR(10)就是你存儲的大小有多少就是多少,不會多也不會少。少的話,也無須系統(tǒng)幫忙填充。

選用:

(1)選用CHAR(X)較佳的情景:

當所有值的長度都是 X 個字符,那么VARCHAR(X)會比CHAR(X)多占用存儲空間。因為VARCHAR需要額外使用2個字節(jié)來記錄字符的長度(小于255使用1個字節(jié),大于255使用2個字節(jié))。

當使用的是MyISAM表,并且各個值的長度差別不大,那么選用CHAR更好。因為MyISAM存儲引擎對固定長度行的處理效率更高。

(2)選用VARCHAR(X)較佳的場景:

當數(shù)據(jù)長短不一,選用VARCHAR類型就可以節(jié)省空格占用的存儲空間了。

糾正:

“上面提過CHAR(10)就是只能存儲大小為10個字節(jié)的數(shù)據(jù)”,實際上是不完全正確的。

MySQL4.0以前, varchar(20) 是20個字節(jié)。此時可存放的字符數(shù)應當是字節(jié)長與編碼形式共同決定的——比如GBK每個字符最多占用兩個字節(jié),UTF8每個字符最多占用三個字節(jié),因此varchar(20)分對應存儲20/2、20/3得到的結果。(前者偏高,因為該結果并沒有考慮用來記錄字符長度的字節(jié)呢!而后者則比較充足。)

MySQL5.0以后的,varchar(20)是20個字符。

此外,MySQL定義行的長度不得超過65535(64k),而該值正也限制了每行擁有的多少個列。

② 日期與時間類型中日期的表示法和寫法。

表示法:

在MySQL中,時間類型的固定模式為“CCYY-MM-DD”。比如,要表示“今天”這個日期,你只能確切寫為“2019-05-17”,而不能使用“05-17-2019”之類的來表示。

寫法:

在插入一條記錄的時候(現(xiàn)在不懂也沒關系。后面會學習,學到后面再回來翻看一下即可),為日期列賦值時,記得要帶上單引號( '  ' ),否則MySQL會報錯。

比如,您可以嘗試一下下面的語句,觀察最后面的語句的報錯信息:

CREATE TABLE interview
(interview_date DATE,
period CHAR(2),
address VARCHAR(50),
company VARCHAR(50)); INSERT INTO interview(interview_date) VALUES('2019-05-17'); INSERT INTO interview(interview_date) VALUES(2019-05-17);

(二)列的一些其他屬性


在創(chuàng)建表的時候,列的一些其他屬性為可附加的。這類設置通常是對要存儲的數(shù)據(jù)進行進一步的限制,比如允許為空(NULL)、禁止為空(NOT NULL)、為空時將設為默認值(DEFAULT 某個默認值)等等。具體詳細請看下面。

(1)空值 NULL / NOT NULL

空值這一屬性,決定了該列在插入數(shù)據(jù)時,能否為空。

(2)默認值 DEFAULT

默認值這一屬性深化了“先入為主”這一概念,即在插入數(shù)據(jù)時,若給該列賦值,則采用賦予的值;否則以設置的默認值填充之。

ps:若賦予NULL值,則直接設置為默認值。即非NULL值 > 默認值 = NULL值。

(3)注釋值 COMMENT '請使用其他內容代替此處文本'

注釋值當然是基于開發(fā)維護用的,用于對列的描述。因此使用“DESCRIBE語句”是無法查看到它的,必須使用“SHOW CREATE TABLE 對應表名”才行。

(4)主鍵 PRIMARY KEY

什么是主鍵?主鍵指的是一個表里面最為主要的鍵。(“最”字就說明了一個表有且只有一個。既可以讓一個列作為主鍵,也可以讓兩個以上列同時作為主鍵。“兩個以上列的主鍵”,我們更習慣稱之為“組合主鍵”,因為它們的結合才能起到標識記錄的作用。什么是標識?請看下面)。

現(xiàn)在問您,表里面存儲的是什么?記錄?對的。前面提到過每條記錄都會包含該表的所有列,既然主鍵作為表最主要的東東,自然是不可替代的,輕松依靠它標識每一個記錄不在話下。換句話說,它就像記錄的“身份證號碼”。將身份證號碼的性質推及到主鍵上,我們可以確定主鍵中的值一定是唯一的、不能為空的,即PRIMARY KEY = UNIQUE KEY + NOT NULL( 注意與第(5)小點區(qū)分開 )。

ps:不要將主鍵等同于列。否則很容易陷入“一個主鍵=一個列”這一傻瓜想法。主鍵是列的一個附加屬性,僅此而已。

(5)唯一鍵 UNIQUE KEY

什么是唯一鍵?唯一鍵就是值唯一。

什么鬼?我不明白主鍵已經(jīng)可以約束列值為唯一的,為什么還需要這貨?因為一個表中只能有一個主鍵呀!如果有多處值要求唯一,那么單單依靠主鍵并不能解決問題。此時UNIQUE KEY就派得上用場了。這間接說明了,一個表可以有多個唯一鍵。

ps:NULL是可以填入UNIQUE KEY的列的,NULL值還可以有多個(why? 因為NULL不等于NULL呀!現(xiàn)在您明白了嗎?)。

(6)自動增長序列 AUTO_INCREMENT

AUTO_INCREMENT屬性的作用是:自動生成序列編號。

那么如何保證生成的序列編號“唯一”呢?讓AUTO_INCREMENT與PRIMARY KEY / UNIQUE KEY相結合不就行了嗎?因此,附加AUTO_INCREMENT屬性的列還應設置為唯一鍵或主鍵。此外,還有一個硬性要求——一個表中只能有一個列具有ANTO_INCREMENT屬性。

總結

以上是生活随笔為你收集整理的从零开始学MySQL(四)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。