mysql之UPDATE,SELECT,INSERT语法
一 :UPDATE语法
UPDATE 是一个修改表中行的DML语句。
#单表语法(常用)
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不存在)
执行结果:
分析:当执行插入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,SELECT,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 ...
随机推荐
- linux grep (linux查找关键字在php出现的次数)
http://www.th7.cn/system/lin/201508/127681.shtml 查找CleverCode在当前目录以及子目录,所有的php出现大于0的次数. # find -type ...
- 20162322 朱娅霖 作业011 Hash
20162322 2017-2018-1 <程序设计与数据结构>第十一周学习总结 教材学习内容总结 哈希方法 一.定义 哈希:次序--更具体来说是项在集合中的位置--由所保存元素值的某个函 ...
- 【python-dict】dict的使用及实现原理
以下内容是针对:python源码剖析中的第五章——python中Dict对象 的读书笔记(针对书中讲到的内容进行了自己的整理,并且针对部分内容根据自己的需求进行了扩展) 一.Dict的用法 Dict的 ...
- 分布式01-Dubbo基础背景
分布式01-Dubbo基础 1-分布式基础理论 分布式系统是由一组通过网络进行通信.为了完成共同的任务而协调工作的计算机节点组成的系统.分布式系统的出现是为了用廉价的.普通的机器完成单个计算机无法完成 ...
- python note 05 字典及其操作
1. '''#数据类型划分:可变数据类型,不可变数据类型不可变数据类型:元组,bool int str 可哈希可变数据类型:list,dict set 不可哈希dict key 必须是不可变数据类型, ...
- angularJs, ui-grid 设置默认group, 及排序
- 2.Redis五种数据结构
2.Redis五种数据结构2.1 预备2.1.1 全局命令2.1.2 数据结构和内部编码2.1.3 单线程架构2.2 字符串2.2.1 命令2.2.2 内部编码2.2.3 典型使用场景2.3 哈希2. ...
- day 5,格式化输出,for,while, break,continue,列表
本节内容: 1,格式化输出 2,数据类型 3,for 循环 4,while 循环 5,列表 pycharm的简单使用,设置pycharm自动生成日期和计算机用户名 ctrl+d复制一行 1,格式化输出 ...
- Python中的urllib
urllib提供了一系列URL的功能. Get urllib的request模块可以非常方便的抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP响应: 例如,对豆瓣的一个URLht ...
- Eclipse Python 开发环境搭建 pydev 插件
已安装: python 3.6 JDK Eclispe 在 Eclipse 中安装 pydev Pydev 的下载网址 http://www.pydev.org/download.html 安装完成后 ...