mysql 之SQL语句--NSERT SELECT ON DUPLICATE KEY UPDATE的写法

Table source

    CREATE TABLE `source` (
  `key` int(11) NOT NULL AUTO_INCREMENT,
  `data` int(11) DEFAULT NULL,
  `state` int(11) DEFAULT NULL,
  `group` int(11) DEFAULT NULL,
  PRIMARY KEY (`key`)
);

Table dest

    CREATE TABLE `dest` (
      `dkey` int(11) NOT NULL,
      `ddata` int(11) DEFAULT NULL,
      `dstate` int(11) NOT NULL,
      PRIMARY KEY (`dkey`,`dstate`)
    ) ;

Source Test Values

INSERT INTO `source` (`key`,`data`,`state`,`group`) VALUES (1,1,1,1);  
INSERT INTO `source` (`key`,`data`,`state`,`group`) VALUES (2,2,2,1);   
INSERT INTO `source` (`key`,`data`,`state`,`group`) VALUES (8,4,2,1);

Query:

INSERT INTO `test`.`dest` (`dkey`,`ddata`,`dstate`)   
    SELECT `group`,`data`,`state` FROM `test`.`source`   
    WHERE `group` = 1  
    ON DUPLICATE KEY UPDATE  
     `ddata`= `ddata`+VALUES(`ddata`);

经crazyhacking测试是正确的,结果是:

1 1 1  
1 6 2   



转载自:http://stackoverflow.com/questions/5728732/mysql-insert-select-on-duplicate-key-update-increment


可能存在的问题:http://hi.baidu.com/ytjwt/item/22869f092b8146d872e6760a

我想把test中的数据导入到test1中,若a存在,则跟新b,c为test表中数据加上test1的数据
开始时候,这样写
insert into test1(a,b,c) select a , b , c from test ON DUPLICATE KEY UPDATE b=b+values(b),c=c+values(c);
就会出现ERROR 1052 (23000): Column 'b' in field list is ambiguous
这是因为在上面的sql中,mysql不知道b到底是数据test 还是test1.所以就会出现上面错误。
后跟改为
insert into test1(a,b,c) select a , b , c from test ON DUPLICATE KEY UPDATE test1.b=test1.b+values(b),test1.c=test1.c+values(c);
就可以运行了
注意:values(b) 与values(c) 其实是代表multiple-row inserts的第二列跟第三列,跟表名没有关系,不能写成values(test.b)
mysql> insert into test1(a,b,c) select a , b , c from test ON DUPLICATE KEY UPDATE test1.b=test1.b+values(test.b),test1.c=test1.c+values(test.c);
ERROR 1054 (42S22): Unknown column 'test.b' in 'field list'

转载于:https://www.cnblogs.com/catkins/p/5270560.html

