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 数据库语句 我要添加一条数据,但是要先判断这个数据存不存在可以一句搞完么?的主要内容,如果未能解决你的问题,请参考以下文章

如何直接在sql server中添加一条数据

Google Big Query 标准 SQL,在 SELECT 语句中添加一列

添加一条数据

sqlserver 添加一条数据就在这条数据末尾储存当前时间 不知道怎么写这个触发器。 请大家帮帮忙!

怎么使用sql语句添加列?

用VB语句 给SQL数据表添加一列 或者删除一列