DDL (Definicja Danych Language) oraz DML (Dane Manipulacyjne Language) - to dwa kluczowe pojęcia w dziedzinie relacyjnych baz danych.
DDL (Definicja Danych)
DDL (Definicja Danych) - język
opisu danych. Język ten jest używany do opisu struktury bazy danych, tworzenia, modyfikowania i usuwania obiektów bazy danych. Tutaj mamy do czynienia z takimi obiektami, jak tabele, indeksy, schematy itp.
Na przykład, aby stworzyć nową tabelę w bazie danych w SQL, można użyć następującego kodu:
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
W tym przykładzie użyliśmy operacji DDL
CREATE TABLE, aby stworzyć nową tabelę o nazwie "users". Pola "id", "username" oraz "email" są opisane z ich typami danych i ograniczeniami, takimi jak
NOT NULL oraz
UNIQUE. Ponadto, określiliśmy, że wartość dla pola "created_at" będzie domyślnie aktualnym czasem (czas w momencie tworzenia).
W DDL istnieje kilka podstawowych operacji, które są używane do definiowania i zmiany struktury bazy danych:
CREATE: Ta operacja jest używana do tworzenia nowych obiektów bazy danych, takich jak tabele, indeksy itp.
ALTER: Za pomocą operacji ALTER można zmieniać strukturę już istniejących obiektów bazy danych, na przykład dodawać, zmieniać lub usuwać kolumny w tabeli.
DROP: Ta operacja jest używana do usuwania istniejących obiektów bazy danych, takich jak tabele, indeksy itp.
TRUNCATE: Operacja TRUNCATE jest używana do usuwania wszystkich rekordów z tabeli, zachowując samą tabelę.
RENAME: jest używana do zmiany nazw już istniejących obiektów bazy danych, takich jak tabele, kolumny, indeksy itp.
DML (Manipulacja Danymi)
DML (Manipulacja Danymi) - język manipulacji danymi. Jest używany do pracy z zawartością bazy danych, czyli do tworzenia, aktualizacji, usuwania i wybierania (wyszukiwania) danych z tabel.
Przyjrzyjmy się przykładom użycia operacji DML w SQL:
-- Dodanie nowego użytkownika
INSERT INTO users (username, email)
VALUES ('user_name', '[email protected]');
-- Aktualizacja danych użytkownika
UPDATE users
SET username = 'new_user_name'
WHERE id = 1;
-- Usunięcie użytkownika
DELETE FROM users
WHERE id = 1;
-- Wybór danych z tabeli
SELECT * FROM users;
W tych przykładach używamy operacji DML
INSERT,
UPDATE,
DELETE oraz
SELECT do tworzenia nowego rekordu w tabeli, aktualizacji informacji o użytkowniku, usunięcia użytkownika oraz uzyskania wszystkich użytkowników z tabeli odpowiednio.
Podstawowe operacje DML:
INSERT: Ta operacja jest używana do dodawania (tworzenia) nowych rekordów w bazie danych.
UPDATE: Operacja UPDATE pozwala na zmianę danych już istniejących rekordów w tabeli.
DELETE: Ta operacja jest używana do usuwania rekordów z tabeli bazy danych.
SELECT: Używana do wybierania (wyszukiwania) danych z tabel bazy danych.
Różnica między DML a DDL
Aby utrwalić materiał, powtórzmy różnicę między tymi dwoma terminami.
D
DL (Definicja
Danych) | D
ML (Manipulacja
Danymi)
Definicja i
Manipulacja - główne różnice terminów. Pierwszy (definicja) dotyczy
tabel (opisu, tworzenia, konfiguracji
tabel). Drugi (manipulacja) dotyczy
danych, a konkretnie manipulacji nimi (tworzenie, aktualizacja, usuwanie i wyszukiwanie
danych w tabeli).
DDL i DML w migracjach w Ruby on Rails
Przykład migracji DML w Ruby on Rails do dodania nowej kolumny do tabeli:
class AddNameToUsers < ActiveRecord::Migration[7.0]
def change
add_column :users, :name, :string
end
end
W tej migracji używamy metody
add_column, aby dodać nową kolumnę o nazwie "name" i typie "string" do tabeli "users".
Przykład migracji DDL w Ruby on Rails do stworzenia nowej tabeli:
class CreateProducts < ActiveRecord::Migration[7.0]
def change
create_table :products do |t|
t.string :name
t.decimal :price
t.timestamps
end
end
end
W tej migracji używamy metody
create_table, aby stworzyć nową tabelę "products" z kolumnami "name", "price" oraz znacznikami czasu "created_at" i "updated_at".
Przykład migracji w Ruby on Rails z
disable_ddl_transaction!
class AddIndexesToProducts < ActiveRecord::Migration[7.0]
disable_ddl_transaction!
def change
add_index :products, :name
add_index :products, :price
end
end
W tej migracji używamy
disable_ddl_transaction!, aby
wyłączyć transakcję DDL dla tworzenia indeksów na tabeli "products". Może to być przydatne w sytuacjach, gdy tworzenie indeksów zajmuje dużo czasu i chcesz wykonać tę operację bez oczekiwania na zakończenie transakcji. Ale co to jest transakcja i dlaczego należy ją wyłączyć?
Transakcje DDL (Definicja Danych) - to transakcje, które obejmują operacje zmieniające strukturę bazy danych. Takie operacje mogą obejmować tworzenie, modyfikowanie lub usuwanie tabel, kolumn, indeksów i innych obiektów bazy danych.
Kiedy wykonujesz operacje DDL (na przykład tworzenie tabeli lub dodawanie nowej kolumny), te operacje zazwyczaj są wykonywane w ramach
kontekstu transakcyjnego. Oznacza to, że będą one realizowane jako jedna
atomowa operacja - albo zostaną wykonane w całości, albo nie zostaną wykonane wcale.
Jednak w niektórych przypadkach, szczególnie gdy wykonujesz masowe operacje DDL, takie jak dodawanie indeksów do dużych tabel, włączenie kontekstu transakcyjnego może prowadzić do problemów z wydajnością (ponieważ tabela będzie zablokowana na czas transakcji, na przykład użytkownicy nie będą mogli składać nowych zamówień).
W takich przypadkach można używać
disable_ddl_transaction! w migracjach Ruby on Rails, aby wyłączyć kontekst transakcyjny dla operacji DDL. W ten sposób te operacje będą wykonywane bez oczekiwania na zakończenie transakcji.
disable_ddl_transaction! jest wygodne do używania, gdy chcesz uniknąć blokowania tabel podczas dużych operacji tworzenia lub zmiany schematu bazy danych. Ale musisz być pewny, że tę operację naprawdę można bezpiecznie wykonać poza transakcją.