'How to allow only one row for a table?
I have one table in which I would like only one entry. So if someone is trying to insert another row it shouldn't be allowed, only after someone deleted the previously existing row.
How do I set a rule for a table like this?
Solution 1:[1]
Add a new column to the table, then add a check constraint and a uniqueness constraint on this column. For example:
CREATE TABLE logging (
LogId integer UNIQUE default(1),
MyData text,
OtherStuff numeric,
Constraint CHK_Logging_singlerow CHECK (LogId = 1)
);
Now you can only ever have one row with a LogId = 1. If you try to add a new row it will either break the uniqueness or check constraint.
(I might have messed up the syntax, but it gives you an idea?)
Solution 2:[2]
You should create a ON BEFORE INSERT trigger on this table. On the trigger, call a procedure that checks count(*) and when the count is 1, it returns an exception message to the user otherwise the insert is allowed to proceed.
Check this documentation for an example.
Solution 3:[3]
I suppose no additional field is requried here. Just unique index on constant:
CREATE UNIQUE INDEX ux_onerow ON onerow ((0));
Solution 4:[4]
You can force single row with:
id int GENERATED ALWAYS AS (1) STORED UNIQUE
This will force the id column to always be 1 and since it's a UNIQUE column the table will only be able to hold this row.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Ben |
| Solution 2 | |
| Solution 3 | barsuk |
| Solution 4 | enriquejr99 |
