my sql 数据库语句 我要添加一条数据,但是要先判断这个数据存不存在可以一句搞完么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了my sql 数据库语句 我要添加一条数据,但是要先判断这个数据存不存在可以一句搞完么?相关的知识,希望对你有一定的参考价值。
replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。
mysql replace into 有三种形式:
1. replace into tbl_name(col_name, ...) values(...)
2. replace into tbl_name(col_name, ...) select ...
3. replace into tbl_name set col_name=value, ...
第一种形式类似于insert into的用法,
第二种replace select的用法也类似于insert select,这种用法并不一定要求列名匹配,事实上,MYSQL甚至不关心select返回的列名,它需要的是列的位置。例如,replace into tb1( name, title, mood) select rname, rtitle, rmood from tb2;?这个例子使用replace into从?tb2中将所有数据导入tb1中。
第三种replace set用法类似于update set用法,使用一个例如“SET col_name = col_name + 1”的赋值,则对位于右侧的列名称的引用会被作为DEFAULT(col_name)处理。因此,该赋值相当于SET col_name = DEFAULT(col_name) + 1。
前两种形式用的多些。其中 “into” 关键字可以省略,不过最好加上 “into”,这样意思更加直观。另外,对于那些没有给予值的列,MySQL 将自动为这些列赋上默认值。
使用要注意 把需要判断是否重复的字段设置一个唯一索引 UNIQUE 才可以生效
可以设置2个字段以上的组合做唯一索引 参考技术A insert into table_name ( col_name1,col_name2,......)
select value1,value2,....
where not exists ( select 1 from table_name a where ........ ) 参考技术B insert into table_name ( col_name1,col_name2,......)
select value1,value2,....
where not exists ( select 1 from table_name a where ........ )追问
好像不行。。。。
追答是有报什么错吗?
参考技术C replace into 你看看 是否符合需求Google Big Query 标准 SQL,在 SELECT 语句中添加一列
【中文标题】Google Big Query 标准 SQL,在 SELECT 语句中添加一列【英文标题】:Google Big Query standard SQL, add a column to a SELECT statement 【发布时间】:2018-06-05 01:48:59 【问题描述】:我有来自 BIg QUERY Google 数据源的以下查询,这些是每天自动更新的实际数字。我想添加一列,其中包含每天的目标数字,这些数字是静态数字。但是我不知道如何输入不在数据库中的数据。谢谢
SELECT DISTINCT user_dim.first_open_timestamp_micros, event.date
FROM `liquidlite-app.com_quoine_quoinex_light_IOS.app_events_20*` AS t
CROSS JOIN UNNEST(event_dim) AS ev[![enter image description here][1]][1]ent
WHERE parse_date('%y%m%d', _table_suffix) between
DATE_sub(current_date(), interval 40 day) and
DATE_sub(current_date(), interval 1 day)
UNION ALL
SELECT DISTINCT user_dim.first_open_timestamp_micros, event.date
FROM `liquidlite-app.com_quoine_quoinex_light_ANDROID.app_events_20*` AS t
CROSS JOIN UNNEST(event_dim) AS event
WHERE parse_date('%y%m%d', _table_suffix) between
DATE_sub(current_date(), interval 40 day) and
DATE_sub(current_date(), interval 1 day)
上面的查询给出了前两列,我需要在第三列中添加不在数据库中的数据。
【问题讨论】:
你能给我们展示样本数据吗?当前的输出是什么样的?您希望它是什么样的? 您能否详细说明数据的来源?这样我们可以更好地理解上下文,特别是关于第三列 @Federico Panunzio 第一列也来自 Google Big Query。第三列来自一个 excel 文件。 请问没人知道吗? 【参考方案1】:您可以将 federated data source 与 BigQuery 结合使用。在这种情况下,由于您将数据保存在 excel 文件中,您可以将其移动到 Google 表格并按照documentation 操作。完成所有设置后,只需添加另一个 UNION
并查询外部数据。
注意这里有一些limitations,所以你必须看看它是否适合你的用例。
【讨论】:
以上是关于my sql 数据库语句 我要添加一条数据,但是要先判断这个数据存不存在可以一句搞完么?的主要内容,如果未能解决你的问题,请参考以下文章
Google Big Query 标准 SQL,在 SELECT 语句中添加一列