您的位置:首页 > 数据库 > MySQL

MySQL心得总结<一>:

2017-12-28 18:26 253 查看
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_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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: