測試是沒有意義的,只是包括在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