最近根据公司要求,从前端开始也开发后端,最近在使用mysql数据库时,有一个需求:接收到前端数据后,更新数据库,如果有该条数据就更新这条数据,如果没有这条数据就添加一条新数据。看了很多文档后,发现对新手不太友好,所以记录下来,方便下次复习。
使用REPLACE INTO
语句
1. 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, ...
// tbl_name为数据库中操作的表的名称
// (col_name, ...) 代表操作的表的字段名,与后面的 values (...) 一一对应
2. 如何知道数据库是否有这条数据
- 目前我主要是设置数据表中的唯一索引“UNIQUE”
3. 使用navicat软件设置唯一索引
- 打开对应数据库的数据表,点击文件 =>设计表
- 点击索引,在栏位里面选择需要设置的列字段,索引类型选“Unique”,点击保存,其他的会自动填上
- 栏位可以选多个字段,如果选择多个,在进行数据库操作时,就需要选择的字段对应的值全部相同,才会认为是一条数据,只要有一个字段对应的值不一样,就会添加一条新数据。
4. 最后在操作数据库时,使用语句replace into tbl_name (col_name, ...) values (...)
- 以node.js中代码为例
- 如果之前设置的unique是‘userId’字段,那么如果数据库中有一条数据的“userId”,与传入数据的‘userId’一样,则会更新该条数据,否则就添加一条新数据
connection.query('REPLACE INTO 数据表名称 (userId, password,...) VALUES (?, ?, ...);', [userId, password,...], (mysqlError, results, fields) => {
.....
}
// (userId, password,...) 表示需要传入要操作的数据表的字段
// (?, ?, ...) 表示使用[userId, password,...]传入数据
// [userId, password,...] 表示传入的需要更新或者添加的数据,需要与前面的(userId, password,...)一一对应