Что такое DDL, DML, DCL и TCL в SQL

SQL-команды классифицируются по функциональным группам, каждая из которых предназначена для выполнения определенных операций с базами данных. Основные группы SQL-команд:

  • DDL (Data Definition Language) — язык определения данных.
  • DML (Data Manipulation Language) — язык манипуляции данными.
  • DCL (Data Control Language) — язык управления доступом.
  • TCL (Transaction Control Language) — язык управления транзакциями.

DDL (Data Definition Language)

DDL-команды используются для создания, изменения и удаления объектов базы данных, таких как таблицы и индексы. Эти команды изменяют структуру базы и автоматически фиксируются (commit), поэтому их нельзя откатить (rollback).

Основные команды DDL:

  • CREATE — создание объектов базы данных.
  • ALTER — изменение структуры существующих объектов.
  • DROP — удаление объектов.
  • TRUNCATE — очистка таблицы без фиксации изменений.

Пример создания таблицы

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100) UNIQUE
);

DML (Data Manipulation Language)

DML-команды используются для работы с данными в таблицах: их добавления, изменения и удаления. В отличие от DDL, изменения, выполненные DML-командами, можно откатить.

Основные команды DML:

  • INSERT — добавление данных.
  • UPDATE — обновление записей.
  • DELETE — удаление данных.
  • SELECT — выборка данных.

Пример вставки данных

INSERT INTO users (id, name, email) VALUES (1, 'Иван', 'ivan@example.com');

DCL (Data Control Language)

DCL-команды управляют правами доступа пользователей к объектам базы данных.

Основные команды DCL:

  • GRANT — предоставление прав.
  • REVOKE — отзыв прав.

Пример предоставления прав

GRANT SELECT, INSERT ON users TO some_user;

TCL (Transaction Control Language)

TCL-команды управляют транзакциями, обеспечивая атомарность операций.

Основные команды TCL:

  • COMMIT — фиксирует изменения.
  • ROLLBACK — отменяет изменения.
  • SAVEPOINT — создаёт точку сохранения внутри транзакции.

Пример работы с транзакцией

BEGIN;
UPDATE users SET email = 'new@example.com' WHERE id = 1;
ROLLBACK;