mysql里面有沒有map類型_MySQL學習(二) 數據類型

MySQL支持多種列類型:數值類型、日期/時間類型和字符串(字符)類型。

數值類型

數值類型又分為整數型與小數型

整數型

下面的表顯示了需要的每個整數類型的存儲和范圍

4972aeb38ab08ada1f754053a0575d61.png

創建一張表

mysql> CREATE TABLE t_int (

int_1 TINYINT,

int_2 SMALLINT,

int_3 MEDIUMINT,

int_4 INT,

int_5 BIGINT);

Query OK, 0 rows affected

mysql> DESC t_int;

+-------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+--------------+------+-----+---------+-------+

| int_1 | tinyint(4) | YES | | NULL | |

| int_2 | smallint(6) | YES | | NULL | |

| int_3 | mediumint(9) | YES | | NULL | |

| int_4 | int(11) | YES | | NULL | |

| int_5 | bigint(20) | YES | | NULL | |

+-------+--------------+------+-----+---------+-------+

5 rows in set

插入數據,只能插入整型,數據類型不正確或者超出范圍都會導致插入數據失敗

mysql> INSERT INTO t_int VALUES(100, 100, 100, 100, 100);

Query OK, 1 row affected

mysql> INSERT INTO t_int VALUES('a', 'b', 100, 200, 300); -- 數據類型不正確

1366 - Incorrect integer value: 'a' for column 'int_1' at row 1

mysql> INSERT INTO t_int VALUES(255, 10000, 1000, 100000, 1000000); -- 超出范圍

1264 - Out of range value for column 'int_1' at row 1

mysql> SELECT * FROM t_int;

+-------+-------+-------+-------+-------+

| int_1 | int_2 | int_3 | int_4 | int_5 |

+-------+-------+-------+-------+-------+

| 100 | 100 | 100 | 100 | 100 |

+-------+-------+-------+-------+-------+

1 row in set

SQL中的數值類型全部都是默認有符號,分正負,如果要使用無符號數據,則需要用UNSIGNED關鍵字對數據類型進行限定

mysql> ALTER TABLE t_int ADD COLUMN int_6 TINYINT UNSIGNED; -- 無符號類型

Query OK, 1 row affected

Records: 1 Duplicates: 0 Warnings: 0

mysql> DESC t_int;

+-------+---------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------------------+------+-----+---------+-------+

| int_1 | tinyint(4) | YES | | NULL | |

| int_2 | smallint(6) | YES | | NULL | |

| int_3 | mediumint(9) | YES | | NULL | |

| int_4 | int(11) | YES | | NULL | |

| int_5 | bigint(20) | YES | | NULL | |

| int_6 | tinyint(3) unsigned | YES | | NULL | |

+-------+---------------------+------+-----+---------+-------+

6 rows in set

mysql> INSERT INTO t_int VALUES(127, 10000, 100000, 100000, 1000000, 255); -- TINYINT無符號類型的取值范圍為0-255

Query OK, 1 row affected

mysql> SELECT * FROM t_int;

+-------+-------+--------+--------+---------+-------+

| int_1 | int_2 | int_3 | int_4 | int_5 | int_6 |

+-------+-------+--------+--------+---------+-------+

| 100 | 100 | 100 | 100 | 100 | NULL |

| 127 | 10000 | 100000 | 100000 | 1000000 | 255 |

+-------+-------+--------+--------+---------+-------+

2 rows in set

給字段加了無符號的限定后,數據插入成功了,在查看表結構的時候,發現每個字段的數據類型之后都會自帶一個括號,里面有指定的數字,這個數字表示數據最終顯示的位數,例如-123表示顯示4位(包括符號位),255表示顯示3位,實際上這個數字沒有什么特別的含義,只是默認告訴用戶可以顯示的寬度而已,并不會改變數據的大小。

mysql> ALTER TABLE t_int ADD COLUMN int_7 TINYINT(1) UNSIGNED; -- 顯示指定顯示寬度

Query OK, 2 rows affected

Records: 2 Duplicates: 0 Warnings: 0

mysql> INSERT INTO t_int VALUES(127, 10000, 100000, 100000, 1000000, 255, 255);

Query OK, 1 row affected

mysql> SELECT * FROM t_int;

+-------+-------+--------+--------+---------+-------+-------+

| int_1 | int_2 | int_3 | int_4 | int_5 | int_6 | int_7 |

+-------+-------+--------+--------+---------+-------+-------+

| 100 | 100 | 100 | 100 | 100 | NULL | NULL |

| 127 | 10000 | 100000 | 100000 | 1000000 | 255 | NULL |

| 127 | 10000 | 100000 | 100000 | 1000000 | 255 | 255 |

+-------+-------+--------+--------+---------+-------+-------+

3 rows in set

顯示寬度的意義在于當數據不夠顯示寬度的時候,可以使用ZEROFILL為數字列進行零填充,這時MySQL自動為該列添加UNSIGNED屬性

mysql> ALTER TABLE t_int ADD COLUMN int_8 TINYINT(2) UNSIGNED ZEROFILL;

Query OK, 3 rows affected

Records: 3 Duplicates: 0 Warnings: 0

mysql> INSERT INTO t_int VALUES(127, 10000, 100000, 100000, 1000000, 255, 255, 1);

Query OK, 1 row affected

mysql> SELECT * FROM t_int;

+-------+-------+--------+--------+---------+-------+-------+-------+

| int_1 | int_2 | int_3 | int_4 | int_5 | int_6 | int_7 | int_8 |

+-------+-------+--------+--------+---------+-------+-------+-------+

| 100 | 100 | 100 | 100 | 100 | NULL | NULL | NULL |

| 127 | 10000 | 100000 | 100000 | 1000000 | 255 | NULL | NULL |

| 127 | 10000 | 100000 | 100000 | 1000000 | 255 | 255 | NULL |

| 127 | 10000 | 100000 | 100000 | 1000000 | 255 | 255 | 01 |

+-------+-------+--------+--------+---------+-------+-------+-------+

4 rows in set

MySQL客戶端如Navicat中可能不能正確顯示零填充的效果,可以使用命令行窗口進行查看。

小數型

SQL中將小數型又分為浮點型和定點型兩種

浮點型:小數點浮動,精度有限,并且會丟失精度(會進行四舍五入),精度位數大概在7位

定點型:小數點固定,精度固定,不會丟失精度,精度位數大概在15位

浮點型

對于浮點列類型,在MySQL中單精度值使用4個字節,雙精度值使用8個字節。

FLOAT類型用于表示近似數值數據類型。SQL標準允許在關鍵字FLOAT后面的括號內選擇用位指定精度(但不能為指數范圍)。MySQL還支持可選的只用于確定存儲大小的精度規定0到23的精度對應FLOAT列的4字節單精度。24到53的精度對應DOUBLE列的8字節雙精度。

一個FLOAT類型的數字,允許的值為-3.402823466E+38至-1.175494351E-38,0,1.175494351E-38至3.402823466E+38,這些是基于IEEE標準的理論值,實際范圍根據硬件或操作系統可能會稍微小一些。

MySQL允許使用非標準語法:FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。這里,“(M,D)”表示該值一共顯示M位整數,其中D位位于小數點后面。例如,定義為FLOAT(7,4)的一個列可以顯示為-999.9999。MySQL保存值時進行四舍五入,因此如果在FLOAT(7,4)列內插入999.00009,近似結果是999.0001。

下面以FLOAT為例子,DOUBLE類似

mysql> CREATE TABLE t_float(

float_1FLOAT,

float_2 FLOAT(10, 2),

float_3 FLOAT(6, 2));

Query OK, 0 rows affected

mysql> DESC t_float;

+---------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+-------+

| float_1 | float | YES | | NULL | |

| float_2 | float(10,2) | YES | | NULL | |

| float_3 | float(6,2) | YES | | NULL | |

+---------+-------------+------+-----+---------+-------+

3 rows in set

mysql> INSERT INTO t_float VALUES (1000.10,1000.10,1000.10); -- 正常數據

Query OK, 1 row affected

mysql> INSERT INTO t_float VALUES (1234567890,12345678.90,1234.56); -- 正常數據

Query OK, 1 row affected

