(五)MySQL約束和運算子
阿新 • • 發佈:2020-08-04
約束
- 查看錶中約束
-
SHOW CREATE TABLE <資料表名>;
主鍵約束
#建立表時設定單欄位主鍵 #定義欄位的同時指定主鍵 <欄位名> <資料型別> PRIMARY KEY [預設值] mysql> CREATE TABLE tb_emp3 -> ( -> id INT(11) PRIMARY KEY, ->... #或者在定義完所有欄位之後指定主鍵 [CONSTRAINT <約束名>] PRIMARY KEY [欄位名] mysql> CREATE TABLE tb_emp4-> ( -> id INT(11), -> name VARCHAR(25), -> PRIMARY KEY(id) -> ); #建立表時設定聯合主鍵 PRIMARY KEY [欄位1,欄位2,…,欄位n] mysql> CREATE TABLE tb_emp5 -> ( -> name VARCHAR(25), -> deptId INT(11), -> salary FLOAT, -> PRIMARY KEY(name,deptId)-> ); #在修改資料表時新增主鍵約束 ALTER TABLE <資料表名> ADD PRIMARY KEY(<欄位名>); #刪除主鍵約束 ALTER TABLE <資料表名> DROP PRIMARY KEY;
主鍵自增長(AUTO_INCREMENT)
mysql> CREATE TABLE student100 ( -> id INT NOT NULL AUTO_INCREMENT, -> name VARCHAR(20) NOT NULL, -> PRIMARY KEY(ID) ->)AUTO_INCREMENT=100;
- 預設情況下,AUTO_INCREMENT 的初始值是 1,每新增一條記錄,欄位值自動加 1。
- 一個表中只能有一個欄位使用 AUTO_INCREMENT 約束,且該欄位必須有唯一索引,以避免序號重複(即為主鍵或主鍵的一部分)。
- AUTO_INCREMENT 約束的欄位必須具備 NOT NULL 屬性。
- AUTO_INCREMENT 約束的欄位只能是整數型別(TINYINT、SMALLINT、INT、BIGINT 等)。
- AUTO_INCREMENT 約束欄位的最大值受該欄位的資料型別約束,如果達到上限,AUTO_INCREMENT 就會失效。
- 末尾的AUTO_INCREMENT=100,為可選。若沒有這個語句則自增從1開始,有了則從100開始
INSERT INTO student100(name) VALUES('Java'),('MySQL'),('Python');
外來鍵約束(FOREIGN KEY)
唯一約束(UNIQUE)
檢查約束(CHECK)
預設值約束(DEFAULT)
非空約束(NOT NULL)
運算子
- 按表示式順序從左到右依次計算,列表優先順序由高到低
-
運算子
!
-(負號)、〜(位反轉)
^
*、/、%
-(減號)、+
<<、>>
&
|
=(比較運算)、<=>、>=、>、<=、<、<>、!=、IS、LIKE、REGEXP、IN
BETWEEN、CASE、WHEN、THEN、ELSE
NOT
&&、AND
XOR
II、OR
=(賦值運算)、:=
比較運算子
運算子 | 作用 |
---|---|
= | 等於 |
<=> | 安全的等於 |
<> 或者 != | 不等於 |
<= | 小於等於 |
>= | 大於等於 |
> | 大於 |
IS NULL 或者 ISNULL | 判斷一個值是否為空 |
IS NOT NULL | 判斷一個值是否不為空 |
BETWEEN AND | 判斷一個值是否落在兩個值之間 |
算術運算子
- 算術運算,加(+)、減(-)、乘(*)、除(/)、求餘(%MOD)
CREATE TABLE temp(num INT); INSERT INTO temp VALUE (64); SELECT num,num+10,num-3+5,num+36.5 FROM temp; #返回結果 +------+--------+---------+----------+ | num | num+10 | num-3+5 | num+36.5 | +------+--------+---------+----------+ | 64 | 74 | 66 | 100.5 | +------+--------+---------+----------+ SELECT num,num*2,num/2,num/3,num%3 FROM temp; +------+-------+---------+---------+-------+ | num | num*2 | num/2 | num/3 | num%3 | +------+-------+---------+---------+-------+ | 64 | 128 | 32.0000 | 21.3333 | 1 | +------+-------+---------+---------+-------+ #其中num%3,和 MOD(num,3) 執行結果相同
邏輯運算子
- 布林運算子,用來確定表示式的真和假。
運算子 | 作用 |
---|---|
NOT 或者 ! | 邏輯非 |
AND 或者 && | 邏輯與 |
OR 和 || | 邏輯或 |
XOR | 邏輯異或 |
- 返回結果不同是由於優先順序導致的。not 1+1等於not (1+1),!1+1等於(!1)+1。
位運算子
運算子 | 說明 | 使用形式 | 舉例 |
---|---|---|---|
| | 位或 | a | b | 5 | 8 |
& | 位與 | a & b | 5 & 8 |
^ | 位異或 | a ^ b | 5 ^ 8 |
~ | 位取反 | ~a | ~5 |
<< | 位左移 | a << b | 5 << 2,表示整數 5按位左移 2 位 |
>> | 位右移 | a >> b | 5 >> 2,表示整數 5 按位右移 2 位 |
IN和NOTIN
- 判斷表示式的值是否位於給出的列表中;如果是,返回值為 1,否則返回值為 0。
mysql> SELECT NULL IN (1,3,5,'thks'),10 IN (1,10,NULL,'thks'); +------------------------+--------------------------+ | NULL IN (1,3,5,'thks') | 10 IN (1,10,NULL,'thks') | +------------------------+--------------------------+ | NULL | 1 | +------------------------+--------------------------+