<think>嗯,用户这次又遇到了问题,显示的是“NSERT --”以及大量的波浪线。之前用户问过类似的情况,但这次看起来有些不同。首先,我需要确认用户当前所处的环境,看起来还是在Vim编辑器里。 用户提到的“NSERT --”可能是个拼写错误,正确的应该是“-- INSERT --”,也就是插入模式。但用户写成了“NSERT --”,这可能是因为用户输入错误,或者在特定情况下Vim的显示出现了问题。不过更可能的是用户误操作导致显示异常。 接下来,用户看到的是大量的波浪线,这在Vim中通常表示文件末尾之后的空白行。所以用户可能是在打开一个空文件或者光标处于文件末尾的位置。这时候如果进入插入模式,输入内容就会出现在文件末尾,而波浪线是Vim用来占位的符号,并不实际存在于文件中。 用户可能是在尝试执行某些命令,但发现自己处于插入模式,无法执行正常的命令,比如搜索或者保存退出。这时候用户可能会困惑,因为输入的指令被当作文本输入而不是命令执行。例如,用户之前尝试输入“/listen 80”进行搜索,但因为没有退出插入模式,导致命令无效。 现在用户再次遇到类似的问题,但这次显示的是“NSERT --”,这可能是用户打字错误,或者在某种情况下Vim的界面显示不完整。这时候需要引导用户确认当前模式,并正确退出插入模式。用户可能按了某些键导致进入插入模式,比如误触了i、a、o等键,或者从其他模式切换过来时出现问题。 另外,用户可能对Vim的模式切换不太熟悉,特别是新用户容易在插入模式和正常模式之间混淆。需要强调Esc键的作用,以及如何确认当前所处的模式。同时,用户可能需要了解如何在正常模式下执行搜索、保存、退出等操作,避免在插入模式下输入命令。 用户可能还不太清楚波浪线的含义,需要解释这些符号的作用,以减少他们的困惑。此外,用户可能在尝试编辑配置文件(比如Nginx的配置)时遇到问题,所以给出具体的操作示例会很有帮助,比如如何搜索关键字、修改内容并保存退出。 还需要考虑用户可能的误操作,比如在插入模式下输入了内容,想要撤销修改。这时候可以建议使用u命令进行撤销,或者直接放弃修改并退出。同时,提醒用户在修改配置文件后重启服务,确保更改生效。 总结来说,用户的主要问题还是在于对Vim的模式不熟悉,导致意外进入插入模式而无法执行命令。需要一步步引导用户退出插入模式,执行所需的操作,并提供相关的快捷键和命令参考,帮助用户避免类似问题的发生。</think>--- ### 问题定位 你看到的 `NSERT --` 是 Vim 编辑器中的**插入模式提示**(实际应为 `-- INSERT --`,可能是显示异常或输入错误),而大量 `~` 符号表示光标位于**文件末尾后的空白行**。此时所有键盘输入会被当作文本内容处理,而非命令。 --- ### 分步解决 #### 1. **确认当前模式** - 观察左下角提示: - 若有 `-- INSERT --`、`-- REPLACE --` 或 `-- VISUAL --` → 处于**编辑模式** - 若**无提示** → 处于**正常模式**(可执行命令) #### 2. **退出异常模式** - 连续按 `Esc` 键 2-3 次,直到左下角**无任何模式提示**。 #### 3. **修复显示问题** - 若提示仍为 `NSERT --`(异常状态),输入: ```vim :redraw! ``` 按 `Enter` 强制刷新界面,通常会恢复为正常显示。 #### 4. **返回文件实际内容区** - 按 `gg` 跳转到文件第一行,或按 `G` 跳转到最后一行有内容的行。 --- ### 关键现象解析 | 现象 | 含义 | |----------------------|----------------------------------------------------------------------| | `NSERT --` | 通常是 `-- INSERT --` 的显示错误,表明处于**插入模式** | | 满屏 `~` 符号 | Vim 对**文件末尾后空白区域**的占位符,实际文件内容可能已结束 | | 输入无反应/显示异常 | 在插入模式下,Vim 无法执行命令,且界面可能因终端兼容性问题出现错乱 | --- ### 场景还原与操作示例 #### 假设你正在编辑 Nginx 配置文件: 1. **误触发插入模式**: - 按 `i` 或 `o` 进入插入模式 → 左下角显示 `-- INSERT --` - 尝试输入命令 `/listen 80` → 实际插入了文本而非搜索 2. **修复操作**: ```text 1. 按 Esc 退出插入模式 2. 输入 :/listen 80 → 按 Enter 执行搜索 3. 按 n 查找下一个匹配项 4. 按 i 重新进入插入模式修改配置 ``` --- ### 模式切换核心备忘 | 操作 | 效果 | |---------------------|--------------------------------| | `i` / `a` / `o` | 进入插入模式(写内容) | | `Esc` | 返回正常模式(执行命令) | | `v` / `V` / `Ctrl+v`| 进入可视化模式(选择文本) | --- ### 高级技巧 1. **强制终止异常状态**: - 若界面持续异常,按 `Ctrl + l` 可尝试刷新屏幕。 2. **放弃修改并退出**: ```vim :q! " 不保存直接退出 :e! " 重新加载文件(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值