mysql> INSERT INTO t_float VALUES (3e38,3.01e7,1234.56); -- 可以用科學計數法表示

Query OK, 1 row affected

mysql> INSERT INTO t_float VALUES (9999999999,99999999.99,9999.99); -- 插入最大值,超過精度位數時系統會進行四舍五入

Query OK, 1 row affected

mysql> SELECT * FROM t_float;

+-------------+--------------+---------+

| float_1 | float_2 | float_3 |

+-------------+--------------+---------+

| 1000.1 | 1000.10 | 1000.10 |

| 1234570000 | 12345679.00 | 1234.56 |

| 3e38 | 30100000.00 | 1234.56 |

| 10000000000 | 100000000.00 | 9999.99 |

+-------------+--------------+---------+

4 rows in set

在插入浮點型數據的時候,整型部分是不能超出長度的,但是小數部分可以超出長度(系統會自動四舍五入)

mysql> INSERT INTO t_float VALUES (123456,1234.123456768,123.9876543); -- 小數部分超出,四舍五入

Query OK, 1 row affected

mysql> INSERT INTO t_float VALUES (123456,1234.12,12345.56);

1264 - Out of range value for column 'float_3' at row 1

mysql> SELECT * FROM t_float;

+-------------+--------------+---------+

| float_1 | float_2 | float_3 |

+-------------+--------------+---------+

| 1000.1 | 1000.10 | 1000.10 |

| 1234570000 | 12345679.00 | 1234.56 |

| 3e38 | 30100000.00 | 1234.56 |

| 10000000000 | 100000000.00 | 9999.99 |

| 123456 | 1234.12 | 123.99 |

+-------------+--------------+---------+

5 rows in set (0.00 sec)

超出精度范圍的浮點數,系統會自動進行四舍五入,如果因為系統進位導致整數部分超出指定的長度,這也是被允許的,例如上面的第4條記錄。

為了保證最大可能的可移植性,需要使用近似數值數據值存儲的代碼應使用FLOAT或DOUBLE PRECISION,不規定精度或位數。

定點型

DECIMAL和NUMERIC類型在MySQL中視為相同的類型。它們用于保存必須為確切精度的值,例如貨幣數據。當聲明該類型的列時,可以(并且通常要)指定精度和標度,如

salary DECIMAL(5,2)

在該例子中,5是精度,2是標度。精度表示保存值的主要位數,標度表示小數點后面可以保存的位數。

在標準SQL中,語法DECIMAL(M)等價于DECIMAL(M,0)。同樣,語法DECIMAL等價于DECIMAL(M,0),可以通過計算確定M的值。在MySQL中支持DECIMAL和NUMERIC數據類型的變量形式。M默認值是10。

DECIMAL或NUMERIC的最大位數是65,但具體的DECIMAL或NUMERIC列的實際范圍受具體列的精度或標度約束。

mysql> CREATE TABLE t_decimal (

float_1 FLOAT (10, 2),

decimal_1 DECIMAL (10, 2));

Query OK, 0 rows affected

mysql> INSERT INTO t_decimal VALUES (12345678.90,12345678.90); -- 正常數據

Query OK, 1 row affected

mysql> INSERT INTO t_decimal VALUES (1234.123456,1234.1234356); -- 小數部分四舍五入

Query OK, 1 row affected

mysql> INSERT INTO t_decimal VALUES (99999999.99,99999999.99); -- 最大值

Query OK, 1 row affected

mysql> INSERT INTO t_decimal VALUES (99999999.99,99999999.999); -- 進位超出指定位數,不允許

1264 - Out of range value for column 'decimal_1' at row 1

mysql> SELECT * FROM t_decimal;

+--------------+-------------+

| float_1 | decimal_1 |

+--------------+-------------+

| 12345679.00 | 12345678.90 |

| 1234.12 | 1234.12 |

| 100000000.00 | 99999999.99 |

+--------------+-------------+

3 rows in set (0.00 sec)

時間日期類型

表示時間值的DATE和時間類型為DATETIME、DATE、TIMESTAMP、TIME和YEAR。每個時間類型有一個有效值范圍和一個“零”值,當指定不合法的MySQL不能表示的值時使用“零”值。

