比如想往表中插入一条数据,如果表中没有该条数据才插入,如果已经存在该条数据就不插入。
首先,在创建表时,将不需要重复的字段设置为unique,然后在插入时,使用insert ignore语句。
例如:(数据库用的是mysql5)
创建一张表用来存储用户:
create table user_info(
uid mediumint(10) unsigned NOT NULL auto_increment primary key,
last_name char(20) not null,
first_name char(20) not null,
unique ( last_name, first_name)
)
alter table anser add UNIQUE (last_name,first_name)
插入数据:
insert ignore into user_info (last_name,first_name) values ('x','y')这样一来,如果表中已经存在last_name='x'且first_name='y'的数据,就不会插入,如果没有就会插入一条新数据。
——————注意,以上是我直接复制粘贴的信息,以下为原创
然后捕捉查询结果,如果确实已经执行了插入 *** 作,那么就结束sql
否则,就执行一次update *** 作
这样的话,我觉得程序运行性能是较好的
如果是要完成 存在则 更新, 不存在 则插入的 *** 作.
直接使用 replace into 语句就可以了
下面是例子代码
-- 源表CREATE TABLE test_from (id INT primary key, val VARCHAR(20))
-- 目标表
CREATE TABLE test_to (id INT primary key, val VARCHAR(20))
-- 插入源表
INSERT INTO test_from VALUES (1, 'A')
INSERT INTO test_from VALUES (2, 'B')
-- 合并 源表到目标表
replace into test_to (id, val)
select id, val from test_from
-- 第一次检查 目标表数据.
mysql> SELECT * FROM test_to
+------+------+
| id | val |
+------+------+
| 1 | A |
| 2 | B |
+------+------+
2 rows in set (0.00 sec)
-- 更新源表
UPDATE test_from SET val = 'A2' WHERE id = 1
-- 删除源表
DELETE FROM test_from WHERE id = 2
-- 插入源表
INSERT INTO test_from VALUES (3, 'C')
-- 合并 源表到目标表
replace into test_to (id, val)
select id, val from test_from
-- 再次检查 目标表数据.
mysql> SELECT * FROM test_to
+----+------+
| id | val |
+----+------+
| 1 | A2 |
| 2 | B |
| 3 | C |
+----+------+
3 rows in set (0.00 sec)
注意:
表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)