Транзакциялар жана ACID
Бир нече операторду "баары же эч нерсе" принциби боюнча бир иш бирдигине бириктириңиз
START TRANSACTION буйругу менен ачылат, өзгөртүүлөр киргизилет жана баарын сактоо үчүн COMMIT, же баарын жокко чыгаруу үчүн ROLLBACK буйругу менен аяктайт. Дал ушундай жол менен банк эки эсептин ортосунда акча которуп, бир тыйынды да жоготпойт же ойлоп таппайт.
START TRANSACTION,COMMITжанаROLLBACKменен ишти ачуу, сактоо жана жокко чыгаруу,- банк которуусунун мисалында ACID төрт кепилдигин түшүндүрүү,
autocommitжалгыз операторлорду автоматтык түрдө кантип ороорун сүрөттөө,- оператор бузулганда же байланыш үзүлгөндө эмне сакталып каларын так болжолдоо,
- транзакциянын бир бөлүгүн гана артка кайтаруу үчүн
SAVEPOINTколдонуу.
1. Биздин мисал-схема: кичинекей банк
Бул темадагы ар бир мисал бир кичинекей accounts таблицасын колдонот. Ар бир сап - бул аты жана учурдагы балансы бар кардардын эсеби. Биз InnoDB сактоо кыймылдаткычын колдонобуз, анткени MySQL'де транзакцияларды InnoDB гана колдойт (эски MyISAM кыймылдаткычы аларды этибарга албайт). Таблицаны бир жолу түзүп, толтуруңуз:
CREATE TABLE accounts (
account_id INT PRIMARY KEY,
owner VARCHAR(40) NOT NULL,
balance DECIMAL(10,2) NOT NULL
) ENGINE = InnoDB;
INSERT INTO accounts (account_id, owner, balance) VALUES
(1, 'Alice', 500.00),
(2, 'Bob', 300.00),
(3, 'Carol', 1000.00);
Баштапкы маалыматтар мындай көрүнөт:
| account_id | owner | balance |
|---|---|---|
| 1 | Alice | 500.00 |
| 2 | Bob | 300.00 |
| 3 | Carol | 1000.00 |
Акча үчүн биз атайын DECIMAL(10,2) алабыз: ал FLOAT'тан айырмаланып так маанилерди сактайт, ал эми FLOAT банк балансынын жанында таптакыр жагымсыз тегеректөө каталарын киргизмек.