c67256348747dde80dc38bde1c653a17.png

mysql> CREATE TABLE t_date (

id INT,

date_1 DATETIME,

date_2 TIMESTAMP,

date_3 DATE,

date_4 TIME,

date_5 YEAR);

Query OK, 0 rows affected

mysql> DESC t_date; -- timestamap不允許為空,有個默認值,為當前時間

+--------+-----------+------+-----+-------------------+-----------------------------+

| Field | Type | Null | Key | Default | Extra |

+--------+-----------+------+-----+-------------------+-----------------------------+

| id | int(11) | YES | | NULL | |

| date_1 | datetime | YES | | NULL | |

| date_2 | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |

| date_3 | date | YES | | NULL | |

| date_4 | time | YES | | NULL | |

| date_5 | year(4) | YES | | NULL | |

+--------+-----------+------+-----+-------------------+-----------------------------+

6 rows in set

mysql> INSERT INTO t_date VALUES(1, '2018-6-24 15:17:58', '2018-6-24 15:18:14', '2018-6-24', '15:18:27', '2018'); -- 正常數據

Query OK, 1 row affected

mysql> INSERT INTO t_date VALUES(2, '2018-6-24 15:17:58', NULL, '2018-6-24', '15:18:27', '2018'); -- timestamp為空NULL,會自動賦當前時間

Query OK, 1 row affected

mysql> SELECT * FROM t_date;

+----+---------------------+---------------------+------------+----------+--------+

| id | date_1 | date_2 | date_3 | date_4 | date_5 |

+----+---------------------+---------------------+------------+----------+--------+

| 1 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 2018 |

| 2 | 2018-06-24 15:17:58 | 2018-06-24 15:35:55 | 2018-06-24 | 15:18:27 | 2018 |

+----+---------------------+---------------------+------------+----------+--------+

2 rows in set

'YYYY-MM-DD HH:MM:SS'或'YY-MM-DD HH:MM:SS'格式的字符串。允許“不嚴格”語法:任何標點符都可以用做日期部分或時間部分之間的間割符。例如,'98-12-31 11:30:45'、'98.12.31 11+30+45'、'98/12/31 11*30*45'和'98@12@31 11^30^45'是等價的

'YYYY-MM-DD'或'YY-MM-DD'格式的字符串。這里也允許使用“不嚴格的”語法。例如,'98-12-31'、'98.12.31'、'98/12/31'和'98@12@31'是等價的。

'YYYYMMDD'或'YYMMDD'格式的沒有間割符的字符串,假定字符串對于日期類型是有意義的。例如,'19970523'和'970523'被解釋為 '1997-05-23',但'971332'是不合法的(它有一個沒有意義的月和日部分),將變為'0000-00-00'。

YYYYMMDDHHMMSS或YYMMDDHHMMSS格式的數字,假定數字對于日期類型是有意義的。例如,19830905132800和830905132800被解釋為 '1983-09-05 13:28:00'。

YYYYMMDD或YYMMDD格式的數字,假定數字對于日期類型是有意義的。例如,19830905和830905被解釋為'1983-09-05'。

mysql> INSERT INTO t_date VALUES(3, '2018@6@24 15^17^58', '2018#6#24 15+18+14', '2018/6/24', '15:18:27', '2018'); -- 用不同的標點符號做分隔符

Query OK, 1 row affected

mysql> SET sql_mode = ''; -- 設置非嚴格模式,只在該會話中有效

Query OK, 0 rows affected

mysql> SELECT @@sql_mode; -- 查看設置是否生效

+------------+

| @@sql_mode |

+------------+

| |

+------------+

1 row in set

mysql> INSERT INTO t_date VALUES(4, 20180624151758, 180624151814, 20181324, '15:18:27', '2018'); -- 插入20181324時會自動轉換為零值,前提是要設置非嚴格模式,否則報錯

Query OK, 1 row affected

mysql> SELECT * FROM t_date;

+----+---------------------+---------------------+------------+----------+--------+

| id | date_1 | date_2 | date_3 | date_4 | date_5 |

+----+---------------------+---------------------+------------+----------+--------+

| 1 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 2018 |

