1. 程式人生 > 實用技巧 >(五)MySQL約束和運算子

(五)MySQL約束和運算子

約束

  • 查看錶中約束
  • 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

    =(賦值運算)、:=

比較運算子

MySQL 中的比較運算子
運算子作用
= 等於
<=> 安全的等於
<> 或者 != 不等於
<= 小於等於
>= 大於等於
> 大於
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) 執行結果相同

邏輯運算子

  • 布林運算子,用來確定表示式的真和假。
MySQL 中的邏輯運算子
運算子作用
NOT 或者 ! 邏輯非
AND 或者 && 邏輯與
OR 和 || 邏輯或
XOR 邏輯異或

  • 返回結果不同是由於優先順序導致的。not 1+1等於not (1+1),!1+1等於(!1)+1。

位運算子

MySQL 中的位運算子
運算子說明使用形式舉例
| 位或 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 |
+------------------------+--------------------------+