91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql數據類型實例分析

發布時間:2022-07-21 10:03:14 來源:億速云 閱讀:164 作者:iii 欄目:開發技術

這篇“mysql數據類型實例分析”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“mysql數據類型實例分析”文章吧。

整數類型

數值型數據類型主要用來存儲數字,mysql提供了多種數值數據類型,不同的數據類型提供不同的取值范圍,可以存儲的值范圍越大,其所需要的存儲空間也會越大。

mysql主要提供的整數類型有TINYINTSMALLINTMEDIUMINTINTBIGINT。整數類型的屬性字段可以添加AUTO_INCREMENT自增約束條件。

看下下面兩個表;

  • 表一:mysql中的整數型數據類型

  • 表二、mysql不同整數類型的取值范圍

舉個例子:

year int(4);

該聲明指明,在year字段中的數據一般只顯示4位數字的寬度;

注意點:顯示寬度和數據類型取值范圍是無關的。顯示寬度只是指明mysql最大可能顯示的數字個數,數值的位數小于指定的寬度時會由空格填充;如果插入了大于顯示寬度的值,只要該值不超過該類型整數的取值范圍,數值依然可以插入,而且能夠顯示出來。

例如:向year字段插入一個數值12345,當使用select查詢該列值的時候,mysql顯示的將是完整的帶有5位數字的12345,而不是4位數字的值。

其他整數型數據類型也可以在定義表結構時指定所需要的顯示寬度,如果不指定,則系統為每一種類型指定默認的寬度。

不同的整數類型有不同的取值范圍,并且需要不同的存儲空間,因此應該根據實際需要選擇最合適的類型,這樣有利于提高查詢的效率和節省存儲空間。整數類型是不帶小數部分的數值,現實生活中很多地方都需要用到帶小數的數值。下面我們就來介紹下小數類型。

注意點:顯示寬度只用于顯示,并不能限制取值范圍和占用空間。

浮點數類型和定點數類型

mysql中使用浮點數和定點數來表示小數。

浮點數類型有兩種:

  • 單精度浮點類型(FLOAT)

  • 雙精度浮點類型(DOUBLE)

定點數類型只有一種:

  • DECIMAL

浮點數類型和定點數類型都可以用(M,N)來表示。其中呢,我們用M稱為精度,表示總共的位數N稱為標度,表示小數的位數

DECIMAL類型不同于FLOATDOUBLEDECIMAL實際是以串存放的,可能的最大取值范圍和DOUBLRE一樣,但是其有效的取值范圍由MD的值來決定。怎么說呢?

如果改變M而固定D,則其取值范圍將隨著M的變大而變大。

那么在mysql中,浮點數類型和定點數類型的取值范圍有多大呢?

幾乎正常業務情況下是不可能用完的,因為他們的取值范圍如下:

FLOAT類型的取值范圍:

  • 有符號的取值范圍:-3.402823466E+38 ~-1.175494351E-38

  • 無符號的取值范圍:0和1.175494351E-38 ~3.402823466E+38

DOUBLE類型的取值范圍:

  • 有符號的取值范圍:-1.7976931348623157E+308 ~-2.2250738585072014E-308

  • 無符號的取值范圍:0和2.2250738585072014E-308~ 1.7976931348623157E+308

注意點:無論是定點數還是浮點數類型,如果用戶指定的精度超出精度范圍,則會四舍五入。

可能有點繞,舉個栗子吧:

創建一個數據表為yunweijia_1,字段類型如下;

mysql> create table yunweijia_1 (x float(5,1), y double(5,1), z decimal(5,1));
Query OK, 0 rows affected, 2 warnings (0.04 sec)
mysql>

然后我們在這個表中插入一條數據,sql語句如下:

mysql> insert into yunweijia_1 values (6.66, 7.77, 8.888);
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql>

看上面的提示信息,是不是在我們執行插入語句的時候,給了一個警告信息,然后我們來看下這個警告信息是什么吧;

mysql> show warnings;
+-------+------+----------------------------------------+
| Level | Code | Message |
+-------+------+----------------------------------------+
| Note | 1265 | Data truncated for column 'z' at row 1 |
+-------+------+----------------------------------------+
1 row in set (0.00 sec)
mysql>

可以看到他提示說,z字段在插入的時候被截斷了,但是xy截斷就沒有提出警告。

那么查看下結果吧:

mysql> select * from yunweijia_1;
+------+------+------+
| x | y | z |
+------+------+------+
| 6.7 | 7.8 | 8.9 |
+------+------+------+
1 row in set (0.00 sec)
mysql>