| 2 | 2018-06-24 15:17:58 | 2018-06-24 15:35:55 | 2018-06-24 | 15:18:27 | 2018 |

| 3 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 2018 |

| 4 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 0000-00-00 | 15:18:27 | 2018 |

+----+---------------------+---------------------+------------+----------+--------+

4 rows in set

YEAR類型可以用二位數,也可以用四位數表示

四位字符串,范圍為'1901'到'2155'。

四位數字,范圍為1901到2155。

兩位字符串,范圍為'00'到'99'。'00'到'69'和'70'到'99'范圍的值被轉換為2000到2069和1970到1999范圍的YEAR值。

兩位整數,范圍為1到99。1到69和70到99范圍的值被轉換為2001到2069和1970到1999范圍的YEAR值。請注意兩位整數范圍與兩位字符串范圍稍有不同,因為你不能直接將零指定為一個字符串'0'或'00'或它被解釋為0000。

mysql> INSERT INTO t_date VALUES(6, '2018-6-24 15:17:58', '2018-6-24 15:18:14', '2018-6-24', '15:18:27', 2100);

Query OK, 1 row affected

mysql> INSERT INTO t_date VALUES(7, '2018-6-24 15:17:58', '2018-6-24 15:18:14', '2018-6-24', '15:18:27', 2166); -- 超出范圍轉換為零值

Query OK, 1 row affected

mysql> INSERT INTO t_date VALUES(8, '2018-6-24 15:17:58', '2018-6-24 15:18:14', '2018-6-24', '15:18:27', '69');

Query OK, 1 row affected

mysql> INSERT INTO t_date VALUES(9, '2018-6-24 15:17:58', '2018-6-24 15:18:14', '2018-6-24', '15:18:27', '70');

Query OK, 1 row affected

mysql> SELECT * FROM t_date;

+------+---------------------+---------------------+------------+----------+--------+

| id | date_1 | date_2 | date_3 | date_4 | date_5 |

+------+---------------------+---------------------+------------+----------+--------+

| 1 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 2018 |

| 2 | 2018-06-24 15:17:58 | 2018-06-24 15:35:55 | 2018-06-24 | 15:18:27 | 2018 |

| 3 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 2018 |

| 4 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 0000-00-00 | 15:18:27 | 2018 |

| 6 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 2100 |

| 7 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 0000 |

| 8 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 2069 |

| 9 | 2018-06-24 15:17:58 | 2018-06-24 15:18:14 | 2018-06-24 | 15:18:27 | 1970 |

+------+---------------------+---------------------+------------+----------+--------+

8 rows in set (0.00 sec)

字符串類型

字符串類型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

CHAR與VARCHAR類型

CHAR表示定長,如CHAR(10)表示可以存儲10個字符,最大長度為255個字符,當保存CHAR值時,在它們的右邊填充空格以達到指定的長度。當檢索到CHAR值時,尾部的空格被刪除掉。在存儲或檢索過程中不進行大小寫轉換。

VARCHAR表示變長,如VARCHAR(10)表示可以存儲10個字符,最大長度為65535個字符(VARCHAR的最大有效長度由最大行大小和使用的字符集確定,實際最大長度為65532個字符),與CHAR不同的是,VARCHAR值保存時只保存需要的字符數,另加一個字節表示字符的長度(如果長度超過255,則使用兩個字節)。

VARCHAR值保存時不進行填充。當值保存和檢索時尾部的空格仍保留。

下面的表顯示了將各種字符串值保存到CHAR(4)和VARCHAR(4)列后的結果,說明了CHAR和VARCHAR之間的差別:

Dz8uWDiLuvqxAAAAAElFTkSuQmCC

請注意上表中最后一行的值只適用不使用嚴格模式時;如果MySQL運行在嚴格模式,超過列長度不的值不保存,并且會出現錯誤。

定長的磁盤空間比較浪費, 但是效率高

相反的,變長的磁盤空間比較節省, 但是效率低

BINARY與VARBINARY類型

BLOB與TEXT類型

通常超過255個字符的數據使用大文本進行存儲,根據存儲的數據格式分為BLOB與TEXT,BLOB用來存儲二進制數據(少用),TEXT用來存儲文字。

