测试是没有意义的,只是包括在where子句中的“测试”:
INSERT INTO silly_table(the_text)
'literal_text'
WHERE NOT EXISTS (
SELECT *
FROM silly_table
WHERE the_text = 'literal_text'
);
现在,你让测试仅在需要时:在语句的结束行将存在。有没有这样的事情尝试。
对于那些不了解测试是没有意义的:测试会意义,如果试验后的情况就不会被允许在测试后改变。这将需要测试&锁定方案。或者更糟的是:在交易中进行测试。
更新:版本作品(基本一致):
DROP TABLE exitsnot CASCADE;
CREATE TABLE exitsnot
(id SERIAL NOT NULL PRIMARY KEY
, val INTEGER -- REFERENCES something
, str varchar -- REFERENCES something
);
INSERT INTO exitsnot (val)
SELECT 42
WHERE NOT EXISTS (
SELECT * FROM exitsnot
WHERE val = 42
);
INSERT INTO exitsnot (str)
SELECT 'silly text'
WHERE NOT EXISTS (
SELECT * FROM exitsnot
WHERE str = 'silly text'
);
SELECT version();
输出:
DROP TABLE
NOTICE: CREATE TABLE will create implicit sequence "exitsnot_id_seq" for serial column "exitsnot.id"
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "exitsnot_pkey" for table "exitsnot"
CREATE TABLE
INSERT 0 1
INSERT 0 1
version
----------------------------------------------------------------------------------------------
PostgreSQL 9.1.2 on i686-pc-linux-gnu, compiled by gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3, 32-bit
(1 row)
什么是数据库? – 2012-07-12 19:07:14
除了在STR字段中加入索引外,没有太多可以做的事情。 – 2012-07-12 19:08:01
出于好奇,查询字符串有什么问题..为什么有一个]“STRINGS_DB \” – MethodMan 2012-07-12 19:09:45