常用約束條件
primary key(PK)
:標識該字段爲表的主鍵,可以唯一的標識記錄,主鍵是不爲空且唯一的,並且有加速查詢的作用。foreign key(FK)
:標識該字段爲該表的外鍵,用來建立表與表之間的關聯關係。如:FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
。not null
:標識該字段不能爲空。unique key(UK)
:標識該字段的值是唯一的。auto_increment
:標識該字段的值是自動增長的(整數類型,且爲主鍵)。default
:爲該字段設置默認值。unsigned
:將整型設置爲無符號類型。zerofill
:位數不夠將使用0來進行填充。check
:檢查約束,如:CHECK(salary>0 AND salary<100)
。
數據表操作
創建表
格式:
create table 數據庫名.數據表名(
字段名1 類型[(寬度) 約束條件],
字段名2 類型[(寬度) 約束條件],
字段名3 類型[(寬度) 約束條件]
);
刪除表
drop table [if exists] 表名1 [,表名2,表名3...];
用戶必須擁有執行drop table命令的權限,否則數據表不會被刪除。
表被刪除時,用戶在該表上的權限不會自動刪除。
修改表
alter table <表名> [修改選項]
修改選項的格式如下:
{add column <列名> <類型> [約束條件] [first|after 已存在的列名]
|change column <舊列名> <新列名> <新類型>
|alter column <列名> {set default <默認值>|drop default}
|modify column <列名> <類型>
|drop column <列名>
|rename to <新表名>}
查看錶
show create table <數據表名>; 查看數據表中的約束
desc <表名>; 查看錶結構
表中數據操作
插入數據
insert into <表名> [<列名1>[,...<列名n>]]
values (值1)[...,(值n)];
insert into <表名>
set <列名1>=<值1>,
<列名2>=<值2>,
...
刪除數據
delete from <表名> [where 子句][order by 子句][limit 子句]
修改數據
update <表名> set 字段1=值1 [,字段2=值2...][where 子句][order by 子句][limit 子句]
查詢數據
基本查詢
基本語法:
select
{*|<字段名>}
[
from <表1>,<表2>...
[where <表達式>
[group by <group by definition>
[having <expression> [{<operator><expression>}...]]
[order by <order by definition>]
[limit[<offset>,]<row count>]
]
過濾重複數據
select distinct 列名 from 表名;
設置別名
select 列名 as 別名 from 表名;
限制查詢結果的記錄條數
select 列名 from 表名 limit [位置偏移量,] 限制的行數;
對查詢結果進行排序
select 列名 from 表名 order by {<列名>|<表達式>|<位置>}[asc|desc];
關鍵字ASC表示按升序分組,關鍵字DESC表示按降序分組
條件查詢
select 列名 from 表名 where <查詢條件>{<判定運算1>, <判定運算2>, ...};
判定運算的語法:
<表達式1>{=|<|<=|>|>=|<=>|<>|!=}<表達式2>
<表達式1>[NOT]LIKE<表達式2>
<表達式1>[NOT][REGEXP|RLIKE]<表達式2>
<表達式1>[NOT]BETWEEN<表達式2>AND<表達式3>
<表達式1>IS[NOT]NULL
<表達式1> [NOT] LIKE <表達式2>
使用運算符like設置過濾條件,過濾條件使用通配符進行匹配運算,而不是判斷是否相等進行比較。
通配符如下:
- 百分號(%)
百分號是 MySQL 中常用的一種通配符,在過濾條件中,百分號可以表示任何字符串,並且該字符串可以出現任意次。
使用百分號通配符要注意以下幾點:
- MySQL 默認是不區分大小寫的,若要區分大小寫,則需要更換字符集的校對規則。
- 百分號不匹配空值。
- 百分號可以代表搜索模式中給定位置的 0 個、1 個或多個字符。
- 尾空格可能會干擾通配符的匹配,一般可以在搜索模式的最後附加一個百分號。
- 下劃線(_)
下劃線通配符和百分號通配符的用途一樣,下畫線只匹配單個字符,而不是多個字符,也不是 0 個字符。
日期也可以進行大小比較,以及放在between和and兩側。
連接查詢
內連接查詢
基本語法:
select <列名1,列名2,...>
from <表名1> inner join <表名2> [on 句子]
外連接查詢
包括左連接和右連接,left join/right join,左連接以左表爲基表,右連接以右表爲基本表。
語法與內連接語法相同,只是把inner join換爲left/right join
子查詢
-
IN子查詢
用於判斷一個給定值是否存在於子查詢的結果集中
-
比較運算符子查詢
語法格式:
<表達式> {= | < | > | >= | <= | <=> | < > | != } { all | some | any} <子查詢>
其中all關鍵字用於指定表達式需要與子查詢結果集中的每個值都進行比較;some和any表示表達式只要與子查詢結果集中的某個值滿足比較關係。
-
EXIST子查詢
用於判斷子查詢結果集是否爲空。
分組查詢
group by {<列名> | <表達式> | <位置>}[asc | desc]
指定過濾條件
having <條件>
having子句和where子句非常相似,支持where子句中所有的操作符和語法,但是存在以下差異:
- where子句主要用於過濾數據行,而having子句主要用來過濾分組。
- where子句不可以包含聚合函數,having子句中的條件可以包含聚合函數。
- having子句是在數據分組後進行過濾,where子句會在數據分組前進行過濾。
正則表達式查詢
使用regexp關鍵字指定正則表達式的字符匹配模式。
參考文章:MySQL教程