BLOB是一個二進制大對象,可以容納可變數量的數據。有4種BLOB類型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它們只是可容納值的最大長度不同。

有4種TEXT類型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。這些對應4種BLOB類型,有相同的最大長度和存儲需求。

ENUM類型

ENUM是一個字符串對象,其值來自表創建時在列規定中顯式枚舉的一列值,每個枚舉值有一個索引(NULL值的索引是NULL),從1開始編號

mysql> CREATE TABLE t_enum ( -- 創建枚舉表

gender ENUM('man', 'woman', 'unknow'));

Query OK, 0 rows affected

mysql> INSERT INTO t_enum VALUES ('man');

Query OK, 1 row affected

mysql> INSERT INTO t_enum VALUES ('woman');

Query OK, 1 row affected

mysql> INSERT INTO t_enum VALUES ('haha'); -- 不在枚舉定義的值里面,不允許插入,起到規范數據的作用

1265 - Data truncated for column 'gender' at row 1

如果在數值上下文中檢索一個ENUM值,將返回列值的索引。例如,你可以這樣從ENUM列搜索數值值:

mysql> SELECT gender + 0, gender FROM t_enum;

+------------+--------+

| gender + 0 | gender |

+------------+--------+

| 1 | man |

| 2 | woman |

+------------+--------+

2 rows in set

由于枚舉存儲的是數值,所以可以直接插入數值

mysql> INSERT INTO t_enum VALUES (1), (2); -- 直接插入數值

Query OK, 2 rows affected

Records: 2 Duplicates: 0 Warnings: 0

mysql> SELECT gender + 0, gender FROM t_enum;

+------------+--------+

| gender + 0 | gender |

+------------+--------+

| 1 | man |

| 2 | woman |

| 1 | man |

| 2 | woman |

+------------+--------+

4 rows in set

SET類型

集合跟枚舉很類似,實際存儲的是數值(SET最多可以有64個不同的成員),而不是字符串,可以把集合看成是多選框,枚舉看成是單選

mysql> CREATE TABLE t_set (

letter SET ('a', 'b', 'c', 'd'));

Query OK, 0 rows affected

mysql> INSERT INTO t_set VALUES ('a,b');

Query OK, 1 row affected

mysql> INSERT INTO t_set VALUES ('a,b,c');

Query OK, 1 row affected

MySQL用數字保存SET值,所保存值的低階位對應第1個SET成員。如果在數值上下文中檢索一個SET值,檢索的值的位設置對應組成列值的SET成員,例如,你可以這樣從一個SET列檢索數值值

mysql> SELECT letter + 0, letter FROM t_set;

+------------+--------+

| letter + 0 | letter |

+------------+--------+

| 3 | a,b |

| 7 | a,b,c |

+------------+--------+

2 rows in set

如果你為該列分配一個值9,其二進制形式為1001,因此第1個和第4個SET值成員'a'和'd'被選擇,結果值為 'a,d'。

對于包含多個SET元素的值,當插入值時元素所列的順序并不重要。在值中一個給定的元素列了多少次也不重要。當以后檢索該值時,值中的每個元素出現一次,根據表創建時指定的順序列出元素。例如,插入值'a,d'、'd,a'、'a,d,d'、'a,d,a'和'd,a,d'

mysql> INSERT INTO t_set VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');

Query OK, 5 rows affected

Records: 5 Duplicates: 0 Warnings: 0

mysql> SELECT letter + 0, letter FROM t_set; -- 檢索時所有的值將顯示為a,d

+------------+--------+

| letter + 0 | letter |

+------------+--------+

| 3 | a,b |

| 7 | a,b,c |

| 9 | a,d |

| 9 | a,d |

| 9 | a,d |

| 9 | a,d |

| 9 | a,d |

+------------+--------+

7 rows in set

通常情況,可以使用FIND_IN_SET()函數或LIKE操作符搜索SET值:

mysql> SELECT * FROM t_set WHERE FIND_IN_SET('a',letter) > 0; -- 表示找出t_set包含a的成員

+--------+

| letter |

+--------+

| a,b |

| a,b,c |

| a,d |

| a,d |

