基于主键插入或更新

时间:2016-11-09 11:09:11

标签: mysql sql

我无法控制sql查询。

 INSERT INTO table (id, name, age) VALUES(1, "B", 20) 

应该在mysql服务器端进行更改。是否有可以启用此设置的设置。 ? (无需修改插入查询) id是主键。

{{1}}

上述查询应该将1,A,19行改为1,B,20。

2 个答案:

答案 0 :(得分:0)

这可以通过稍微更改查询的语法来实现。有些DB支持这一点。 我在互联网上发现这个需要用MySql验证。

<link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.css" rel="stylesheet"/>
<link href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.42/css/bootstrap-datetimepicker.css" rel="stylesheet"/>

<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/locale/de.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/js/bootstrap.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.42/js/bootstrap-datetimepicker.min.js"></script>

<div class="input-group date" id="datetimepicker">
  <input type="text" class="form-control" />
  <span class="input-group-addon">
    <span class="glyphicon glyphicon-calendar"></span>
  </span>
</div>

在Postgres中,它被称为upsert。

答案 1 :(得分:0)

MySQL支持ON DUPLICATE KEY UPDATE。这确实需要更改查询。我建议写这个:

INSERT INTO table (id, name, age)
    VALUES(1, 'B', 20) 
    ON DUPLICATE KEY UPDATE name = VALUES(name), age = VALUES(age);

这假定id被声明为主键或至少unique

VALUES函数是从插入的行中提取新值的便捷方法。