mysql insert嵌套select_mysql之UPDATE,SELECT,INSERT语法

一 :UPDATE语法

#单表语法(常用)

UPDATE [LOW_PRIORITY] [IGNORE] table_reference

SET assignment_list

[WHERE where_condition]

[ORDER BY ...] #例如 ORDER BY id DESC; 若ID不重复且自增,故需要先增加的最大的id后增较小id避免因为重复id保存(不常用)

[LIMIT row_count]

#多表语法

UPDATE [LOW_PRIORITY] [IGNORE] table_references #若为多表需要‘,’分割 例如 table_reference , table_reference2

SET assignment_list [WHERE where_condition]

value: ()

{expr | DEFAULT} #值可以是表达式或默认值 例如 col1 = col1 + 1,(这就是表达式)

assignment:

col_name = value # col_name 列名

assignment_list:

assignment [, assignment] ...

二:SELECT语法(常用语法,与官方有点差别,主要是删除了一些可选参数)

SELECT用于检索从一个或多个表中选择的行

SELECT

select_expr [, select_expr ...]

[FROM table_references] #可以是多表

[WHERE where_condition]  #条件表达式

[GROUP BY {col_name | expr | position} #分组

[ASC | DESC], ... [WITH ROLLUP]]

[HAVING where_condition] #包含

[ORDER BY {col_name | expr | position} #排序

[ASC | DESC], ...]

[LIMIT {[offset,] row_count | row_count OFFSET offset}] #分页

注意:除select_expr其他都是可选参数

语法解析:

1.select_expr 选择表达式 (多个表达式需要用‘,’分割)

例如: table.列名  (映射)

例如: CONCAT(last_name,', ',first_name) AS full_name  (聚合函数和别名  连接多列的字段),和直接调用其他集合函数

例如:(CASE WHEN t3.`CATEGORY` = 2  THEN `T`.`ADDRES` ELSE NULL  END) AS `ADDRES`  (选择表达式,可选着显示内容  例 当''t3.CATEGORY = 2 " 为真时显示THEN后值  为false时显示ELSE的值)

2.where_condition 条件表达式

例如 :id = 2 (当id等于2时为真时显示该数据)

例如 :NOT EXISTS ( select id form classes where id = 5)   (即一个子查询并判断查询的结果是否显示数据) 注意子查询可用父查询的表数据作为条件

3.  GROUP BY 分组 根据列进行分组(列的类型可以是字符串。。。。)

例如 :对单列分组》group by id  (默认是ASC升序,)指定分组方式 group by id ASC

例如: 对多列进行分组    GROUP BY c.id ASC ,t.`tid` DESC;  (并按不同方式)

4.  HAVING 包含

5.ORDER BY  排序可参考group by 都有按不同方式排序

6.LIMIT  分页

三:INSERT语法

语法1 (常用插入方式 构造器插入)

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]

[INTO] tbl_name #表明必选

[(col_name [, col_name] ...)]

{VALUES | VALUE} (value_list) [, (value_list)] ... #必选

[ON DUPLICATE KEY UPDATE assignment_list] #此次忽略

语法2 ()

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]

[INTO] tbl_name

[(col_name [, col_name] ...)]

SELECT ...

[ON DUPLICATE KEY UPDATE assignment_list]

语法3 (set插入)

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]

[INTO] tbl_name

[PARTITION (partition_name [, partition_name] ...)]

SET assignment_list

[ON DUPLICATE KEY UPDATE assignment_list]

value:

{expr | DEFAULT}

#解析 expr 可用算数运算符 如 score=score+1

value_list:

value [, value] ...

assignment:

col_name = value

assignment_list:

assignment [, assignment] ...

解析语法:

语法1    除table(表名)和value(值) 为必选其他都是可选

例如 : INSERT INTO tbl_name () VALUES(); 即插入一条数据(所有值都为默认值)

例如 : INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2); #运用了算数运算符 (注意:col2(第二列)引用的第一列的值 ,因为第一列先插入了值所以第二列可以引用,若反过来VALUES(col2*2,15) 则不合法)

语法2 :可把select 语句查询出来的值 理解为语法1中的value (可用于快熟复制一天记录)

例如 : INSERT  INTO classes(id) SELECT   NULL  FROM classes c WHERE c.id=4; # 插入一条空数据 ,因为id 不能为空所以需值定该值

语法3:通过关键字set 已key=value 的形式插入到表中

例如: insert into test set a='abc';

可选参数

1:[ IGNORE] : 顾名思义 ignore是忽略的意识,结合官方文档和自己的理解如下

如果用insert 插入数据,并且用‘ignore’关键字修饰了insert,则当插入数据发生错误时mysql服务器会忽略该错误并转换为warning信息,并继续执行下条插入信息。

例如 :  执行插入  INSERT IGNORE  INTO teacher(tid,class_id,NAME) VALUES(14,1,'teacher12'),(15,1,'teacher11');  (teacher表信息 tid 为主键  且tid=14已经存在,tid=15不存在)

执行结果:

1e5ee23baf95ab86cd608a60935ca30b.png

分析:当执行插入tid=14时发生了错误,服务器忽略了该错误并转化为警告信息,并继续执行了tid=15的数据

可利用该特性:插入或忽略,即当该条数据(id)已经存在发出警告,否则就执行插入

2:[ ON DUPLICATE KEY UPDATE  assignment_list ] :当key发生DUPLICATE (重复错误)时执行 update语句 》插入或更新

例如:INSERT  INTO teacher(tid,class_id,NAME) VALUE(14,1,'teacher12') ON DUPLICATE KEY UPDATE class_id=1,NAME='teacher1233333';

即当tid=14已经存在就执行更新语句,否则就执行insert语句;

MySQL触发器 Update触发Insert失败

今天工作需要,想要实现将仅对状态更新的表进行历史记录显示,于是考虑在原表中建立触发器,将更新的内容同时写入另一张表 于是进行测试 --建立测试表CREATE TABLE `triggletest_tr ...

mysql中update+select

mysql中不支持嵌套查询后更新操作. 但是可以使用inner join来解决自身的更新问题,参考如下例子: update hera_job a inner join( ),'"') as ...

Update、Insert注入技巧

title: Update.Insert注入技巧 date: 2017-10-23 18:07:57 tags: ["注入"] 审计了不少代码,再看代码的时候最多出现的就是注入,很 ...

SQL基础语法的单表操作 select|insert|update|delete(增删改查) 简单使用

以下案列以此表举例 1.select(查询) select简单的查询分为两种 注:字段也就是表结构中的列的名称 第一种: select  字段名  from  表名 此种查询只列出你所需要查询的字段, ...

SQL基础语法select|insert|update|delete(增删改查) 简单使用

以下案列以此表举例 1.select(查询) select简单的查询分为两种 注:字段也就是表结构中的列的名称 第一种: select  字段名  from  表名 此种查询只列出你所需要查询的字段, ...

C++使用Mysql的详细步骤及各个常用方法的代码演示:select,insert,update,delete

这几天一直在学习C++下使用Mysql的方法及其中各种的问题,也看了很多Mysql的API函数,当然自己看的还是很基础的.其实对于每种数据库的操作,基本的方法都是非常类似的,大多都是connect,s ...

insert、update select from

1.insert select from  收集整理,转载请注明出处! 使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了. 1.INSE ...

数据操纵:SELECT, INSERT, UPDATE, DELETE

SELECT 句法 SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE ...

mysql插入数据时 insert IGNORE、ON DUPLICATE KEY UPDATE、replace into

转: mysql insert时几个操作DELAYED .IGNORE.ON DUPLICATE KEY UPDATE的区别 博客分类: mysql基础应用   mysql insert时几个操作DE ...

随机推荐

Java_ClassLoader内存溢出-从tomcat的reload说起

原文链接:http://nius.me/classloader-memory-leak/ 对于j2ee项目,一直使用eclipse的wtp,每次修改代码后,可以自动热部署.简单的项目wtp似乎没什么问 ...

字符集与Mysql字符集处理(一)

一.字符集总结 其实大多数的知识在这篇文章里已经讲得非常清楚了.这里只是讲一下自己的感悟. 1. UTF-8虽然是以UTF(unicode transfermation format)开头的,但是 ...

C++ new(3)

转载自:http://www.builder.com.cn/2008/0104/696370.shtml “new”是C++的一个关键字,同时也是操作符.关于new的话题非常多,因为它确实比较复杂,也 ...

git学习笔记02-创建一个仓库提交一个文件-原来就是这么简单

打开安装好的git bash,设置你的git信息  (这个随便写就行) 初始化一个Git仓库,分三步.(创建文件夹也可以手动创建,也可以命令行创建) 第一步,进到一个目录  cd e: 第二步,创建一 ...

如何理解 Redux?

作者:Wang Namelos 链接:https://www.zhihu.com/question/41312576/answer/90782136 来源:知乎 著作权归作者所有,转载请联系作者获得授 ...

【转】Markus Persson:Minecraft 游戏背后的奇才

转自酷勤网 Markus Persson是沙盒游戏Minecraft的开发者,在游戏中以Notch的名字为众多玩家所知,是游戏界绝对的巨星.美国杂志的专栏作家David Peisn ...

MVC把随机产生的字符串转换为图片

原文:MVC把随机产生的字符串转换为图片 Insus.NET在这篇中http://www.cnblogs.com/insus/p/3 ...

sass学习笔记 -- sass的四种编译方法

sass的四种编译方法:(.scss) (一)ruby下的命令行编译 首先需要安装ruby,注意需勾选Add Ruby executables to your PATH选项,以添加环境变量. ruby ...

python的学习之路(一)

1.python的简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...

[Swift]LeetCode256.粉刷房子 $ Paint House

There are a row of n houses, each house can be painted with one of the three colors: red, blue or gr ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值