表資料的基本操作
資料的插入
insert into 表名 [(字段清單)] values [(對應字段清單)];
insert into 表名 values (對應表結構);
insert into teacher (name,age) values ("Jerry",21);
複制
多資料的插入
insert into my_insert [(字段清單)] values(值清單),(值清單)...;
--在原有基礎上,跟多個值清單即可實作插入多條記錄
複制
資料的查詢
查詢全部資料
select * from 表名;
select * from teacher; --查詢teacher表中所有資料
複制
查詢部分資料
select 字段清單 from 表名;
select name,age,address from teacher --從teacher表中查找所有人的姓名,年齡和住址。
複制
帶條件的查詢
select *字段清單 from 表名 [where條件];
select * from teacher where age>30; --從teacher表中查找年齡大于30的所有人的資訊
select name,adddress from teacher where age>30; --從teacher表中查找年齡大于30的人的姓名和位址
複制
資料的删除
delete from 表名 [wehre條件];
delete from teacher where age<30; 删除teacher表中年齡小于30的所有人的資訊。
複制
如果沒有where條件,則預設删除表中的所有資料
資料的更新
update 表名 set 字段名=新值 [where條件]
update teacher set age=30 where sex="男"; --将teacher表中所有的男性的年齡都改為30
複制
update 表1,表2,... set 表1.列1,表2.列2,...where條件
--可以同時修改多個表中的資料
複制
查詢語句
完整的SQL查詢指令:
select select選項 字段清單 from 資料源 where條件 group by 分組 having 條件 order by 排序 limit 限制
select 選項
系統如何對待查詢得到的結果
all 保留所有的結果
distinct 去除全部重複的記錄
union all 不去除重複的
字段清單
有時候需要從多張表擷取資料,當遇到同名字段的時候,需要用到别名。
基本文法: 字段名 as 别名
from 資料源
實體二維表
from是為前面的表提供資料源,MySQL隻要求資料源是一個符合二維表結構的資料源即可。(多表擷取資料)
基本文法:from 表1,表2,表3
select * from my_date,my_simple,my_auto; --查詢結果為笛卡爾積(盡量避免)
複制
多表資料
從多張表擷取資料,基本文法:
from 表1,表2....
select * from my_int,my_set;
複制
結果:是兩張表的記錄相乘,字段數拼接
本質:從第一張表取出一條記錄,去拼湊第二張表的所有記錄,保留所有結果。得到
的結果叫笛卡爾積(盡量避免 )
動态資料
from跟的不是一個實體二維表,而是一個從其他表中查詢得到的結果集(子查詢)
基本文法:from (select 字段清單 from 表) as 别名
子查詢的時候,作子查詢的表一定要有别名
select * from (select name,id from my_simple) as int;
複制
where子句
從資料表擷取資料的時候進行條件篩選
where用運算符進行條件判斷。
Group by 子句
根據指定的字段将資料進行分組,目的是為了統計
group by 将資料分組後,隻會顯示每組的第一條記錄
select * from my_date group by sex; --将表按照性别進行分組
複制
一些統計函數(聚合函數)
count() 統計字段數量,不統計NULL。
avg() 求平均值
sum() 求和
max() 求最大值
min() 求最小值
Group_concat():為了将分組中指定的字段進行合并(字元串拼接)
使用聚合函數統計
select id,max(age) from my_date group by class; --按照年級分組,查詢每個年級年齡最大的人
複制
group_concat() 字元串拼接,将指定字段進行拼接
多分組
将資料按照某個字段進行分組之後,對已經分組的資料進行再次分組
基本文法
group by 字段1,字段2;//先按照字段1進行排序,之後将結果再按照字段2進行排序
複制
更新資料
1.資料更新一般是随條件更新,很少全部更新
2.在更新資料的時候,沒有條件的時候,會是全表更新,可以使用limit限制更新的數量
update 表名 set 字段名=值 [where 條件] limit 數量
update my_simple set id='1' limit 4; --隻更新前四條記錄
複制
删除操作
1.删除資料時,盡量不要全部删除,應該使用where條件限定
2.使用limit限制删除記錄的數量
delete from my_simple limit 4; --删除前四條資料
複制
- delete删除操作無法重置自增長auto_increment
清除自增長的文法:
truncate 表名
新增資料
多資料插入
隻要寫一次insert指令,可以直接插入多條記錄,(寫上多個值清單)
insert into my_insert [(字段清單)] values(值清單),(值清單)...;
--在原有基礎上,跟多個值清單即可實作插入多條記錄
複制
主鍵沖突
在有的表中使用了業務主鍵,但是插入資料時又不确定主鍵是否存在。
主鍵沖突的解決方案
1.主鍵沖突更新
insert into 表名 [(字段清單)] values (值清單) on duplicate key update 字段=新值(更新的是主鍵之外的新值)
insert into my_student values ('stu001','小婷') on duplicate key update stu_name='小婷';
複制
2.主鍵沖突替換
當主鍵沖突之後,删除資料重新插入
replace into 表名 [(字段清單)] values (值清單);
replace into my_stu values('stu001','小婷');
複制
replace的效率比insert的效率要低。
蠕蟲複制(一般用來測試表的壓力,測試表的效率或者用于資料轉移)
蠕蟲複制的原則:一分為二,成倍增加。
從已有資料中選擇資料,插入到表中。
insert into 表名 [(字段清單)] select */字段清單 from 表
insert into my_copy select * from my_copy; --從自己表中進行蠕蟲複制
複制