可以看到分別都進行了四舍五入,這點需要注意。

FLOATDOUBLE在不指定精度操作時,默認會按照實際的精度(由計算機硬件和操作系統決定),DECIMAL若不指定精度則默認為(10,0);

浮點數相對于定點數的優點是在長度一定的情況下,浮點數能夠表示更大的數據范圍;他的缺點是會引起精度問題;

注意點:在mysql中,定點數以字符串形式存儲,在對精度要求比較高的時候,使用DECIMAL的類型比較好,另外,兩個浮點數進行減法和比較運算時,容易出現問題,所以在使用浮點數時需要注意,并盡量避免做浮點數比較。

日期與時間類型

mysql中有多種表示日期的數據類型,主要有:

  • DATETIME

  • DATE

  • TIMESTAMP

  • TIME

  • YEAR

比如說,當只記錄年信息的時候,可以只使用YEAR類型,而沒有必要使用DATE

每一個類型都有合法的取值范圍,當指定確實不合法的值時系統將“零”值插入到數據庫中。

YEAR

year類型是一個單字節類型,用于表示年,在存儲時只需要1字節。可以使用各種格式指定year值,如下:

  • 1、以4位字符串或者4位數字格式表示的year,范圍為1901~2155。輸入格式為yyyy或者'yyyy',例如:輸入‘2022’或者2022,插入到數據庫的值均為2022。

  • 2、以2位字符串格式表示的year,范圍為“00”到“99”。“00”~“69”和“70”~“99”范圍的值分別被轉換為“2022”~“2069”和“1970”~“1999”范圍的year值。“0”與“00”的作用相同。插入超過取值范圍的值將被轉換成2000

  • 3、以兩位數字表示的YEAR,范圍為1~99。1~69和70~99范圍的值分別被轉換為200·~2069和1970~1999范圍的YEAR

值。和字符相比較而言,這里的0值,將被轉換成0000,而不是2000。

注意點:

兩位整數范圍與兩位字符串范圍稍有不同。例如,插入2000年,有人可能會使用數字格式的0表示year,實際上,插入數據庫的值為0000,而不是所希望的2000。只有使用字符串格式的“0”或者“00”,才可以被正確的解釋為2000,。非法YEAR值將被轉換為0000。

栗子:

我們創建一個名為yunweijia_2的數據表,使用以下sql語句:

mysql> create table yunweijia_2 (y year);
Query OK, 0 rows affected (0.04 sec)
mysql>

然后我們往表中插入一條數據;

mysql> insert into yunweijia_2 values(2022), ('2022');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql>

再次嘗試插入一條數據;

mysql> insert into yunweijia_2 values ('2166');
ERROR 1264 (22003): Out of range value for column 'y' at row 1
mysql>

我們發現‘2166’超出了YEAR類型的取值范圍,所以不能插入數據,這個時候我們看下mysql數據庫中的數據;

mysql> select * from yunweijia_2;
+------+
| y |
+------+
| 2022 |
| 2022 |
+------+
2 rows in set (0.00 sec)
mysql>

栗子:

首先我們先刪除yunweijia_2數據表中的數據;

mysql> delete from yunweijia_2;
Query OK, 2 rows affected (0.01 sec)
mysql>

可以看到提示刪除了兩條數據;

然后我們再插入以下數據;

mysql> insert into yunweijia_2 values ('0'), ('00'), ('88'), ('22');
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql>

然后看下結果是什么:

mysql> select * from yunweijia_2;
+------+
| y |
+------+
| 2000 |
| 2000 |
| 1988 |
| 2022 |
+------+
4 rows in set (0.00 sec)
mysql>

從上面i看到,字符串‘0’和‘00’的作用相同,分別都轉換成了2000年;‘88’轉換成了‘1988’;‘22’轉換成了‘2022’。

栗子:

老規矩,先刪除表中現有的數據;

mysql> delete from yunweijia_2;
Query OK, 4 rows affected (0.01 sec)
mysql>

然后再插入數據:

mysql> insert into yunweijia_2 values (0), (99), (22);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql>

看下結果:

mysql> select * from yunweijia_2;
+------+
| y |
+------+
| 0000 |
| 1999 |
| 2022 |
+------+
3 rows in set (0.00 sec)
mysql>

可以看到,0被轉換成了0000,99被轉換成了1999,22被轉換成了2022。

TIME

time類型用在只需要時間信息的值,在存儲時需要3字節,格式為HH:MM:SS

其中,HH表示小時,MM表示分鐘,SS表示秒。

