MySQL心得总结<一>:
2017-12-28 18:26
253 查看
1、场景:查询一张表,并把查询结果insert到另一张表中(数据迁移)
注意:各个字段的值要一一对应
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、创建表时增加
5.2、添加唯一索引:
CREATE UNIQUE INDEX indexName ON tableName(tableColumns)
5.3、修改表结构添加唯一索引:
ALTER TABLE table_name ADD UNIQUE ON (tableColumns)
5.4:一条SQL实现插入或修改;
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。
创建一张表:
统计产品的年收入,并插入一条产品年收入数据,如果该数据已经存在则修改:
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_Id 4000 Card_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 AS month, 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
相关文章推荐
- 心得总结<一>
- Android 数据库ORM框架GreenDao学习心得及使用总结<一>
- 2011年.NET面试题总结---献给即将找工作的同行们<一>
- MFC API 总结<一>
- React使用技巧总结 <一>
- struts框架知识点总结<一>
- Unity ShaderLab< 一> 学习总结
- Morphia和MongoDB学习总结<一>
- Mysql 5.6 在性能、可伸缩性、可用性方面的新突破<一>
- DLL封装框架视图经验总结<一>
- 前端学习基础总结<一>
- Orace数据库锁表的处理与总结<摘抄与总结一>
- UNITY3D shader学习心得<一> properties属性接口
- mysql快速优化<一>
- 一些配置心得和总结!! <上>
- Orace数据库锁表的处理与总结<摘抄与总结一>
- JSON 学习总结 <一>:什么是JSON
- mysql半同步复制<一>
- webview使用的总结<一>
- silverlight导航总结<一>应用传统的批改容器的Content或者是Child等内容来实现导航