MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Atributele coloanelor și tabelelor

Cu ajutorul atributelor, poți configura comportamentul coloanelor. Să examinăm ce atribute putem utiliza.

PRIMARY KEY

Atributul PRIMARY KEY stabilește cheia primară a unei tabele.

USE productsdb;

CREATE TABLE Customers
(
   Id INT PRIMARY KEY,
   Age INT,
   FirstName VARCHAR(20),
   LastName VARCHAR(20)
);

Cheia primară identifică în mod unic o înregistrare într-o tabelă. Ca și cheie primară, nu este neapărat să folosești coloane de tip int; acestea pot să reprezinte orice alt tip.

Setarea cheii primare la nivelul tabelei:

USE productsdb;
CREATE TABLE Customers
(
   Id INT,
   Age INT,
   FirstName VARCHAR(20),
   LastName VARCHAR(20),
   PRIMARY KEY(Id)
);

Cheia primară poate fi compusă. Acest tip de cheie implică utilizarea simultană a mai multor coloane pentru a identifica în mod unic o înregistrare într-o tabelă. De exemplu:

CREATE TABLE OrderLines
(
   OrderId INT,
   ProductId INT,
   Quantity INT,
   Price MONEY,
   PRIMARY KEY(OrderId, ProductId)
)

Aici, câmpurile OrderId și ProductId funcționează împreună ca o cheie primară compusă. Cu alte cuvinte, în tabela OrderLines nu pot exista două înregistrări în care ambele aceste câmpuri să aibă aceleași valori simultan.

Atributul AUTO_INCREMENT

AUTO_INCREMENT este un atribut care permite specificarea faptului că valoarea unei coloane va crește automat la adăugarea unei noi înregistrări. Acest atribut funcționează pentru coloanele care reprezintă un tip întreg sau numere în virgulă mobilă.

CREATE TABLE Customers
(
   Id INT PRIMARY KEY AUTO_INCREMENT,
   Age INT,
   FirstName VARCHAR(20),
   LastName VARCHAR(20)
);

În acest caz, valoarea coloanei "Id" pentru fiecare nouă înregistrare adăugată va crește cu una.

Atributul UNIQUE

Atributul UNIQUE indică faptul că o coloană poate stoca doar valori unice.

CREATE TABLE Customers
(
   Id INT PRIMARY KEY AUTO_INCREMENT,
   Age INT,
   FirstName VARCHAR(20),
   LastName VARCHAR(20),
   Phone VARCHAR(13) UNIQUE
);

În acest caz, coloana "Phone", care reprezintă numărul de telefon al clientului, poate să stocheze doar valori unice. Nu vom putea adăuga două înregistrări în tabel cu aceleași valori pentru această coloană.

De asemenea, putem defini acest atribut la nivelul întregii tabele:

CREATE TABLE Customers
(
   Id INT PRIMARY KEY AUTO_INCREMENT,
   Age INT,
   FirstName VARCHAR(20),
   LastName VARCHAR(20),
   Email VARCHAR(30),
   Phone VARCHAR(20),
   UNIQUE(Email, Phone)
);

NULL și NOT NULL

Pentru a indica dacă o coloană poate să accepte valoarea NULL, la definirea coloanei i se poate atribui atributul NULL sau NOT NULL. Dacă acest atribut nu este utilizat explicit, atunci implicit coloana va permite valoarea NULL. Excepția este atunci când coloana acționează ca și cheie primară - în acest caz, implicit, coloana are atributul NOT NULL.

CREATE TABLE Customers
(
   Id INT PRIMARY KEY AUTO_INCREMENT,
   Age INT,
   FirstName VARCHAR(20) NOT NULL,
   LastName VARCHAR(20) NOT NULL,
   Email VARCHAR(30) NULL,
   Phone VARCHAR(20) NULL
);

În acest caz, coloana "Age" va avea implicit atributul NULL.

Atributul DEFAULT

Atributul DEFAULT stabilește o valoare implicită pentru o coloană. Dacă la adăugarea datelor pentru o coloană nu este furnizată o valoare, atunci va fi utilizată valoarea implicită.

CREATE TABLE Customers
(
   Id INT PRIMARY KEY AUTO_INCREMENT,
   Age INT DEFAULT 18,
   FirstName VARCHAR(20) NOT NULL,
   LastName VARCHAR(20) NOT NULL,
   Email VARCHAR(30) NOT NULL UNIQUE,
   Phone VARCHAR(20) NOT NULL UNIQUE
);

În acest caz, coloana "Age" are valoarea implicită setată la 18.

Atributul CHECK

Atributul CHECK stabilește o restricție pentru intervalul de valori care pot fi stocate într-o coloană. Pentru acest atribut, după CHECK, se specifică în paranteze condiția pe care coloana sau mai multe coloane trebuie să o îndeplinească. De exemplu, vârsta clienților nu poate fi mai mică de 0 sau mai mare de 100:

CREATE TABLE Customers
(
   Id INT AUTO_INCREMENT,
   Age INT DEFAULT 18 CHECK(Age >0 AND Age < 100),
   FirstName VARCHAR(20) NOT NULL,
   LastName VARCHAR(20) NOT NULL,
   Email VARCHAR(30) CHECK(Email !=''),
   Phone VARCHAR(20) CHECK(Phone !='')
);

În plus față de verificarea vârstei, aici se verifică și faptul că coloanele "Email" și "Phone" nu pot avea o valoare de șir vid (șir vid nu este echivalent cu valoarea NULL).

Pentru a combina condițiile, se utilizează cuvântul cheie AND. Condițiile pot fi exprimate ca operații de comparație precum mai mare (>), mai mic (<), diferit de (!=).

De asemenea, atributul CHECK poate fi utilizat la nivelul întregii tabele:

CREATE TABLE Customers
(
   Id INT AUTO_INCREMENT,
   Age INT DEFAULT 18,
   FirstName VARCHAR(20) NOT NULL,
   LastName VARCHAR(20) NOT NULL,
   Email VARCHAR(30),
   Phone VARCHAR(20),
   CHECK((Age >0 AND Age<100) AND (Email !='') AND (Phone !=''))
);

Operatorul CONSTRAINT - Atribuirea numelui constrângerilor

Cu ajutorul cuvântului cheie CONSTRAINT, puteți atribui un nume constrângerilor. Acestea sunt specificate după cuvântul cheie CONSTRAINT înaintea atributelor la nivelul tabelului:

CREATE TABLE Customers
(
   Id INT AUTO_INCREMENT,
   Age INT,
   FirstName VARCHAR(20) NOT NULL,
   LastName VARCHAR(20) NOT NULL,
   Email VARCHAR(30),
   Phone VARCHAR(20) NOT NULL,
   CONSTRAINT customers_pk PRIMARY KEY(Id),
   CONSTRAINT customer_phone_uq UNIQUE(Phone),
   CONSTRAINT customer_age_chk CHECK(Age >0 AND Age<100)
);

În acest caz, constrângerea pentru PRIMARY KEY este denumită customers_pk, pentru UNIQUE -customer_phone_uq, iar pentru CHECK -customer_age_chk. Scopul atribuirii de nume constrângerilor constă în posibilitatea administrării acestora ulterior prin aceste nume - să le ștergem sau să le modificăm.

Numele pot fi atribuite pentru constrângerile PRIMARY KEY, CHECK, UNIQUE, precum și pentru FOREIGN KEY, care va fi discutat în continuare.

← Lecția anterioară Lecția următoare →