天天看點

學會Mysql第二天表資料的基本操作

表資料的基本操作

資料的插入

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;  --從自己表中進行蠕蟲複制           

複制