Чаще всего по умолчанию используется Read Committed (PostgreSQL, Oracle, SQL Server) или повторяемое чтение (MySQL/InnoDB). Более высокая изоляция означает большее количество блокировок или больше повторных попыток транзакций в случае конфликта, поэтому SERIALIZABLE зарезервирован для конкретных транзакций, которые действительно не терпят никаких аномалий и не применяются повсеместно.
Пример
CREATE TABLE users (
id BIGINT GENERATED ALWAYS ASIDENTITYPRIMARY KEY,
email TEXT NOT NULLUNIQUE,
name TEXT NOT NULL,
city TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULLDEFAULT NOW()
);
CREATE TABLE orders (
id BIGINT GENERATED ALWAYS ASIDENTITYPRIMARY KEY,
user_id BIGINTNOT NULLREFERENCES users(id),
status TEXT NOT NULLCHECK (status IN ('pending', 'completed', 'cancelled')),
amount NUMERIC(12, 2) NOT NULLCHECK (amount >=0),
created_at TIMESTAMPTZ NOT NULLDEFAULT NOW()
);
CREATE INDEX idx_orders_user_created ON orders (user_id, created_at DESC);
Итог
Чаще всего по умолчанию используется Read Committed (PostgreSQL, Oracle, SQL Server) или повторяемое чтение (MySQL/InnoDB).
Какой уровень изоляции используется по умолчанию в большинстве прои… · Sobeso