| a,d |

| a,d |

| a,d |

+--------+

7 rows in set

mysql> SELECT * FROM t_set WHERE letter LIKE '%a%'; -- 所有set中包含a的成員,甚至是在另一個SET成員的子字符串中

+--------+

| letter |

+--------+

| a,b |

| a,b,c |

| a,d |

| a,d |

| a,d |

| a,d |

| a,d |

+--------+

7 rows in set

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443613.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443613.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443613.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql alter table if_MySQL中的alter table命令的基本使用方法及提速優化

一、基本用法1. 增加列?1alter table tbl_nameadd col_name type例如, 給pet的表增加一列 weight,?1mysql>alter table petadd weightint;2. 刪除列?1alter table tbl_namedrop col_name例如, 刪除pet表中的weight這一列?1mysql>alter table petdrop weight;3. 改變…

mysql_real_escape_string 報錯_addslashes與mysql_real_escape_string的區別

addslashes和mysql_real_escape_string.都是為了使數據安全的插入到數據庫中而進行過濾.那么這兩個函數到底是有什么區別呢??我們今天來簡單的看下..首先.我們還是從PHP手冊入手..手冊上addslashes轉義的字符是單引號()、雙引號(")、反斜線(\)與NUL(NULL 字符)。mysql_r…

shell執行perl_【編程技巧(一)】在Perl、Shell和Python中傳參與輸出幫助文檔

社會你明哥,人狠話又多!【小明的碎碎念】與你不見不散!作為一名搞數據的生物狗,咱們是生物狗中代碼寫得最六的,程序員中生物學得最好的——大家沒意見吧,有意見請憋著跟隨小明的步伐,讓我們開開…

項目開發中的編碼規范

1.規范存在的意義: 好的編碼規范可以盡可能的減少一個軟件的維護成本 , 并且幾乎沒有任何一個軟件,在其整個生命周期中,均由最初的開發人員來維護; 好的編碼規范可以改善軟件的可讀性,可以讓開發人員盡快而徹底地理解…

mysql 5.6.36安裝圖解_2017年12月聚合文章--實戰-Mysql5.6.36腳本編譯安裝及初始化 | 碼友網...

概述本文為centos7.3自動化編譯安裝mysql5.3.6的腳本及后續初始化操作,話不多少,直接上腳本。安裝腳本install.py如下:#codingutf-8#!/usr/bin/pythonimport os,commands#定義變量install_dir /data/mysqldata_dir /data/mysql/datapackage…

python之路2.0_Python之路【第二十一篇】:JS基礎

1.2 ECMAScript盡管 ECMAScript 是一個重要的標準,但它并不是 JavaScript 唯一的部分,當然,也不是唯一被標準化的部分。實際上,一個完整的 JavaScript 實現是由以下 3 個不同部分組成的:● 核心(ECMAScript)● 文檔對象…

solr4 mysql自動更新_(solr系列:五) solr定時實時重建索引和增量更新

將mysql中的數據導入到了solr中之后,如果數據庫中的數據有變動,solr中還是第一次導入的舊的數據,那該如何是好呢?該如何實現mysql數據庫中的數據定時同步到solr中呢?下面將做詳細的介紹。準備工作要做好:1、…

mysql pydev_pydev-python 鏈接mysql數據庫(mac系統)

在mac os上安裝MySQLdb,遇到了非常多問題,總結一下:首先。假設用sudo easy_install mysql-python命令安裝,基本上不會成功的,原因有兩個:一是找不到mysql_config位置,二是如今基本上安裝的是64位…

MySQL多個線程同時寫數據_多個線程可以同時將數據寫入文件嗎?

同步聲明可以做到這一點。嘗試下面的代碼,我在類似的情況下使用。package hrblib;import java.io.*;public class FileOp {static int nStatsCount 0;static public String getContents(String sFileName) {try {BufferedReader oReader new BufferedReader(new F…

Java在Linux下創建文件,文件夾,刪除,拷貝文件的命令

1.創建,刪除文件夾,復制文件夾 mkdir,rmdir如:mkdir -p dir1/dir2 //-p表示遞歸創建文件夾 cp -r /tmp/a /root/a //拷貝不強制覆蓋cp -rf /tmp/a /root/a //拷貝強制覆蓋 2.創建,刪除文件 vi,touch都可以創建文件。如:vi fileNametouch f…

python 拼多多_拼多多現重大BUG被“薅羊毛”,教你如何用Python簡單褥羊毛

import timefrom urllib.parse import parse_qsimport requestsfrom bs4 import BeautifulSoupfrom selenium import webdriverfrom selenium.common.exceptions import *from selenium.webdriver.support.wait import WebDriverWait# 額外抽取的授權模塊from utils import aut…

上海交通大學python期末考試樣題加解析_上海交通大學python期末考試樣題加解析...

一、選擇題: 將唯一正確的選項寫在題前括號中.每題2分.【】(1) 本課程的目標定位是什么?[A] 學習Python語言[B] 學習計算機的工作原理[C] 學習各種算法[D] 學習用計算機解決問題【】(2) 下列哪個標識符是合法的?[A] var-name [B] !#$% [C] _100 [D] elif【】(3) 執行下列語句…

mysql 安裝測試ok_tpcc-mysql安裝測試與使用的實例教程

1:下載tpcc-mysql的壓縮包,從下面的網站進行下載也可直接從葉總博客直接下載:我這邊使用的就是后者。2:安裝tpcc-mysql[rootmxqmongodb2 tpccmysql]# gunzip tpcc-mysql-src.tgz[rootmxqmongodb2 tpccmysql]# tar xf tpcc-mysql-s…

python多線程寫同一文件_Python多線程寫文件實例

# -*- coding: utf-8 -*-import threading多線程生成日志工具__author ["yangfei" ]#該方法主要用于寫入300行WARN日志def writeWarnLog(file):count0;while count<300:try:file.write(2012-11-28 22:51:01|zookeeper|WARN|m1|172.17.1.15\n)count1except Except…

Tomcat6.0.37,tomcat6.0.37,下訪問Web項目,jsp項目不需要輸入項目名稱和端口號的配置方法...

1.不需要數據項目名稱就可以訪問項目的配置方法如下&#xff1a; 首先到你的Tomcat下的conf文件夾下找到server.xml文件&#xff0c;打開后修改為&#xff1a; <Host name"localhost" appBase"webapps"unpackWARs"true" autoDeploy"tru…

java合并list_java合并list方法代碼實例

這篇文章主要介紹了java合并list方法代碼實例,文中通過示例代碼介紹的非常詳細&#xff0c;對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下List包括List接口以及List接口的所有實現類。因為List接口實現了Collection接口&#xff0c;所以List接口擁有Collec…

java math 函數_Java中Math類常用函數總結

Java中比較常用的幾個數學公式的總結&#xff1a;//取整&#xff0c;返回小于目標函數的最大整數,如下將會返回-2Math.floor(-1.8)&#xff1b;//取整&#xff0c;返回發育目標數的最小整數Math.ceil()//四舍五入取整Math.round()//計算平方根Math.sqrt()//計算立方根Math.cbrt…

java asc碼_Java中ASC碼與字符互相轉化

package com.ljq.test;/*** Java中ASC碼與字符互相轉化** author jiqinlin**/public class ASCTest {private static int ascNum;private static char strChar;public static void main(String[] args) {System.out.println(getAsc("a"));System.out.println(backcha…

java上傳png_java上傳png圖片出現紅色背景

java圖片上傳出現紅色背景java圖片服務器上傳圖片都很正常&#xff0c;唯獨上傳png圖片時&#xff0c;png圖片變成紅色背景原因是讀取上傳數據時用的是ImageIO.read(inputstream)方法public static BufferedImage getImages(byte[] data) throws IOException {ByteArrayInputSt…

java 引用隊列_Java中管理資源的引用隊列相關原理解析

當對象改變其可達性狀態時&#xff0c;對該對象的引用就可能會被置于引用隊列(reference queue)中。這些隊列被垃圾回收器用來與我們的代碼溝通有關對象可達性變化的情況。這些隊列是探測可達性變化的最佳方式&#xff0c;盡管我們也可以通過檢查get方法的返回值是不是null來探…