1、場景:查詢一張表,並把查詢結果insert到另一張表中(資料遷移)
insert
into table1 (col1.col2,col3,col4,col5) select (col1.col2,col3,col4,col5) from table2
注意:各個欄位的值要一一對應
2、場景:修改表結構為表增加一列
alter table student add age int (11) default 0 not null comment 『年齡』
3、場景:表連線時,新增資料條件,篩選子表資料。
舉例:table1 table2 表連線時值只保留table2中is_delete=0(沒有刪除)的資料;
table1 left join table2 on table1.id = table2.pid and table2.is_delete=0
4、group by 進行分組後,查詢的字段只能是分組字段,那麼需要其他字段怎麼辦?
使用聚合函式包一下:max(emp_name)
5、向一張表中插入一條資料,如果存在的話,就update(一條sql,與資料庫只有一次互動,效率高)需要建立唯一索引(可以為多個字段建立唯一索引)
方案一:需要為表增加乙個唯一索引 建立唯一索引方式:
唯一索引:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。
5.1、建立表時增加
create
table
`idcard` (
`id` bigint(20) not
null auto_increment comment '主鍵',
`number`
varchar(10) not
null comment '身份證號',
`born_number`
varchar(10) not
null comment '出生編號',
`name`
varchar(10) not
null comment '名字',
`addr`archar(20) not
null,
`birthday`
varchar(20) not
null,
`gmt_modified` datetime not
null,
primary
key (`id`),
unique index `uk_idcard_number` (`number`,`born_number`))
5.2、新增唯一索引:
create unique index indexname on tablename(tablecolumns)
5.3、修改表結構新增唯一索引:
alter table table_name add unique on (tablecolumns)
5.4:一條sql實現插入或修改;
insert
into idcard (`number`,`born_number`
,`name`,`birthday`,`gmt_modified`)values(:number,:born_number,:name,:birthday
,:gmtmodified)
on duplicate key
update
`name`=:name,`gmt_modified`=now()
sql分析:idcard表有number和born_number的組合唯一索引,出現重複後會執行update操作,修改name, modify_empid,gmt_modified
如果在insert語句末尾指定了on duplicate key update,並且插入行後會導致在乙個unique索引或primary key中出現重複值,則在出現重複值的行執行update;如果不會導致唯一值列重複的問題,則插入新行
6、場景公升級:查詢一張表,sum(col)出合計,再重新插入改表中,如果存在改條合計資料,則update,否則insert。
建立一張表:
create
table
`income_money` (
`id` bigint(20) not
null auto_increment comment '主鍵',
`product_id` bigint(20) not
null comment '產品id',
`month`
varchar(10) null
default
null comment '月份'
`money` bigint(20) null
default
null comment '每月收入',
primary
key (`id`),
unique index `uk_income_money_product_id` (`project_id`,`month`)
)
統計產品的年收入,並插入一條產品年收入資料,如果該資料已經存在則修改:
create
table
`income_money` (
`id` bigint(20) not
null auto_increment comment '主鍵',
`product_id` bigint(20) not
null comment '產品id',
`income_type`
varchar(20) not
null comment
'型別(incomemonth:月 incomeyear:年)',
`month`
varchar(10) null
default
null comment '月份'
`money` bigint(20) null
default
null comment '收入',
primary
key (`id`),
unique index `uk_income_money` (`project_id`,`income_type`,`month`)
)insert
into income_money (`project_id`,`income_type`,`month`,`money`)
select tmp.project_id,tmp.income_type,tmp.month,tmp.money
from (select
`project_id`,'incomeyear'
as income_type, :month
asmonth, sum(`money`) as money
from income_money
where project_id=:projectid and income_type<>'all'
group
by project_id,`month`) tmp
on duplicate key
update
`month`=tmp.month,`gaap`=tmp.money
MYSQL學習心得 總結
我的mysql學習心得 一 簡單語法 我的mysql學習心得 二 資料型別寬度 我的mysql學習心得 三 檢視字段長度 我的mysql學習心得 四 資料型別 我的mysql學習心得 五 運算子 我的mysql學習心得 六 函式 我的mysql學習心得 七 查詢 我的mysql學習心得 八 插入 更...
mysql 心得 MySQL心得6
1.算術運算子 算術運算子在兩個表示式上執行數 算,這兩個表示式可以是任何數字資料型別。算術運算子有 加 減 乘 除 和 求模 5種運算。1 運算子 運算子用於獲得乙個或多個的和 select 1.23.09345,0.0000000000 1.算術運算子 算術運算子在兩個表示式上執行數 算,這兩個...
大一ACM心得總結
看了我的大學長 侯盛棟學長 對他的acm之路進行了深刻的總結 我覺得是時候應該對我的2016做個小結吧.說實在話,從開學起,我先後加入了學務中心,各種社團,原本想在裡面一展風采,和志趣相投的人一起發展我的興趣愛好,也許可能是因為學業的原因,也許是因為其他原因,我所加入的社團的最後結果是活動基本沒有參...