數據的增刪改查(CRUD)
插入數據(insert)
向表中指定的字段中添加值:
insert into 表 (字段1,字段2,字段3) values (值1,值2,值3);
向表中所有的字段添加值:
insert into 表 values (值1,值2,值3...);
注意:1.插入的數據與字段數據的類型相同
2.數據的大小應在規定的範圍內
3.字符串和日期類型的數據,必須使用單引號括起來
修改數據(update)
修改/更改數據:
update 表名 set 字段=值 where 條件;
注意:若沒有where條件子句,默認修改所有該字段的數據
若有where條件子句,修改符合條件的數據
刪除數據(delete)
刪除數據:
delete from 表 where 條件;
注意:若不加where,默認刪除所有數據
若加where條件,刪除符合條件的數據
delete 刪除支持事務的操作
關於刪除的命令
drop truncate delete
drop table 表名; --刪除整個表,包括數據和結構
truncate table 表名; --先把整個表刪除掉,再創建一個與原來一摸一樣的表,不支持事務
delete from 表 where 條件; --支持事務操作,回滾
關於事務
開啓事務:
start transaction;
使用delete刪除:
delete from 表 where 條件;
數據回滾:
rollback;
查詢數據(select)
查詢語句:
select * from 表; --默認查詢所有字段的數據
select * from 表 where 條件; --查詢符合條件的數據
select 字段1,字段2,字段3 from 表; --查詢指定字段的數據
select distinct from 表; --使用distinct剔除掉查詢結果中重複的數據
查詢語句中可以使用as起別名,as可以省略不寫,中間使用空格代替
where子句後可以使用的符號
1.>, =, <, >=, <=, !=
2.in 查詢字段的值是否在指定的集合中
select * from 表名 where 字段 in (元素1,元素2...);
--嵌套查詢,括號裏也可以寫查詢語句
3.like 模糊查詢
select * from 表名 where 字段 like '張_';
select * from 表名 where 字段 like '張%';
後面配合通配符使用:'%','_'
'_'下劃線,表示查詢所佔一個字符
'%'百分號,表示查詢所佔多個字符
條件需要使用單引號''
4.and與 or或 not非 between...and 在...範圍,包含兩個端點
select * from stu where english>60 and english <90;
select * from stu where english>80 or chinese>90;
select * from stu where english between 60 and 90;
使用 order by 對結果排序
order by 字段 asc | desc;
asc --默認升序
desc --降序
order by放在select語句的末尾
select * from 表 (where 字段) order by 字段 asc/desc;
對結果多次排序時,order by寫一次即可,多次不同排序之間使用逗號隔開
聚合函數
聚合函數操作的都是某一列的數據
count() --求數量
select count(*) | count(列名) from 表; --某一列數據的總和
sum() --求某一列數據的和
注意:沒有sum(*),求某一列,只對數值類型起作用
select sum(列名) from 表;
avg() --求平均分
select avg(字段) from 表;
min() --求最小值
select min(字段) from 表;
max() --求最大值
select max(字段) from 表;
分組查詢
group by --分組查詢,在對錶中的數據進行一定的類別統計
select 字段 from 表 group by 字段名;
分組查詢一般和聚合函數聯合一起使用
注意:使用where的條件,如果有分組,where的條件是分組之前的條件
having關鍵字是進行分組的條件過濾,用在group by後面
where關鍵字後不能使用聚合函數,
having關鍵字後可以使用聚合函數
外鍵約束
外鍵約束:
foregin key (外鍵字段名) references 外表表名 (主鍵字段名)
用於建立和加強兩個表數據之間的聯繫
多表的設計
多表設計存在多種方式:
一對多 多對多 一對一(瞭解)
一對多:
部門表(一方) 員工表(多方)
用戶表(一方) 訂單表(多方)
一對多表結構設計,兩張表,主表(一方),從表(多方)
建表原則:在多方表中添加字段,把該字段作爲外鍵,指向一方表的主鍵。
多對多表結構:
多表查詢
笛卡兒積是兩個結果的乘積,假如說有兩張表,A表和B表
select * from A,B; --查詢產生的結果就是笛卡兒積
應該解決這個問題,去掉其中重複的查詢結果
內連接
1.普通內連接
語法:...inner join ... on 條件;
注意:在inner join關鍵字之前寫表1,在inner join關鍵字之後寫表2
on後面寫條件:表1:dept 表2:emp (dept.did = emp.dno)
select * from dept inner join emp on dept.did = emp.dno;
2.隱式內連接(常用)
語法:select * from 表1,表2 where 表1.字段 = 表2.字段;
例句:select * from dept,emp where dept.did = emp.dno;
外連接
1.左外連接(left)
select * from 表1 left (outer) join 表2 on 條件;
outer可以省略不寫
例句:
select * from dept left outer join emp on dept.did = emp.dno;
2.右外連接(right)
select * from 表1 right (outer) join 表2 on 條件;
例句:
select * from dept right outer join emp on dept.did = emp.dno;
內連接 與 外連接的區別
- 內連接查詢的是2張表交集的數據,主外鍵關聯的數據
- 左外連接查詢的是左表中所有的數據和2張表主外鍵關聯的數據 (以左表爲基準,取交集,與右表不匹配的以 null 填充)
- 右外連接查詢的是右表中所有的數據和2張表主外鍵關聯的數據 (以右表爲基準,取交集,與左表不匹配的以 null 填充)
子查詢
子查詢,嵌套查詢,一個 select 語句不能查詢出結果的,可以通過多個 select 語句來查詢結果。一個查詢語句的結果,作爲另一條查詢語句的條件。
例句:查詢出語文成績大於語文平均分的同學?
先計算出語文成績的平均分:select avg(chinese) from stu
語文成績大於語文平均分的同學:
select username,chinese from stu where chinese > (select avg(chinese) from stu);
MySql事務
事務的4個特性:“ACID”
- 原子性 2. 一致性 3. 持久性 4. 隔離性
- 原子性 :一個事務是一個整體,不可拆分的,事務的 sql 語句,要麼都執行,要麼都不執行
- 一致性 :通過事務操作的數據要保持一致
- 持久性 :通過事務提交的數據,若沒有問題的情況下,將永久生效
- 隔離性 :事務與事務之間相互隔離,就是說一個事務是一個單獨的個體,隔離性在多線程操作數據的過程中發揮很大作用,避免了數據的髒讀,幻讀等