數據庫表由多列字段構成,每一個字段指定了不同的數據類型.指定字段的數據類型之后,也就決定了向字段插入的數據內容,例如,當要插入數值的時候,可以將它們存儲為整數類型,也可以將它們存儲為字符串類型.不同的數據類型也決定了MySQL在存儲它們的時候使用的方式,以及在使用它們的時候選擇什么運算符號進行運算,下面的小結內容將介紹,常用的數據類型,和常用的運算符,在最后再看即可常用的MySQL系統函數的使用.
MySQL支持多種數據類型,主要分為幾大類,包括:數值類型,日期時間類型,和字符串類型等.
數值類型(int):包括TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT
數值類型(float):包括FLOAT,DOUBLE,DECIMAL
日期時間型(time):包括YEAR,TIME,DATE,DATETIME,TIMESTAMP
字符串類型(string):包括CHAR,VARCHAR,BINARY,VARBINARY,BLOB,TEXT,ENUM,SET
MariaDB 數據類型
◆整數數據類型◆
數值型類型主要用來存儲數字,MySQL提供了多種數值數據類型,不同的數據類型提供不同的取值范圍,可以存儲的值范圍越大,其所需要的存儲空間也會越大,MySQL主要提供的整形有:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT,整數類型的屬性字段可以添加AUTO_INCREMENT自增長約束條件,如下表所示:
| 類型名稱 | 說明信息 | 存儲占比 |
|---|---|---|
| TINYINT | 很小的整數 | 1個字節 |
| SMALLINT | 小的整數 | 2個字節 |
| MEDIUMINT | 中等大小整數 | 3個字節 |
| INT | 普通大小整數 | 4個字節 |
| BIGINT | 大整數 | 8個字節 |
上表可看出,不同類型的數據字節是不同的,整數類型的取值范圍也是固定的,基本上分為有符號和無符號型,下表就是他們的相應取值范圍,僅供參考:
| 數據類型 | 有符號 | 無符號 |
|---|---|---|
| TINYINT | -128-127 | 0-255 |
| SMALLINT | 32768-32767 | 0-65535 |
| MEDIUMINT | -8388608-8388607 | 0-16777215 |
| INT | -2147483648-2147483647 | 0-4294967295 |
| BIGINT | 這個范圍不多說,(大) | 0-無法形容的大 |
實例1: 創建一個整數類型的表.
MariaDB [lyshark]> create table myint
-> (
-> uid int(10),
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.00 sec)
以上是uid就是一個整數類型的字段,注意后面的(10)意思是指定能夠顯示的數值中數字的個數.
實例2: 分別創建整形的數據類型字段看看.
MariaDB [lyshark]> create table temp
-> (
-> a tinyint,
-> b smallint,
-> c mediumint,
-> d int,
-> e bigint
-> );
Query OK, 0 rows affected (0.00 sec)
MariaDB [lyshark]> desc temp;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| a | tinyint(4) | YES | | NULL | |
| b | smallint(6) | YES | | NULL | |
| c | mediumint(9) | YES | | NULL | |
| d | int(11) | YES | | NULL | |
| e | bigint(20) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
◆浮點數和定點數◆
在MySQL中浮點數和定點數都是用來表示小數的,浮點數類型有兩種:單精度浮點數(FLOAT)和雙精度浮點數(DOUBLE),定點類型的話只有一種(DECIMAL),下表是這幾個數值的說明信息:
| 類型名稱 | 說明信息 | 存儲占比 |
|---|---|---|
| FLOAT | 單精度浮點數 | 4個字節 |
| DOUBLE | 雙精度浮點數 | 8個字節 |
| DECIMAL | 壓縮的定點數 | M+2個字節 |
實例: 創建temp表,其中字段x,y,z數據類型分別是 float(5.1) double(5.1) decimal(5.1)並向表中插入一些數據.
MariaDB [lyshark]> create table temp
-> (
-> x float(5,1),
-> y double(5,1),
-> z decimal(5,1)
-> );
Query OK, 0 rows affected (0.00 sec)
向表中插入數據,並查看結果,MySQL默認自動截斷小數點后面的數據,具體截斷位數由計算機硬件和操作系統決定.
MariaDB [lyshark]> insert into temp values(5.12,5.22,5.123);
Query OK, 1 row affected, 1 warning (0.01 sec)
MariaDB [lyshark]> select * from temp1;
+------+------+------+
| x | y | z |
+------+------+------+
| 5.1 | 5.2 | 5.1 |
+------+------+------+
1 row in set (0.00 sec)
MariaDB [lyshark]>
◆日期與時間類型◆
MySQL中有多種表示日期的數據類型,主要有LDATETIME、DATE、TIME和YEAR.例如,當只記錄年信息的時候,可以只使用 YEAR類型而沒有必要使用DATE,每一個類型都有合法的取值范圍,當指定確實不合法的值時系統將"0"值插入到數據庫中,下面先來看一下他的類型說明吧:
| 類型名稱 | 日期格式 | 日期范圍 | 存儲需求 |
|---|---|---|---|
| YEAR | YYYY | 1901-2155 | 1字節 |
| TIME | HH:MM:SS | -838:59:59-838:59:59 | 3字節 |
| DATE | YYYY-MM-DD | 1000-01-01-9999-12-3 | 3字節 |
| DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00-9999:12-31 23:59:59 | 8字節 |
| TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01 UTC-2038-01-19 03:14:07 UTC | 4字節 |
YEAR類型: 主要用於存儲一個年份,例如:1997 2018
1.創建temp表,定義數據類型為year的字段x,並向表中插入數據.
MariaDB [lyshark]> create table temp(x year); #創建一個year類型的字段
Query OK, 0 rows affected (0.00 sec)
MariaDB [lyshark]> desc temp;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| x | year(4) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (0.01 sec)
MariaDB [lyshark]> insert into temp values(2018),("2020"); #插入一些數據:注意必須是1901-2155之間的數
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
MariaDB [lyshark]> select * from temp;
+------+
| x |
+------+
| 2018 |
| 2020 |
+------+
2 rows in set (0.00 sec)
TIME類型:主要用於存儲時間,例如:12:12:21
1.創建temp1表,定義數據類型為time的字段x,並向表中插入數據.
MariaDB [lyshark]> create table temp1( #創建一個time類型的字段
-> x time
-> );
Query OK, 0 rows affected (0.01 sec)
MariaDB [lyshark]> desc temp1;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| x | time | YES | | NULL | |
+-------+------+------+-----+---------+-------+
1 row in set (0.00 sec)
MariaDB [lyshark]> insert into temp1 values('11:22:05'),('23:23'),('20'); #分別插入數據:注意(%HH-%MM-%SS)
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
MariaDB [lyshark]> select * from temp1;
+----------+
| x |
+----------+
| 11:22:05 |
| 23:23:00 |
| 00:00:20 |
+----------+
3 rows in set (0.00 sec)
2.當然啦我們可以簡寫省略冒號.
MariaDB [lyshark]> create table temp1(x time);
Query OK, 0 rows affected (0.01 sec)
MariaDB [lyshark]> insert into temp1 values('102231');
Query OK, 1 row affected (0.00 sec)
MariaDB [lyshark]> select * from temp1;
+----------+
| x |
+----------+
| 10:22:31 |
+----------+
1 row in set (0.00 sec)
3.向temp表中的x字段插入當前系統運行時間,通過函數(CURRENT_TIME),(NOW()取出.
MariaDB [lyshark]> select * from temp;
Empty set (0.00 sec)
MariaDB [lyshark]> insert into temp values (CURRENT_TIME),(NOW());
Query OK, 2 rows affected, 1 warning (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 1
MariaDB [lyshark]> select * from temp;
+----------+
| x |
+----------+
| 21:27:43 |
| 21:27:43 |
+----------+
2 rows in set (0.00 sec)
DATE類型:Date類型主要用於存儲年月日,例如:1997-10-05
1.創建temp表,表中是date類型的x字段,並插入一條數據.
MariaDB [lyshark]> create table temp(x date); #創建一個date類型的字段
Query OK, 0 rows affected (0.00 sec)
MariaDB [lyshark]> desc temp;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| x | date | YES | | NULL | |
+-------+------+------+-----+---------+-------+
1 row in set (0.00 sec)
MariaDB [lyshark]> insert into temp values('1997-10-05'),('20180523'); #插入一些數據
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
MariaDB [lyshark]> select * from temp;
+------------+
| x |
+------------+
| 1997-10-05 |
| 2018-05-23 |
+------------+
2 rows in set (0.00 sec)
2.向temp表中插入系統當前日期,通過函數(CURRENT_DATE()),(NOW())取出系統日期.
MariaDB [lyshark]> select * from temp;
+------------+
| x |
+------------+
| 1997-10-05 |
| 2018-05-23 |
+------------+
2 rows in set (0.00 sec)
MariaDB [lyshark]> insert into temp values(CURRENT_DATE()),(NOW()); #取出系統當前日期並插入
Query OK, 2 rows affected, 1 warning (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 1
MariaDB [lyshark]> select * from temp;
+------------+
| x |
+------------+
| 1997-10-05 |
| 2018-05-23 |
| 2018-06-16 |
| 2018-06-16 |
+------------+
4 rows in set (0.00 sec)
DATATIME:DateTime類型用於存儲日期和時間,例如:2018-01-24 22:12:24
1.創建temp表dt字段類型為datetime,並插入一條數據.
MariaDB [lyshark]> create table temp(dt datetime);
Query OK, 0 rows affected (0.00 sec)
MariaDB [lyshark]> desc temp;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| dt | datetime | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
1 row in set (0.00 sec)
MariaDB [lyshark]> insert into temp values('1997-05-10 10:22:14'),('20180616220101'); #插入日期時間
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
MariaDB [lyshark]> select * from temp;
+---------------------+
| dt |
+---------------------+
| 1997-05-10 10:22:14 |
| 2018-06-16 22:01:01 |
+---------------------+
2 rows in set (0.00 sec)
2.取系統當前日期並插入temp表的dt字段.
MariaDB [lyshark]> select * from temp;
+---------------------+
| dt |
+---------------------+
| 1997-05-10 10:22:14 |
| 2018-06-16 22:01:01 |
+---------------------+
2 rows in set (0.00 sec)
MariaDB [lyshark]> insert into temp values(now()); #取系統日期插入temp表的dt字段
Query OK, 1 row affected (0.00 sec)
MariaDB [lyshark]> select * from temp;
+---------------------+
| dt |
+---------------------+
| 1997-05-10 10:22:14 |
| 2018-06-16 22:01:01 |
| 2018-06-16 22:03:39 |
+---------------------+
3 rows in set (0.00 sec)
MariaDB [lyshark]>
TIMESTAMP類型:TimeStamp與DateTime相同,但是TimeStamp是使用的UTC(世界標准時間)
1.創建temp表並插入timestamp類型的x字段,插入一條數據.
MariaDB [lyshark]> create table temp(x timestamp); #創建一個timestamp類型的字段
Query OK, 0 rows affected (0.00 sec)
MariaDB [lyshark]> desc temp;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+-------------------+-----------------------------+
| x | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+-------------------+-----------------------------+
1 row in set (0.00 sec)
MariaDB [lyshark]> insert into temp values('2018-06-16 22:24:00'); #插入一條時間記錄
Query OK, 1 row affected (0.01 sec)
MariaDB [lyshark]> select *from temp;
+---------------------+
| x |
+---------------------+
| 2018-06-16 22:24:00 |
+---------------------+
1 row in set (0.00 sec)
MariaDB [lyshark]> set time_zone='+12:00' #將時間上調12小時
-> ;
Query OK, 0 rows affected (0.00 sec)
MariaDB [lyshark]> select * from temp; #再次查詢已經是第二天了
+---------------------+
| x |
+---------------------+
| 2018-06-17 02:24:00 |
+---------------------+
1 row in set (0.00 sec)
◆文本字符串類型◆
字符串類型用來存儲字符串數據,除了可以存儲字符串數據之外,還可以存儲其他數據,比如圖片和聲音的二進制數據.MySQL支持兩類字符型數據:文本字符串和二進制字符串,本小節主要介紹文本字符串類型,文本字符串可以進行區分或者不區分大小寫的串比較,另外還可以進行模式匹配查找.MysQL中文本字符串類型指CHAR,VARCHAR,TEXT,ENUM和SET,如下表所示.
| 類型名稱 | 說明信息 | 存儲需求 |
|---|---|---|
| CHAR | 固定長度非二進制字符串 | M字節,1<=M<=255 |
| VARCHAR | 變長非二進制字符串 | L+1字節 |
| TIMYTEXT | 非常小的非二進制字符串 | L+1字節 |
| TEXT | 小的非二進制字符串 | L+2字節 |
| MEDIUMTEXT | 中等非二進制字符串 | L+3字節 |
| LONGTEXT | 大的非二進制字符串 | L+4字節 |
| ENUM | 枚舉類型 | l或2個字節 |
| SET | SET成員類型 | 1,2,3,4或8個字節 |
CHAR和VARCHAR:定長和不定長字符串類型
CHAR和VARCHAR的長度區別:
● CHAR是一種定長字符串,它的長度在初始化時就被固定比如說:char(10)則固定分配10個字符的長度,如果使用了CHAR類型,不論你的數據填充多少都會消耗4字節存儲空間.
● VARCHAR是一種不定長字符串,它的長度取決於你輸入的字符數,使用VARCHAR的話,它會動態的分配空間大小,但最大也不能超過定義的長度
1.定義一個temp表,里面有兩個字段分別是ch,vch類型是char(4)和varchar(4)插入數據查看區別.
MariaDB [lyshark]> create table temp
-> (
-> ch char(4),
-> vch varchar(4)
-> );
Query OK, 0 rows affected (0.00 sec)
MariaDB [lyshark]> desc temp;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| ch | char(4) | YES | | NULL | |
| vch | varchar(4) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
MariaDB [lyshark]> insert into temp values('xy ','xy ');
Query OK, 1 row affected (0.01 sec)
MariaDB [lyshark]> select *from temp;
+------+------+
| ch | vch |
+------+------+
| xy | xy |
+------+------+
1 row in set (0.00 sec)
TEXT類型:用於保存非二進制字符串,如文章內容評論內容等,當保存或查詢text列的值時,不刪除尾部空格.
關於TEXT類型的取值范圍:
● TINYTEXT 最大長度為
255(2^8-1)字符的TEXT列.
● TEXT 最大長度為65535(2^16-1)字符的TEXT列.
● MEDIUMTEXT 最大長度為16777215(2^24-1)字符的TEXT列.
● LONGTEXT 最大長度為4294967295字符的TEXT列.
1.創建一個表temp1,並創建text字段,寫入一段話看看.
MariaDB [lyshark]> create table temp1(x text);
Query OK, 0 rows affected (0.02 sec)
MariaDB [lyshark]> desc temp1;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| x | text | YES | | NULL | |
+-------+------+------+-----+---------+-------+
1 row in set (0.00 sec)
MariaDB [lyshark]> insert into temp1 values('hello lyshark')
-> ;
Query OK, 1 row affected (0.00 sec)
MariaDB [lyshark]> select * from temp1;
+---------------+
| x |
+---------------+
| hello lyshark |
+---------------+
1 row in set (0.00 sec)
ENUM枚舉類型:enum的值根據列索引順序排列,並且空字符串排在非空字符串前,NULL值排在其他所有的枚舉值前面
1.來看一個枚舉的小例子,注意:枚舉默認標號從1開始.
MariaDB [lyshark]> create table temp2(enm enum('first','second','thire'));
Query OK, 0 rows affected (0.00 sec)
MariaDB [lyshark]> desc temp2;
+-------+--------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------------------------+------+-----+---------+-------+
| enm | enum('first','second','thire') | YES | | NULL | |
+-------+--------------------------------+------+-----+---------+-------+
1 row in set (0.00 sec)
MariaDB [lyshark]> insert into temp2 values('1'),('2'),('3'),(NULL);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
MariaDB [lyshark]> select * from temp2;
+--------+
| enm |
+--------+
| first |
| second |
| thire |
| NULL |
+--------+
4 rows in set (0.00 sec)
MariaDB [lyshark]>
set集合:但在聲明成集合時,其取值就已經固定了
MariaDB [lyshark]> create table temp3(s set('a','b','c','d')); #首先定義了一個集合,元素有abcd
Query OK, 0 rows affected (0.01 sec)
MariaDB [lyshark]> desc temp3;
+-------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------------------+------+-----+---------+-------+
| s | set('a','b','c','d') | YES | | NULL | |
+-------+----------------------+------+-----+---------+-------+
1 row in set (0.00 sec)
MariaDB [lyshark]>
MariaDB [lyshark]> insert into temp3 values('a'),('a,b,c'),('a,b,c,d'); #分別插入3個不同的集合,看看
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
MariaDB [lyshark]> select * from temp3;
+---------+
| s |
+---------+
| a |
| a,b,c |
| a,b,c,d |
+---------+
3 rows in set (0.00 sec)
MariaDB [lyshark]> insert into temp3 values('a,'f''); #在插入f時報錯,因為集合中定義是沒有f
ERROR 1064 (42000): You have an error in your SQL syntax;
◆二進制字串類型◆
在MySQL中的二進制數據類型有:BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB,LONGBLOB,老樣子,看下面的表格,就清晰啦.
| 類型名稱 | 說明信息 | 存儲需求 |
|---|---|---|
| BIT | 位字段類型 | (M+7/8)個字節 |
| BINARY | 固定長度二進制字符串 | M個字節 |
| VARBINARY | 可變長二進制字符串 | M+1字節 |
| TINYBLOB | 非常小的BLOB | L+1字節 |
| BLOB | 小BLOB | L+2字節 |
| MEDIUMBLOB | 中等大小的BLOB | L+3字節 |
| LONGBLOB | 非常大的BLOB | L+4字節 |
bit類型:位字段類型,也就是說插入的數據會被轉換成101011011這樣的格式
1.定義並插入數據測試,x+0表示將二進制結果轉換為對應的數字的值,bin()函數將數字轉換為2進制.
MariaDB [lyshark]> create table temp5(x bit(4));
Query OK, 0 rows affected (0.00 sec)
MariaDB [lyshark]> desc temp5;
+-------+--------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------+------+-----+---------+-------+
| x | bit(4) | YES | | NULL | |
+-------+--------+------+-----+---------+-------+
1 row in set (0.00 sec)
MariaDB [lyshark]> insert into temp5 values(100),(115),(10);
Query OK, 3 rows affected, 2 warnings (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 2
MariaDB [lyshark]> select BIN(x+0) from temp5;
+----------+
| BIN(x+0) |
+----------+
| 1111 |
| 1111 |
| 1010 |
+----------+
3 rows in set (0.00 sec)
BINARY和VARBINARY類型: 定長與不定長二進制字符串類型.
1.binary類型是一個定長,二進制字節字符串類型,在字段不足制定字節是會自動在后面填\0.
2.varbinary類型是一個可變長,二進制字節字符串類型,而vb字段不會填充.
創建一個temp10,分別有兩個字段b,vb類型分別是binary(3)和varbinary(30)
MariaDB [lyshark]> create table temp10(
-> b binary(3),
-> vb varbinary(30)
-> );
Query OK, 0 rows affected (0.00 sec)
MariaDB [lyshark]> desc temp10;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| b | binary(3) | YES | | NULL | |
| vb | varbinary(30) | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
MariaDB [lyshark]> insert into temp10 values(5,5);
Query OK, 1 row affected (0.01 sec)
MariaDB [lyshark]> select length(b),length(vb) from temp10; #可以看到b占用3字節,而vb是只占用1字節
+-----------+------------+
| length(b) | length(vb) |
+-----------+------------+
| 3 | 1 |
+-----------+------------+
1 row in set (0.00 sec)
## MariaDB 運算符類型
運算符鏈接表達式中各個操作數,其作用是用來指明對操作數所進行的運算,運用運算符可以更加靈活的使用表中的數據,常見的運算符有:算術運算,比較運算,邏輯運算,位運算等,下面我們將依次介紹這幾種運算符的運用.
◆算術運算符◆
| 運算符 | 作用 |
|---|---|
| + | 加法運算 |
| - | 減法運算 |
| * | 乘法運算 |
| / | 除法運算 |
| % | 求余運算 |
加法運算(+)
MariaDB [lyshark]> select * from temp;
+------+
| num |
+------+
| 100 |
+------+
1 row in set (0.00 sec)
MariaDB [lyshark]> select num,num+10 from temp;
+------+--------+
| num | num+10 |
+------+--------+
| 100 | 110 |
+------+--------+
1 row in set (0.00 sec)
減法運算(-)
MariaDB [lyshark]> select * from temp;
+------+
| num |
+------+
| 100 |
+------+
1 row in set (0.01 sec)
MariaDB [lyshark]> select num,num-10 from temp;
+------+--------+
| num | num-10 |
+------+--------+
| 100 | 90 |
+------+--------+
1 row in set (0.00 sec)
乘法運算(*)
MariaDB [lyshark]> select * from temp;
+------+
| num |
+------+
| 100 |
+------+
1 row in set (0.00 sec)
MariaDB [lyshark]> select num,num*10 from temp;
+------+--------+
| num | num*10 |
+------+--------+
| 100 | 1000 |
+------+--------+
1 row in set (0.00 sec)
除法運算(/)
MariaDB [lyshark]> select * from temp;
+------+
| num |
+------+
| 100 |
+------+
1 row in set (0.00 sec)
MariaDB [lyshark]> select num,num/10 from temp;
+------+---------+
| num | num/10 |
+------+---------+
| 100 | 10.0000 |
+------+---------+
1 row in set (0.00 sec)
取余數運算(%)
MariaDB [lyshark]> select * from temp;
+------+
| num |
+------+
| 100 |
+------+
1 row in set (0.00 sec)
MariaDB [lyshark]> select num,num%10 from temp;
+------+--------+
| num | num%10 |
+------+--------+
| 100 | 0 |
+------+--------+
1 row in set (0.00 sec)
◆比較運算符◆
| 運算符 | 作用 |
|---|---|
| = | 等於 |
| <=> | 安全的等於 |
| <>(!=) | 不等於 |
| <= | 小於等於 |
| >= | 大於等於 |
| > | 大於 |
| IS NULL | 判斷一個值是否為NULL |
| IS NOT NULL | 判斷一個值是否不為NULL |
| LEAST | 在有兩個或多個參數時,返回最小值 |
| GREATEST | 當有兩個或多個參數時,返回最大值 |
| BETWEEN AND | 判斷一個值是否落在兩個值之間 |
| ISNULL | 與IS NULL作用相同 |
| IN | 判斷一個值是IN列表中的任意一個值 |
| NOT IN | 判斷一個值不是IN列表中的任意一個值 |
| LIKE | 通配符匹配 |
| REGEXP | 正則表達式匹配 |
等於運算符(=): 使用等於運算符進行相等判斷
MariaDB [lyshark]> select 1=1 , 1=0 , '1'=1 , '0.01'=0 , 'a'='a' , (1+1)=(2+2) , NULL=NULL;
+-----+-----+-------+----------+---------+-------------+-----------+
| 1=1 | 1=0 | '1'=1 | '0.01'=0 | 'a'='a' | (1+1)=(2+2) | NULL=NULL |
+-----+-----+-------+----------+---------+-------------+-----------+
| 1 | 0 | 1 | 0 | 1 | 0 | NULL |
+-----+-----+-------+----------+---------+-------------+-----------+
1 row in set (0.00 sec)
全等於(<=>): 這個運算符和=功能相同,但是全等於可以用來判斷NULL值,而等於是不能的
MariaDB [lyshark]> select 1<=>0 , 1<=>1 , '1'<=>1 , '0.01' <=> 0 , 'a' <=> 'a' , (10+10)<=>(20+20) , NULL<=>NULL ;
+-------+-------+---------+--------------+-------------+-------------------+-------------+
| 1<=>0 | 1<=>1 | '1'<=>1 | '0.01' <=> 0 | 'a' <=> 'a' | (10+10)<=>(20+20) | NULL<=>NULL |
+-------+-------+---------+--------------+-------------+-------------------+-------------+
| 0 | 1 | 1 | 0 | 1 | 0 | 1 |
+-------+-------+---------+--------------+-------------+-------------------+-------------+
row in set (0.00 sec)
不等於(<>或!=): 倆數不相等返回1,相等返回0
MariaDB [lyshark]> select 'lyshark' != 'admin' , 1!=2 , 1 <> 1 , (10+10)<>(10+10) , NULL!=NULL;
+----------------------+------+--------+------------------+------------+
| 'lyshark' != 'admin' | 1!=2 | 1 <> 1 | (10+10)<>(10+10) | NULL!=NULL |
+----------------------+------+--------+------------------+------------+
| 1 | 1 | 0 | 0 | NULL |
+----------------------+------+--------+------------------+------------+
1 row in set (0.00 sec)
小於運算符(<): 兩數相比較,左邊小於右邊返回1,否則返回0
MariaDB [lyshark]> select 'xxx' < 'xxxx' , 1<2 , 1<1 , 5.5<5 , (1+1)<(10-10) , NULL <NULL ;
+----------------+-----+-----+-------+---------------+------------+
| 'xxx' < 'xxxx' | 1<2 | 1<1 | 5.5<5 | (1+1)<(10-10) | NULL <NULL |
+----------------+-----+-----+-------+---------------+------------+
| 1 | 1 | 0 | 0 | 0 | NULL |
+----------------+-----+-----+-------+---------------+------------+
1 row in set (0.00 sec)
小於等於(<=): 兩數相比較,左邊小於或者等於右邊返回1,否則返回0
MariaDB [lyshark]> select 'xxxx' <= 'xxxx' , 1<=1 , 1<=2 , 5.5<=5 , NULL<=NULL;
+------------------+------+------+--------+------------+
| 'xxxx' <= 'xxxx' | 1<=1 | 1<=2 | 5.5<=5 | NULL<=NULL |
+------------------+------+------+--------+------------+
| 1 | 1 | 1 | 0 | NULL |
+------------------+------+------+--------+------------+
1 row in set (0.00 sec)
大於運算符(>): 兩數相比較,左邊大於右邊返回1,否則返回0
MariaDB [lyshark]> select 'xxxx' > 'xxx' , 5>1 , 10>10 , NULL > NULL;
+----------------+-----+-------+-------------+
| 'xxxx' > 'xxx' | 5>1 | 10>10 | NULL > NULL |
+----------------+-----+-------+-------------+
| 1 | 1 | 0 | NULL |
+----------------+-----+-------+-------------+
1 row in set (0.00 sec)
大於等於(>=): 兩數相比較,左邊大於或者等於右邊返回1,否則返回0
MariaDB [lyshark]> select 'xxxx' >= 'xxxx' , 1>=1 , 1>=10 , NULL>=NULL;
+------------------+------+-------+------------+
| 'xxxx' >= 'xxxx' | 1>=1 | 1>=10 | NULL>=NULL |
+------------------+------+-------+------------+
| 1 | 1 | 0 | NULL |
+------------------+------+-------+------------+
1 row in set (0.00 sec)
IS NULL運算符(ISNULL)和IS NOT NULL運算符(ISNOTNULL): is null如果為NULL返回1否則返回0,而is not null則相反.
MariaDB [lyshark]> select null is null , isnull(null) , isnull(1) , 1 is not null;
+--------------+--------------+-----------+---------------+
| null is null | isnull(null) | isnull(1) | 1 is not null |
+--------------+--------------+-----------+---------------+
| 1 | 1 | 0 | 1 |
+--------------+--------------+-----------+---------------+
1 row in set (0.00 sec)
between and 運算符(expr BETWEEN min AND max): 假如expr大於或等於min並且小於或等於max,則beetween返回1,否則返回0
MariaDB [lyshark]> select 4 between 2 and 5 , 4 between 4 and 6 , 20 between 5 and 10;
+-------------------+-------------------+---------------------+
| 4 between 2 and 5 | 4 between 4 and 6 | 20 between 5 and 10 |
+-------------------+-------------------+---------------------+
| 1 | 1 | 0 |
+-------------------+-------------------+---------------------+
1 row in set (0.00 sec)
letsa運算符(least 值1,值2.....值n): 在定義的數值列表中返回最小的那個元素的數值
MariaDB [lyshark]> select least(10,0) , least(1,2,3,4,5,6,7,8,9) , least('a','b','c') , least(10,null);
+-------------+--------------------------+--------------------+----------------+
| least(10,0) | least(1,2,3,4,5,6,7,8,9) | least('a','b','c') | least(10,null) |
+-------------+--------------------------+--------------------+----------------+
| 0 | 1 | a | NULL |
+-------------+--------------------------+--------------------+----------------+
1 row in set (0.00 sec)
greatest運算符(greatest 值1,值2....值n): 在定義的數值列表中返回最大的那個元素的數值
MariaDB [lyshark]> select greatest(10,0) , greatest(1,2,3,4,5,6,7,8,9) , greatest('a','b','c') , greatest(10,null);
+----------------+-----------------------------+-----------------------+-------------------+
| greatest(10,0) | greatest(1,2,3,4,5,6,7,8,9) | greatest('a','b','c') | greatest(10,null) |
+----------------+-----------------------------+-----------------------+-------------------+
| 10 | 9 | c | NULL |
+----------------+-----------------------------+-----------------------+-------------------+
1 row in set (0.00 sec)
IN 和NOT IN 運算符(值1 IN (值1,值2.....值n)): in運算符判斷指定數值是否在指定的一個列表里,有則返回1無則返回0,而not in運算符恰恰相反.
MariaDB [lyshark]> select 1 in (1,2,3,4,5) , 'lyshark' in ('root','admin','lyshark');
+------------------+-----------------------------------------+
| 1 in (1,2,3,4,5) | 'lyshark' in ('root','admin','lyshark') |
+------------------+-----------------------------------------+
| 1 | 1 |
+------------------+-----------------------------------------+
1 row in set (0.00 sec)
MariaDB [lyshark]> select 10 not in (1,2,3,4,5) , 'lyshark' not in ('root','admin','lyshark');
+-----------------------+---------------------------------------------+
| 10 not in (1,2,3,4,5) | 'lyshark' not in ('root','admin','lyshark') |
+-----------------------+---------------------------------------------+
| 1 | 0 |
+-----------------------+---------------------------------------------+
1 row in set (0.00 sec)
LIKE匹配運算符(expr LIKE 匹配條件): like運算符用來匹配字符串,如果expr滿足條件則返回1否則返回0,若expr或匹配條件中任何一個為NULL則結果為NULL.
LIKE通配符:
%:匹配任意字符,貪婪匹配
_:只匹配一個字符
t__:表示匹配以t開頭,長度為2個字符的字符串
%d:表示匹配以字母d結尾的字符串
MariaDB [lyshark]> select 'lyshark' like 'lyshark' , 'lyshark' like '%k' , 'lyshark' like 'ly_____';
+--------------------------+---------------------+--------------------------+
| 'lyshark' like 'lyshark' | 'lyshark' like '%k' | 'lyshark' like 'ly_____' |
+--------------------------+---------------------+--------------------------+
| 1 | 1 | 1 |
+--------------------------+---------------------+--------------------------+
1 row in set (0.00 sec)
regexp字符串匹配運算符(expr regexp 匹配條件): regexp運算符能夠更加精確的匹配,如果expr滿足條件則返回1否則返回0,若expr或匹配條件中任何一個為NULL則結果為NULL.
REGEXP通配符:
^:匹配以該字符后面的字符開頭的字符串
$:匹配以該字符后面的字符結尾的字符串
.:匹配任意一個單一字符
[...]:匹配在方括號內的任意字符
MariaDB [lyshark]> select 'lyshark' regexp '^l' , 'lyshark' regexp 'k$' , 'lyshark' regexp '..shark' , 'lyshark' regexp '[lyak]';
+-----------------------+-----------------------+----------------------------+---------------------------+
| 'lyshark' regexp '^l' | 'lyshark' regexp 'k$' | 'lyshark' regexp '..shark' | 'lyshark' regexp '[lyak]' |
+-----------------------+-----------------------+----------------------------+---------------------------+
| 1 | 1 | 1 | 1 |
+-----------------------+-----------------------+----------------------------+---------------------------+
1 row in set (0.00 sec)
◆邏輯運算符◆
| 運算符 | 作用 |
|---|---|
| NOT 或 ! | 邏輯非 |
| AND 或 && | 邏輯與 |
| OR | 邏輯或 |
| XOR | 邏輯異或 |
NOT邏輯非: not或!邏輯非運算符,當操作數為0時返回1,當操作為1時返回0,當操作數為NULL時,返回NULL
MariaDB [lyshark]> select not 1 , not(1-1) , not -10 , not NULL;
+-------+----------+---------+----------+
| not 1 | not(1-1) | not -10 | not NULL |
+-------+----------+---------+----------+
| 0 | 1 | 0 | NULL |
+-------+----------+---------+----------+
1 row in set (0.00 sec)
AND邏輯與: and是邏輯與運算符,當兩邊都為真是結果為1,否則結果為0
MariaDB [lyshark]> select 1 and -1 , 1 and 0 , 1 and NULL , 0 and NULL;
+----------+---------+------------+------------+
| 1 and -1 | 1 and 0 | 1 and NULL | 0 and NULL |
+----------+---------+------------+------------+
| 1 | 0 | NULL | 0 |
+----------+---------+------------+------------+
1 row in set (0.00 sec)
OR邏輯或: or是邏輯或運算符,兩邊的結果如果有一邊為真,則返回1否則返回0
MariaDB [lyshark]> select 1 or 1 , 1 or 0 , 1 or -1 , 1 or NULL;
+--------+--------+---------+-----------+
| 1 or 1 | 1 or 0 | 1 or -1 | 1 or NULL |
+--------+--------+---------+-----------+
| 1 | 1 | 1 | 1 |
+--------+--------+---------+-----------+
1 row in set (0.00 sec)
XOR異或: xor邏輯異或運算符,當任意一個操作數為null時返回null,如果兩邊都為0則返回1否則返回0
MariaDB [lyshark]> select 1 xor 1 , 0 xor 0 , 1 xor 0 , 1 xor null;
+---------+---------+---------+------------+
| 1 xor 1 | 0 xor 0 | 1 xor 0 | 1 xor null |
+---------+---------+---------+------------+
| 0 | 0 | 1 | NULL |
+---------+---------+---------+------------+
1 row in set (0.00 sec)
◆移位運算符◆
| 運算符 | 作用 |
|---|---|
| \ | 位或 |
| & | 位與 |
| ^ | 位異或 |
| << | 位左移 |
| >> | 位右移 |
| ~ | 位取反 |
位或(|): 位或運算符,按照提供數據的二進制形式依次或運算,最后輸出結果
MariaDB [lyshark]> select 10 |15 , 9|4|2 ;
+--------+-------+
| 10 |15 | 9|4|2 |
+--------+-------+
| 15 | 15 |
+--------+-------+
1 row in set (0.00 sec)
位與(&): 位與運算符,按照提供數據的二進制形式依次與運算,最后輸出結果
MariaDB [lyshark]> select 10 & 15 ,9&4&2 ;
+---------+-------+
| 10 & 15 | 9&4&2 |
+---------+-------+
| 10 | 0 |
+---------+-------+
1 row in set (0.00 sec)
位異或(^): 將指定數據的二進制形式,逐一按位或運算
MariaDB [lyshark]> select 10 ^ 15 , 1^0 , 1^1;
+---------+-----+-----+
| 10 ^ 15 | 1^0 | 1^1 |
+---------+-----+-----+
| 5 | 1 | 0 |
+---------+-----+-----+
1 row in set (0.00 sec)
按位左移(expr<<需要左移的位數): 將指定數據expr,的二進制形式,按位左移
MariaDB [lyshark]> select 4 <<2;
+-------+
| 4 <<2 |
+-------+
| 16 |
+-------+
1 row in set (0.00 sec)
按位右移(expr>>需要右移的位數): 將指定數據expr,的二進制形式,按位右移
MariaDB [lyshark]> select 16 >>2;
+--------+
| 16 >>2 |
+--------+
| 4 |
+--------+
1 row in set (0.00 sec)
按位取反(~): 將相應位數的二進制形式,逐位反轉
MariaDB [lyshark]> select 5 & ~1 ;
+--------+
| 5 & ~1 |
+--------+
| 4 |
+--------+
1 row in set (0.00 sec)
MariaDB 常用函數(拓展)
函數表示對輸入參數值返回一個具有特定關系的值,MySQL提供了大量豐富的函數,在進行數據庫管理以及數據的查詢和操作時將會經常用到各種函數.通過對數據的處理,數據庫功能可以變得更加強大,更加靈活地滿足不同用戶的需求.各類函數從功能方面主要分為以下幾類:數學函數、字符串函數、日期和時間函數、條件判斷函數、系統信息函數和加密函數等.下面我們就來介紹一些基礎函數的使用.
◆數學函數◆
絕對值函數:abx(x)
MariaDB [lyshark]> select abs(2) , abs(-10.5) ,abs(-100);
+--------+------------+-----------+
| abs(2) | abs(-10.5) | abs(-100) |
+--------+------------+-----------+
| 2 | 10.5 | 100 |
+--------+------------+-----------+
1 row in set (0.00 sec)
平方根函數:sqrt(x)
MariaDB [lyshark]> select sqrt(10) , sqrt(50) , sqrt(-10);
+--------------------+--------------------+-----------+
| sqrt(10) | sqrt(50) | sqrt(-10) |
+--------------------+--------------------+-----------+
| 3.1622776601683795 | 7.0710678118654755 | NULL |
+--------------------+--------------------+-----------+
1 row in set (0.00 sec)
獲取整數的函數:ceil(x),ceiling(x),floor(x)
MariaDB [lyshark]> select ceil(-3.35) , ceiling(3.35) , floor(3.35);
+-------------+---------------+-------------+
| ceil(-3.35) | ceiling(3.35) | floor(3.35) |
+-------------+---------------+-------------+
| -3 | 4 | 3 |
+-------------+---------------+-------------+
1 row in set (0.00 sec)
獲取隨機數函數:rand(),rand(x)
MariaDB [lyshark]> select rand() , rand(10);
+--------------------+--------------------+
| rand() | rand(10) |
+--------------------+--------------------+
| 0.5317976954689227 | 0.6570515219653505 |
+--------------------+--------------------+
1 row in set (0.00 sec)
其他函數:round(x),round(x,y),runcate(x,y)
MariaDB [lyshark]> select round(-1.14) , round(1.14) , round(1.66); #對數據進行四舍五入
+--------------+-------------+-------------+
| round(-1.14) | round(1.14) | round(1.66) |
+--------------+-------------+-------------+
| -1 | 1 | 2 |
+--------------+-------------+-------------+
1 row in set (0.00 sec)
MariaDB [lyshark]> select round(1.38,1) , round(232.38989,3); #對指定小數點后幾位進行四舍五入
+---------------+--------------------+
| round(1.38,1) | round(232.38989,3) |
+---------------+--------------------+
| 1.4 | 232.390 |
+---------------+--------------------+
1 row in set (0.00 sec)
MariaDB [lyshark]> select truncate(1.31,1) , truncate(20.9999,2); #截斷操作,y參數為保留小數點后幾位
+------------------+---------------------+
| truncate(1.31,1) | truncate(20.9999,2) |
+------------------+---------------------+
| 1.3 | 20.99 |
+------------------+---------------------+
1 row in set (0.00 sec)
◆字符串函數◆
計算字符串長度:CHAR_LENGTH,字節長度:LENGTH(str)
MariaDB [lyshark]> select CHAR_LENGTH('date'),CHAR_LENGTH('egg');
+---------------------+--------------------+
| CHAR_LENGTH('date') | CHAR_LENGTH('egg') |
+---------------------+--------------------+
| 4 | 3 |
+---------------------+--------------------+
1 row in set (0.00 sec)
MariaDB [lyshark]> select LENGTH('date'),LENGTH('egg');
+----------------+---------------+
| LENGTH('date') | LENGTH('egg') |
+----------------+---------------+
| 4 | 3 |
+----------------+---------------+
1 row in set (0.00 sec)
MariaDB [lyshark]>
合並字符串函數:CONCAT()
MariaDB [lyshark]> select CONCAT('hello','lyshark'),CONCAT('my',NULL,'SQL');
+---------------------------+-------------------------+
| CONCAT('hello','lyshark') | CONCAT('my',NULL,'SQL') |
+---------------------------+-------------------------+
| hellolyshark | NULL |
+---------------------------+-------------------------+
1 row in set (0.00 sec)
字符串替換:INSERT(s1,len,s2) 將從Quest替換,從第二個字符開始,一直替換三個.
MariaDB [lyshark]> select insert('Quest',2,3,'what') ;
+----------------------------+
| insert('Quest',2,3,'what') |
+----------------------------+
| Qwhatt |
+----------------------------+
1 row in set (0.00 sec)
大小寫轉換:LOWER(str),LCASE(str) 將大寫轉換成小寫
MariaDB [lyshark]> select LOWER('LYSHARK'),LCASE('well');
+------------------+---------------+
| LOWER('LYSHARK') | LCASE('well') |
+------------------+---------------+
| lyshark | well |
+------------------+---------------+
1 row in set (0.00 sec)
大小寫轉換:UPPER(str),UCASE(str) 將小寫轉換成大寫
MariaDB [lyshark]> select UPPER('black'),UCASE('mkdirs');
+----------------+-----------------+
| UPPER('black') | UCASE('mkdirs') |
+----------------+-----------------+
| BLACK | MKDIRS |
+----------------+-----------------+
1 row in set (0.00 sec)
比較字符串大小:STRCMP(s1,s2) 相同返回0,s1<s2返回-1,其他返回1
MariaDB [lyshark]> select STRCMP('lyshark','lyshark'),STRCMP('txt','ttxt'),STRCMP('ttxt','txt');
+-----------------------------+----------------------+----------------------+
| STRCMP('lyshark','lyshark') | STRCMP('txt','ttxt') | STRCMP('ttxt','txt') |
+-----------------------------+----------------------+----------------------+
| 0 | 1 | -1 |
+-----------------------------+----------------------+----------------------+
1 row in set (0.00 sec)
字符串逆序:REVERSE(str)
MariaDB [lyshark]> select REVERSE('lyshark');
+--------------------+
| REVERSE('lyshark') |
+--------------------+
| krahsyl |
+--------------------+
1 row in set (0.00 sec)
◆日期時間函數◆
獲取當前日期:CURDATE()
MariaDB [lyshark]> select CURDATE(),CURRENT_DATE(),CURDATE()+1;
+------------+----------------+-------------+
| CURDATE() | CURRENT_DATE() | CURDATE()+1 |
+------------+----------------+-------------+
| 2018-12-24 | 2018-12-24 | 20181225 |
+------------+----------------+-------------+
1 row in set (0.00 sec)
獲取當前時間:CURTIME()
MariaDB [lyshark]> select CURTIME(),CURRENT_TIME(),CURTIME()+1;
+-----------+----------------+-------------+
| CURTIME() | CURRENT_TIME() | CURTIME()+1 |
+-----------+----------------+-------------+
| 20:49:04 | 20:49:04 | 204905 |
+-----------+----------------+-------------+
1 row in set (0.00 sec)
獲取日期與時間:ALL
MariaDB [lyshark]> select CURRENT_TIMESTAMP(),LOCALTIME(),NOW(),SYSDATE();
+---------------------+---------------------+---------------------+---------------------+
| CURRENT_TIMESTAMP() | LOCALTIME() | NOW() | SYSDATE() |
+---------------------+---------------------+---------------------+---------------------+
| 2018-12-24 20:50:19 | 2018-12-24 20:50:19 | 2018-12-24 20:50:19 | 2018-12-24 20:50:19 |
+---------------------+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)
獲取UNIX時間戳:UNIX_TIMESTAMP()
MariaDB [lyshark]> select UNIX_TIMESTAMP(),UNIX_TIMESTAMP(NOW()),NOW();
+------------------+-----------------------+---------------------+
| UNIX_TIMESTAMP() | UNIX_TIMESTAMP(NOW()) | NOW() |
+------------------+-----------------------+---------------------+
| 1545702698 | 1545702698 | 2018-12-24 20:51:38 |
+------------------+-----------------------+---------------------+
1 row in set (0.00 sec)
獲取年份:YEAR()
MariaDB [lyshark]> select year('18-10-10');
+------------------+
| year('18-10-10') |
+------------------+
| 2018 |
+------------------+
1 row in set (0.00 sec)
獲取月份:MONTH()
MariaDB [lyshark]> select month('2018-10-05');
+---------------------+
| month('2018-10-05') |
+---------------------+
| 10 |
+---------------------+
1 row in set (0.00 sec)
獲取星期:DAYNAME()
MariaDB [lyshark]> select dayname('2018-10-25');
+-----------------------+
| dayname('2018-10-25') |
+-----------------------+
| Thursday |
+-----------------------+
1 row in set (0.00 sec)
獲取天:DAYOFYEAR()
MariaDB [lyshark]> select dayofyear('2018-10-10');
+-------------------------+
| dayofyear('2018-10-10') |
+-------------------------+
| 283 |
+-------------------------+
1 row in set (0.00 sec)
◆條件判斷函數◆
IF(expr,v1,v2): 如果表達式expr是true(expr<>0 and expr<> NULL),則if()函數返回為v1,否則返回v2,if()語句返回值為數字或字符串,具體情況視其所在語境而定.
MariaDB [lyshark]> select if(1>2,2,3),
-> if(1<2,'yes','no'),
-> if(strcmp('test','test1'),'no','yes');
+-------------+--------------------+---------------------------------------+
| if(1>2,2,3) | if(1<2,'yes','no') | if(strcmp('test','test1'),'no','yes') |
+-------------+--------------------+---------------------------------------+
| 3 | yes | no |
+-------------+--------------------+---------------------------------------+
1 row in set (0.00 sec)
IFNULL(v1,v2): 假如v1不為null,則ifnull()返回值為v1,否則其返回值為v2.
MariaDB [lyshark]> select ifnull(1,2) , ifnull(null,10) , ifnull(1/0,'wrong');
+-------------+-----------------+---------------------+
| ifnull(1,2) | ifnull(null,10) | ifnull(1/0,'wrong') |
+-------------+-----------------+---------------------+
| 1 | 10 | wrong |
+-------------+-----------------+---------------------+
1 row in set (0.00 sec)
case expr when v1 then r1 [when v2 then r2][else rn] end: 如果expr等價於某個vn,則返回對應位置then后面的結果.如果所用值都不相等,則返回else后面的rn.
MariaDB [lyshark]> select case 2 when 1 then 'one' when 2 then 'two' else 'more' end;
+------------------------------------------------------------+
| case 2 when 1 then 'one' when 2 then 'two' else 'more' end |
+------------------------------------------------------------+
| two |
+------------------------------------------------------------+
1 row in set (0.00 sec)
MariaDB [lyshark]> select case when 1<0 then 'true' else 'false' end;
+--------------------------------------------+
| case when 1<0 then 'true' else 'false' end |
+--------------------------------------------+
| false |
+--------------------------------------------+
1 row in set (0.00 sec)
◆系統信息函數◆
獲取版本:version()
MariaDB [lyshark]> select version();
+----------------+
| version() |
+----------------+
| 5.5.60-MariaDB |
+----------------+
1 row in set (0.04 sec)
查看當前用戶連接數:connection_id()
MariaDB [lyshark]> select connection_id();
+-----------------+
| connection_id() |
+-----------------+
| 2 |
+-----------------+
1 row in set (0.00 sec)
輸出當前用戶的連接信息:show processlist
MariaDB [lyshark]> show processlist;
+----+------+-----------+---------+---------+------+-------+------------------+----------+
| Id | User | Host | db | Command | Time | State | Info | Progress |
+----+------+-----------+---------+---------+------+-------+------------------+----------+
| 2 | root | localhost | lyshark | Query | 0 | NULL | show processlist | 0.000 |
+----+------+-----------+---------+---------+------+-------+------------------+----------+
1 row in set (0.01 sec)
MariaDB [lyshark]>
MariaDB [lyshark]> show full processlist;
+----+------+-----------+---------+---------+------+-------+-----------------------+----------+
| Id | User | Host | db | Command | Time | State | Info | Progress |
+----+------+-----------+---------+---------+------+-------+-----------------------+----------+
| 2 | root | localhost | lyshark | Query | 0 | NULL | show full processlist | 0.000 |
+----+------+-----------+---------+---------+------+-------+-----------------------+----------+
1 row in set (0.00 sec)
返回當前使用的數據庫:schema()
MariaDB [lyshark]> select database(),schema();
+------------+----------+
| database() | schema() |
+------------+----------+
| lyshark | lyshark |
+------------+----------+
1 row in set (0.00 sec)
◆加密解密函數◆
加密函數:password(str)
MariaDB [lyshark]> select password('newpass');
+-------------------------------------------+
| password('newpass') |
+-------------------------------------------+
| *D8DECEC305209EEFEC43008E1D420E1AA06B19E0 |
+-------------------------------------------+
1 row in set (0.00 sec)
加密函數:MD5(str)
MariaDB [lyshark]> select MD5('mypass');
+----------------------------------+
| MD5('mypass') |
+----------------------------------+
| a029d0df84eb5549c641e04a9ef389e5 |
+----------------------------------+
1 row in set (0.00 sec)
加密函數:encode(str,pswd_str)
MariaDB [lyshark]> select encode('secret','cry'),length(encode('secret','cry'));
+------------------------+--------------------------------+
| encode('secret','cry') | length(encode('secret','cry')) |
+------------------------+--------------------------------+
| ▒h▒ ▒ | 6 |
+------------------------+--------------------------------+
1 row in set (0.00 sec)
解密函數:decode(crypt_str,pswd_str)
MariaDB [lyshark]> select decode(encode('secret','cry'),'cry');
+--------------------------------------+
| decode(encode('secret','cry'),'cry') |
+--------------------------------------+
| secret |
+--------------------------------------+
1 row in set (0.00 sec)
◆其他通用函數◆
格式化函數:ormat(x,n)
MariaDB [lyshark]> select format(123.123,2);
+-------------------+
| format(123.123,2) |
+-------------------+
| 123.12 |
+-------------------+
1 row in set (0.00 sec)
IP地址轉為數字:inet_aton(ipaddr)
MariaDB [lyshark]> select inet_aton("192.168.1.1");
+--------------------------+
| inet_aton("192.168.1.1") |
+--------------------------+
| 3232235777 |
+--------------------------+
1 row in set (0.00 sec)
數字轉為IP地址:inet_ntoa
MariaDB [lyshark]> select inet_ntoa(3232235777);
+-----------------------+
| inet_ntoa(3232235777) |
+-----------------------+
| 192.168.1.1 |
+-----------------------+
1 row in set (0.00 sec)
參考文獻:mysql5.7從入門到精通
