MySQL數據表相關操作

常用約束條件

  1. primary key(PK):標識該字段爲表的主鍵,可以唯一的標識記錄,主鍵是不爲空且唯一的,並且有加速查詢的作用。
  2. foreign key(FK):標識該字段爲該表的外鍵,用來建立表與表之間的關聯關係。如:FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
  3. not null:標識該字段不能爲空。
  4. unique key(UK):標識該字段的值是唯一的。
  5. auto_increment:標識該字段的值是自動增長的(整數類型,且爲主鍵)。
  6. default:爲該字段設置默認值。
  7. unsigned:將整型設置爲無符號類型。
  8. zerofill:位數不夠將使用0來進行填充。
  9. 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設置過濾條件,過濾條件使用通配符進行匹配運算,而不是判斷是否相等進行比較。

通配符如下:

  1. 百分號(%)

百分號是 MySQL 中常用的一種通配符,在過濾條件中,百分號可以表示任何字符串,並且該字符串可以出現任意次。

使用百分號通配符要注意以下幾點:

  • MySQL 默認是不區分大小寫的,若要區分大小寫,則需要更換字符集的校對規則。
  • 百分號不匹配空值。
  • 百分號可以代表搜索模式中給定位置的 0 個、1 個或多個字符。
  • 尾空格可能會干擾通配符的匹配,一般可以在搜索模式的最後附加一個百分號。
  1. 下劃線(_)

下劃線通配符和百分號通配符的用途一樣,下畫線只匹配單個字符,而不是多個字符,也不是 0 個字符。

日期也可以進行大小比較,以及放在between和and兩側。

連接查詢

內連接查詢

基本語法:

select <列名1,列名2,...>
from <表名1> inner join <表名2> [on 句子]

外連接查詢

包括左連接和右連接,left join/right join,左連接以左表爲基表,右連接以右表爲基本表。

語法與內連接語法相同,只是把inner join換爲left/right join

子查詢

  1. IN子查詢

    用於判斷一個給定值是否存在於子查詢的結果集中

  2. 比較運算符子查詢

    語法格式:

    <表達式> {= | < | > | >= | <= | <=> | < > | != }
    { all | some | any} <子查詢>
    

    其中all關鍵字用於指定表達式需要與子查詢結果集中的每個值都進行比較;some和any表示表達式只要與子查詢結果集中的某個值滿足比較關係。

  3. EXIST子查詢

    用於判斷子查詢結果集是否爲空。

分組查詢

group by {<列名> | <表達式> | <位置>}[asc | desc]

指定過濾條件

having <條件>

having子句和where子句非常相似,支持where子句中所有的操作符和語法,但是存在以下差異:

  • where子句主要用於過濾數據行,而having子句主要用來過濾分組。
  • where子句不可以包含聚合函數,having子句中的條件可以包含聚合函數。
  • having子句是在數據分組後進行過濾,where子句會在數據分組前進行過濾。

正則表達式查詢

使用regexp關鍵字指定正則表達式的字符匹配模式。

參考文章:MySQL教程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章