Мазмунга өтүү

Сабактын башталышы

Триггерлер жана окуялар (Events)

Маалымат базасынын тарабындагы автоматтык логика: маалымат өзгөргөндө же график боюнча иштейт

Негизги идея: триггер — бул таблицага сап киргизилген, жаңыртылган же өчүрүлгөн ар бир жолу маалымат базасы автоматтык түрдө аткарган SQL блогу. Аны сиз чакырбайсыз — муну кыймылдаткыч жасайт. Окуя (event) — ошол эле идея, бирок сааттар боюнча: тиркемесиз, график боюнча иштеген SQL. Экөө тең логиканы маалымат базасынын ичине которот, бул аудит журналдары жана туунду маалыматтар үчүн күчтүү, бирок ошондой эле бул тиркеменин кодун grep кылуу менен табылбай турган жашыруун логика.
Бул теманын аягында сиз мына буларды кыла аласыз:
  • INSERT, UPDATE жана DELETE үчүн BEFORE жана AFTER триггерлерин жазуу;
  • NEW жана OLD псевдо-саптарын туура окуу жана жазуу;
  • эки классикалык үлгүнү куруу: аудит журналы жана туунду / денормалдашкан маалымат;
  • SIGNAL менен өзгөртүүнү текшерүү же четке кагуу;
  • CREATE EVENT аркылуу мезгилдүү тейлөөнү пландаштыруу; жана
  • базадагы жашыруун логика качан жардам берерин, качан колдоого зыян келтирерин чынчылдык менен баалоо.

1. Мисал схема

Бул теманын бардык суроо-талаптары бир кичинекей дүкөн базасы менен иштейт. Биз товарларды, кардарлар берген заказдарды, ар бир заказдын саптарын жана баа өзгөрүүлөрүн жаза турган аудит таблицасын сактайбыз.

CREATE TABLE products (
  product_id  INT PRIMARY KEY AUTO_INCREMENT,
  name        VARCHAR(80)   NOT NULL,
  price       DECIMAL(10,2) NOT NULL,
  stock       INT           NOT NULL DEFAULT 0
);

CREATE TABLE orders (
  order_id    INT PRIMARY KEY AUTO_INCREMENT,
  customer    VARCHAR(80) NOT NULL,
  status      VARCHAR(20) NOT NULL DEFAULT 'new',
  created_at  DATETIME    NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE order_items (
  item_id     INT PRIMARY KEY AUTO_INCREMENT,
  order_id    INT NOT NULL,
  product_id  INT NOT NULL,
  quantity    INT NOT NULL
);

CREATE TABLE price_audit (
  audit_id    INT PRIMARY KEY AUTO_INCREMENT,
  product_id  INT NOT NULL,
  old_price   DECIMAL(10,2),
  new_price   DECIMAL(10,2),
  changed_by  VARCHAR(80),
  changed_at  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO products (name, price, stock) VALUES
  ('Notebook', 3.50, 100),
  ('Pen',      1.20,  40),
  ('Backpack', 25.00, 10);

Текчеде үч товар бар. Төмөндөгүлөрдүн баары ушул таблицалар өзгөргөндө автоматтык иштеген жүрүм-турумду кошот.

Бул сабакты YourAIZone платформасында улантыңыз

Толук сабакта — толук түшүндүрмө, чыгарылган мисалдар, көп кездешкен каталар, заматта текшерилүүчү тесттер жана ЖИ-репетитор. Конок катары дароо баштаңыз же прогрессти сактоо үчүн аккаунт түзүңүз.

Толук сабакта

  • Толук түшүндүрмө
  • Чыгарылган мисалдар
  • Көп кездешкен каталар жана алардан кантип качуу керек
  • Тест суроолору: 15
  • Тема боюнча суроолорго жооп берген ЖИ-репетитор
  • Окуучу, ата-эне жана мугалим үчүн прогрессти көзөмөлдөө