mysqltime類型的取值范圍為-838:59:59~838:59:598,小時部分為什么會這么大呢,這是因為time類型不僅可以用來表示一天的時間,還可能是某個事件過去的時間或者兩個事件之間的時間間隔。

(1)‘D HH:MM:S’格式的字符串,可以使用下面任何一種“非嚴格”的語法:

  • ‘HH:MM:SS’

  • ‘HH:MM’

  • ‘D HH:MM’

這里的D表示日,可以取0~34的值,在插入數據庫時,D被轉換成小時保存,格式為“D*24+HH”;

(2)‘HH:MM:SS’格式的、沒有間隔符的字符串或者HHMMSS格式的數值,假定是有意義的時間。例如:'223344'被理解成‘22:33:44’,但是‘223366’是不合法的(他有一個沒有意義的秒部分),存儲時將變成00:00:00。

注意點:

time列分配簡寫時應該注意,如果沒有冒號,mysql解釋值時,假定最右邊的兩位表示秒。如果time值中使用了冒號,則肯定被單做是當天的時間。

例如:

11:22 會被mysql解釋成 00:11:22

'11:22'會被mysql解釋成11:22:00

栗子

創建一個名為yunweijia_3的數據表;

mysql> create table yunweijia_3(t time);
Query OK, 0 rows affected (0.03 sec)
mysql>

往這個表中插入數據:

mysql> insert into yunweijia_3 values ('10:06:06'), ('22:22'), ('2 10:10'), ('3 00'), ('20');
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql>

看下表中的數據:

mysql> select * from yunweijia_3;
+----------+
| t |
+----------+
| 10:06:06 |
| 22:22:00 |
| 58:10:00 |
| 72:00:00 |
| 00:00:20 |
+----------+
5 rows in set (0.00 sec)
mysql>

小提示:在使用‘D HH’格式時,小時一定要使用雙位數值,如果是小于10的小時數,應在前面加0以用來補全雙位數值。

舉個栗子 :

首先我們刪除數據表yunweijia_3里面的數據;

mysql> delete from yunweijia_3;
Query OK, 5 rows affected (0.01 sec)
mysql>

然后再表中插入數據:

mysql> insert into yunweijia_3 values ('101112'), (111213), ('0');
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql>

再次向表中插入一條數據;

mysql> insert into yunweijia_3 values (107010);
ERROR 1292 (22007): Incorrect time value: '107010' for column 't' at row 1
mysql>

可以看到這條數據沒有插入成功,我看看下提示信息;

mysql> show warnings;
+-------+------+--------------------------------------------------------+
| Level | Code | Message |
+-------+------+--------------------------------------------------------+
| Error | 1292 | Incorrect time value: '107010' for column 't' at row 1 |
+-------+------+--------------------------------------------------------+
1 row in set (0.00 sec)
mysql>

為什么這次會插入失敗呢,是不是因為我們的分鐘應該是小于60的啊,但是這里是70,所以報錯了。

我們查看下這個數據庫中的數據現在的展示吧:

mysql> select * from yunweijia_3;
+----------+
| t |
+----------+
| 10:11:12 |
| 11:12:13 |
| 00:00:00 |
+----------+
3 rows in set (0.00 sec)
mysql>

又舉個栗子:

我們還可以使用系統函數向time字段列插入值;

刪除數據表yunweijia_3里面的數據;

mysql> delete from yunweijia_3;
Query OK, 3 rows affected (0.01 sec)
mysql>

然后在表中插入數據;

mysql> insert into yunweijia_3 values (CURRENT_TIME), (NOW());
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql>

查看下數據庫中的結果;

mysql> select * from yunweijia_3;
+----------+
| t |
+----------+
| 23:03:41 |
| 23:03:41 |
+----------+
2 rows in set (0.00 sec)

mysql>

從結果中可以看到,獲取系統當前的日志插入到time類型的列中。

以上就是關于“mysql數據類型實例分析”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

连江县| 两当县| 雷州市| 长武县| 六盘水市| 涪陵区| 大竹县| 隆林| 寻乌县| 凤城市| 忻城县| 曲阜市| 齐齐哈尔市| 恭城| 韶山市| 长岭县| 修文县| 河北省| 浙江省| 琼海市| 册亨县| 新泰市| 华安县| 龙游县| 六盘水市| 蓬溪县| 梁平县| 福泉市| 南充市| 南召县| 鱼台县| 随州市| 鸡泽县| 故城县| 泾川县| 栖霞市| 连城县| 海林市| 康定县| 博客| 沭阳县|