Crearea unei constrângeri de cheie primară sql. SQL – cheie primară

05.03.2020 Video

CHEIA PRIMARĂ- cheie primară, o constrângere care permite ca fiecare înregistrare din tabel să fie identificată în mod unic SQL.

CHEIE PRIMARĂ Oracle
Cheie primară ( CHEIA PRIMARĂ) poate limita tabelele sau coloanele acestora. Această constrângere funcționează în același mod ca și constrângerea UNIQUE. Dar trebuie făcută o distincție între cheile primare și unicitatea coloanei în modul în care sunt utilizate cu cheile străine. Cheile primare nu pot permite valori nule. Aceasta înseamnă că, ca și câmpurile dintr-o constrângere UNIQUE, orice câmp folosit în constrângere CHEIA PRIMARĂ, trebuie deja declarat NOT NULL.

CHEIE PRIMARĂ Oracle. Exemplul nr. 1.
Exemplu de creare a unui tabel SQL cu limitare CHEIA PRIMARĂ:

Student
(Numărul întreg Kod_stud NOT NULL CHEIA PRIMARĂ,
Fam char(30) NOT NULL UNIQUE,
Adrese char(50),
bile zecimală);

Cel mai bine este să puneți o constrângere CHEIA PRIMARĂîn câmpul (sau câmpurile) care vor forma un identificator unic de rând și vor păstra constrângerea UNIQUE pentru câmpurile care trebuie să fie unice din punct de vedere logic (cum ar fi numerele de telefon sau câmpul nume) și nu pentru identificarea rândurilor. Prescripţie CHEIA PRIMARĂ poate fi aplicat și la mai multe câmpuri care alcătuiesc o combinație unică de valori:

CHEIE PRIMARĂ Oracle. Exemplul nr. 2.

CREAȚI TABEL Student
(Fam char (30) NOT NULL,
Sunt char (30) NOT NULL
Adrese char (50),
CHEIA PRIMARĂ(Fam, Im));

CHEIE PRIMARĂ MySQL

CHEIE PRIMARĂ SQL / MySQL. Exemplul nr. 3.

CREAȚI TABEL Persoane (
P_Id int NU NULL,
LastName varchar(255) NOT NULL,
Prenume varchar(255),
Adresa varchar(255),
Orașul varchar(255),
CHEIA PRIMARĂ(P_Id));

CHEIE PRIMARĂ SQL / MySQL. Exemplul nr. 4.

CREAȚI TABEL`ad_packages` (
`id` int(111) NOT NULL auto_increment,
`title` varchar(132) NOT NULL implicit ",
`price` float NOT NULL implicit '0',
`type` varchar(22) NOT NULL implicit ",
`c_type` enum('cash','points','rur') NOT NULL implicit 'cash',
CHEIA PRIMARĂ(`id`)
);

CHEIE PRIMARĂ SQL / MySQL. Exemplul nr. 5.

CREAȚI TABEL `gameestat` (
`id` int(11) NOT NULL auto_increment,
`game` varchar(10) NOT NULL implicit 'tuz',
`stavok` int(11) NOT NULL implicit '0',
`usd` float NOT NULL implicit '0',
`rur` float NOT NULL implicit '0',
`point` float NOT NULL implicit '0',
`bank_usd` decimal(12,2) NOT NULL implicit '0.00',
`bank_rur` decimal(12,2) NOT NULL implicit '0.00',
`bank_point` decimal(12,2) NOT NULL implicit '0.00',
CHEIE PRIMARĂ (`id`)
);

Cheia primară este un câmp dintr-un tabel care identifică în mod unic fiecare rând/înregistrare dintr-un tabel de bază de date. Cheile primare trebuie să conțină valori unice. Coloana cheii primare nu poate avea o valoare.

Un tabel poate avea o singură cheie primară, care poate consta din unul sau mai multe câmpuri. Când mai multe câmpuri sunt folosite ca cheie primară, ele sunt numite cheie compusă.

Dacă un tabel are o cheie primară definită pentru orice câmp(e), atunci nu puteți avea două înregistrări care au aceeași valoare pentru acel câmp(e).

Nota– Puteți utiliza aceste concepte atunci când creați tabele de baze de date.

Crearea unei chei primare

Aici este sintaxa pentru a defini atributul ID ca cheie primară în tabelul Clienți.

CREATE TABLE CLIENTS(ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25) , SALARY DECIMAL (18, 2), PRIMARY KEY (ID));

Pentru a crea o constrângere a cheii primare pe coloana „ID” atunci când tabelul CLIENTI există deja, utilizați următoarea sintaxă SQL:

ALTER TABLE CLIENTS ADAD CHEIE PRIMARĂ (ID);

Nota

Dacă utilizați instrucțiunea ALTER TABLE pentru a adăuga o cheie primară, coloanele cheii primare trebuie să fi fost deja declarate ca neconținând valori NULL (dacă tabelul a fost creat mai întâi).

Pentru a defini o cheie primară pe mai multe coloane, utilizați sintaxa SQL de mai jos:

CREATE TABLE CLIENTS(ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25) , SALARY DECIMAL (18, 2), PRIMARY KEY (ID, NUME));

Pentru a crea o constrângere a cheii primare pe coloanele ID și NAME atunci când tabelul CUSTOMERS există deja, utilizați următoarea sintaxă SQL.

ALTER TABLE CLIENTS ADD CONSTRAIN PK_CUSTID CHEIE PRIMARĂ (ID, NUME);

Ștergerea unei chei primare

Puteți șterge constrângerile cheii primare dintr-un tabel utilizând sintaxa de mai jos.

ALTER TABLE CLIENȚII PIDĂ CHEIA PRIMARĂ;

SE APLICĂ LA: SQL Server (din 2016)Bază de date SQL AzureAzure SQL Data WarehouseDepozit de date paralel

Puteți defini o cheie primară în SQL Server 2016 utilizând SQL Server Management Studio sau Transact-SQL. Crearea unei chei primare creează automat un index unic corespunzător grupat sau nonclustered.

În această secțiune

    Înainte de a începe, parcurgeți următorii pași.

    Restricții

    Siguranţă

    Creați o cheie primară folosind:

    SQL Server Management Studio

Restricții

    Un tabel poate avea o singură constrângere de cheie primară.

    Toate coloanele cu o constrângere PRIMARY KEY trebuie să fie NOT NULL. Dacă nulitatea nu este specificată, atunci indicatorul NOT NULL este setat pentru toate coloanele cu constrângerea PRIMARY KEY.

Siguranţă

Permisiuni

Crearea unui tabel nou cu o cheie primară necesită permisiunea CREATE TABLE pe baza de date și permisiunea ALTER pe schema în care este creat tabelul.

Crearea unei chei primare pe un tabel existent necesită permisiunea ALTER pe tabel.

Crearea unei chei primare

    În Object Explorer, faceți clic dreapta pe tabelul la care doriți să adăugați o constrângere unică și selectați Constructor.

    ÎN Designer de mese Faceți clic pe selectorul de rând pentru coloana bazei de date pe care doriți să o definiți ca cheie primară. Pentru a selecta mai multe coloane, țineți apăsată tasta CTRL și faceți clic pe selectoarele de rând pentru coloanele rămase.

    Faceți clic dreapta pe Selectorul de rânduri de coloană și selectați Setați cheia primară.

Coloana sursă a cheii este identificată prin simbolul cheii primare în selectorul de rând corespunzător.

Dacă cheia primară constă din mai multe coloane, atunci pot exista valori duplicate într-o coloană, dar toate combinațiile de valori din toate coloanele cheii primare trebuie să fie unice.

Când definiți o cheie compusă, ordinea coloanelor din cheia primară este aceeași cu ordinea coloanelor afișate în tabel. Cu toate acestea, după ce cheia primară este creată, ordinea coloanelor poate fi schimbată. Pentru mai multe informații, consultați .

Creați o cheie primară pe un tabel existent

    ÎN Explorator de obiecte

    Creați o cerere.

    Executa. Acest exemplu creează o cheie primară în coloana TransactionID.

    UTILIZAȚI AdventureWorks2012; MERGE ALTER TABLE Production.TransactionHistoryArchive ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID); MERGE

Crearea unei chei primare într-un tabel nou

    ÎN Explorator de obiecte Conectați-vă la o instanță a motorului de bază de date.

    Pe panoul standard, selectați Creați o cerere.

    Copiați următorul exemplu în fereastra de interogare și faceți clic pe butonul Executa. Acest exemplu creează un tabel și definește o cheie primară pentru coloana TransactionID.

    UTILIZAȚI AdventureWorks2012; MERGE CREATE TABLE Production.TransactionHistoryArchive1 (TransactionID int NOT NULL , CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID)); MERGE

    Pentru mai multe informații, consultați secțiunile și .

În timpul procesului de proiectare a bazei de date, se iau decizii cu privire la ce tabele ar trebui incluse în baza de date, ce nume vor avea (identificatori), ce tipuri de date vor fi necesare pentru a construi tabelele și ce utilizatori vor avea acces la fiecare dintre ele. . În plus, pentru a crea în mod eficient tabele, trebuie să răspundeți la următoarele întrebări:

  • Ce tip și dimensiunea coloanelor vor alcătui fiecare dintre tabele și ce nume ar trebui să alegeți pentru coloanele din tabel?
  • Ce coloane pot conține o valoare NULL?
  • Vor fi folosite? constrângeri de integritate, valorile implicite și regulile pentru coloane?
  • Este necesară indexarea coloanelor, ce tipuri de indici vor fi aplicate anumitor coloane?
  • Ce coloane vor fi incluse în cheile primare și străine.

Pentru a crea tabele în mediul MS SQL Server, utilizați comanda:

<определение_таблицы>::= CREATE TABLE [nume_bază de date.[proprietar].<элемент_таблицы>| proprietar. ]nume_tabel (

<элемент_таблицы> ::= {<определение_столбца>} | <имя_столбца>[,...n])<выражение> | <ограничение_таблицы>

CA

<Выражение>De obicei, proprietarul unui tabel (dbo) este persoana care l-a creat. setează valoarea pentru. coloană calculată Coloane calculate setează valoarea pentru- acestea sunt coloane virtuale, adică nu sunt stocate fizic în tabel și sunt calculate folosind valorile coloanelor aceluiași tabel. În expresia pentru coloană calculată pot exista nume de coloane obișnuite, constante și funcții legate de unul sau mai mulți operatori. Subinterogările nu pot participa la o astfel de expresie. coloană calculată poate fi inclus într-o clauză SELECT atunci când se specifică o listă de coloane care urmează să fie returnate ca rezultat al interogării. nu pot fi incluse într-o cheie străină; valorile implicite nu sunt utilizate pentru ele. In plus, coloane calculate

<определение_столбца>nu poate participa la operațiunile INSERT și DELETE.<тип_данных>::= (nume_coloană<выражение>) [ [ IMPLICIT<ограничение_столбца>] | [ IDENTITATE (început, pas) ]]] [

][...n]] În definiția coloanei, acordați atenție parametrului IDENTITATE, care indică faptul că coloana corespunzătoare va fi coloană contor

. Doar o coloană cu această proprietate poate fi definită per tabel. În plus, puteți specifica valoarea inițială și pasul de creștere. Dacă aceste valori nu sunt specificate, ambele sunt implicite la 1. Dacă se specifică NOT FOR REPLICATION cu cuvântul cheie IDENTITY, serverul nu va genera automat valori pentru acea coloană, dar va permite inserarea unor valori arbitrare în coloana. Restricțiile utilizate sunt restricții de coloană Şi restricții de masă . Diferența dintre ele este că constrângere pe coloană constrângere de masă- la grupuri de unul sau mai multe câmpuri.

<ограничение_столбца>::= [ CONSTRAINT constraintname ] ( [ NULL | NOT NULL ] | [ (PRIMARY KEY | UNIQUE ) [ CLUSTERED | NONCLUSTERED ] [ WITH FILLFACTOR=fillfactor ] [ ON (filegroupname | DEFAULT ) ] ] ] | [ [ FOREIGN KEY ] REFERINȚE table_name [(nume_coloană_table_gen) ] [ ON DELETE ( CASCADE | FĂRĂ ACȚIUNE ) ] [ ON UPDATE ( CASCADE | NU ACTION ) ] [ NU PENTRU REPLICAȚIE ]] |<лог_выражение>) } <ограничение_таблицы>::= ( [ (CHEIE PRIMARĂ | UNIC ) [ CLUSTER | NONCLUSTER ] ((nume_coloană [,...n])) ] |CHEIE străină[(nume_coloană [,...n])] REFERINȚE nume_tabel [(nume_coloană gen_tabel [ ,...n])] [ ON DELETE ( CASCADE | NO ACTION ) ] [ ON UPDATE ( CASCADE | NO ACTION ) ] | NOT FOR REPLICATION ] | VERIFICAȚI [ NOT FOR REPLICATION ] (expresie logică) )

Să luăm în considerare parametrii individuali ai modelelor prezentate asociați cu restricții integritatea datelor. Constrângeri de integritate au prioritate față de declanșatoare, reguli și valori implicite. LA constrângeri de integritate include constrângerea cheii primare CHEIA PRIMARĂ constrângerea cheii externe CHEIE străină, constrângere UNIQUE, constrângere NULL, constrângere CHECK.

Constrângere cheie primară (PRIMARY KEY)

Un tabel are de obicei o coloană sau o combinație de coloane ale căror valori identifică în mod unic fiecare rând din tabel. Această coloană (sau coloane) este numită cheie primară tabel și este necesar pentru a-i asigura integritatea. Dacă cheia primară conține mai mult de o coloană, atunci valorile dintr-o coloană pot fi duplicate, dar orice combinație a valorilor tuturor coloanelor cheie primară trebuie să fie unic.

La crearea cheie primară SQL Server creează automat un index unic pe coloanele care fac parte din cheia primară. Acesta accelerează accesul la date al acestor coloane atunci când este utilizat cheie primarăîn cereri.

Un tabel poate avea o singură constrângere PRIMARY KEY și niciuna dintre coloanele incluse în cheia primară nu poate fi NULL. Când încerci să-l folosești ca cheie primară coloană (sau grup de coloane) pentru care constrângerile cheii primare nu sunt executate, cheia primară nu va fi creată, iar sistemul va afișa un mesaj de eroare.

Deoarece constrângerea PRIMARY KEY asigură că datele sunt unice, este adesea definită ca coloane de contor. Creare constrângeri de integritate CHEIA PRIMARĂ este posibilă atât în ​​timpul creării, cât și când schimbând masa. Una dintre numiri cheie primară este prevederea integritate referenţială date din mai multe tabele. Desigur, acest lucru poate fi implementat doar prin definirea cheilor externe corespunzătoare în alte tabele.

CONSTRINGERE CHEIE STRĂINĂ

Constrângere cheie străină este mecanismul principal de menţinere integritate referenţialăîntre tabele dintr-o bază de date relațională. O coloană de tabel copil specificată ca cheie străină în parametrul CHEIE STRĂINĂ este utilizată pentru a face referire la o coloană de tabel părinte care se află în ea cheie primară. Numele tabelului părinte și coloanele acestuia cheie primară sunt specificate în clauza REFERENCES. Datele din coloanele definite ca o cheie străină pot avea doar aceleași valori ca cele din coloanele asociate cu aceasta cheie primară masa părintelui. Nu este necesar ca numele coloanelor să se potrivească pentru a lega tabelele copil și părinte. O cheie primară poate fi definită pe o coloană cu un nume, în timp ce o coloană care este supusă unei constrângeri FOREIGN KEY poate avea un nume complet diferit. Singura cerință este ca coloanele să se potrivească cu tipul și dimensiunea datelor.

O cheie primară poate fi referită nu numai prin coloanele din alte tabele, ci și prin coloanele situate în același tabel ca și cheia primară în sine; aceasta vă permite să creați structuri recursive.

O cheie străină poate fi asociată nu numai cu cheie primară altă masă. Poate fi definit pentru coloanele UNIQUE ale celui de-al doilea tabel sau orice alte coloane, dar tabelele trebuie să fie în aceeași bază de date.

Coloanele cu cheie străină pot conține o valoare NULL, dar verificarea constrângerii CHEIE străină este ignorată. Cheia externă poate fi indexată, apoi serverul va găsi mai repede datele necesare. Cheia externă este definită atât la creare, cât și la mese de schimbare.

Prescripţie integritate referenţială specifică cerința ca pentru fiecare înregistrare din tabelul copil să existe o înregistrare în tabelul părinte. În acest caz, modificarea valorii unei coloane de relație într-o înregistrare a tabelului părinte în prezența unei înregistrări copil este blocată, precum și ștergerea înregistrării părinte (interzicerea modificărilor și ștergerilor în cascadă), care este garantată implicit. ON DELETE NO ACTION și ON UPDATE NO ACTION parametrii. Pentru a activa efectele în cascadă, utilizați parametrii ON DELETE CASCADE și ON UPDATE CASCADE.

Ultima actualizare: 27.04.2019

Cheile externe vă permit să stabiliți relații între tabele. O cheie externă este setată pe coloanele dintr-un tabel dependent, subordonat și indică către una dintre coloanele din tabelul principal. De obicei, o cheie străină indică o cheie primară dintr-un tabel principal asociat.

Sintaxa generală pentru setarea unei chei externe la nivel de tabel este:

CHEIE străină (coloana1, coloana2, ... coloanaN) REFERINȚE tabel_principal (coloana_tabel_principal1, coloana_tabel_principal2, ... coloana_tabel_principalN)

Pentru a crea o constrângere de cheie externă, după FOREIGN KEY specificați o coloană de tabel care va reprezenta cheia externă. Iar după cuvântul cheie REFERENCES se indică numele tabelului aferent, iar apoi între paranteze numele coloanei aferente către care va indica cheia externă. După expresia REFERENCES există expresiile ON DELETE și ON UPDATE, care specifică acțiunea la ștergerea și, respectiv, actualizarea unui rând din tabelul principal.

De exemplu, să definim două tabele și să le legăm folosind o cheie străină:

CREATE TABLE Clienți (Id INT PRIMARY KEY AUTO_INCREMENT, Age INT, Prenume VARCHAR(20) NOT NULL, Nume VARCHAR(20) NOT NULL, Telefon VARCHAR(20) NOT NULL UNIQUE); CREATE TABLE Orders (Id INT CHEIE PRIMARIA AUTO_INCREMENT, CustomerId INT, CreatedAt Date, FOREIGN KEY (CustomerId) REFERINȚE Clienți (Id));

În acest caz, sunt definite tabelele Clienți și Comenzi. Clientii este principalul si reprezinta clientul. Comenzile sunt dependente si reprezinta comanda plasata de client. Tabelul Comenzi este legat prin coloana CustomerId la tabelul Customers și la coloana sa Id. Adică, coloana CustomerId este o cheie externă care indică către coloana Id din tabelul Customers.

Puteți utiliza operatorul CONSTRAINT pentru a specifica un nume pentru o constrângere de cheie străină:

CREATE TABLE Comenzi (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, CONSTRAINT orders_custonmers_fk FOREIGN KEY (CustomerId) REFERINȚE Clienți (Id));

ON DELETE și ON UPDATE

Folosind instrucțiunile ON DELETE și ON UPDATE, puteți seta acțiunile care se efectuează atunci când un rând aferent este șters sau modificat, respectiv, din tabelul principal. Următoarele opțiuni pot fi utilizate ca acțiune:

    CASCADE: Șterge sau modifică automat rândurile dintr-un tabel dependent atunci când rândurile înrudite din tabelul principal sunt șterse sau modificate.

    SET NULL: Când ștergeți sau actualizați un rând înrudit din tabelul principal, setați coloana cheii externe la NULL. (În acest caz, coloana cheii externe trebuie să accepte setarea NULL)

    RESTRICȚI: Respinge ștergerea sau modificarea rândurilor din tabelul principal dacă există rânduri înrudite în tabelul dependent.

    FĂRĂ ACȚIUNE: la fel ca RESTRICȚI.

    SETARE IMPLICIT: Când ștergeți un rând înrudit din tabelul principal, setează coloana cheii externe la valoarea implicită care este specificată folosind atributul DEFAULT. În ciuda faptului că această opțiune este disponibilă în principiu, motorul InnoDB nu acceptă această expresie.

Ștergere în cascadă

Ștergerea în cascadă vă permite să ștergeți automat toate rândurile asociate din tabelul dependent atunci când ștergeți un rând din tabelul principal. Pentru a face acest lucru, utilizați opțiunea CASCADE:

CREATE TABLE Orders (Id INT CHEIE PRIMARĂ AUTO_INCREMENT, CustomerId INT, CreatedAt Date, FOREIGN KEY (CustomerId) REFERINȚE Clienți (Id) ON DELETE CASCADE);

Expresia ON UPDATE CASCADE funcționează într-un mod similar. Când modificați valoarea unei chei primare, valoarea cheii străine asociate acesteia se schimbă automat. Cu toate acestea, deoarece cheile primare se schimbă foarte rar și, în general, nu este recomandat să folosiți coloane cu valori modificabile ca chei primare, expresia ON UPDATE este rar folosită în practică.

Setarea NULL

Când setați opțiunea SET NULL pentru o cheie străină, coloana cheii străine trebuie să fie permisă NULL:

CREATE TABLE Comenzi (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, FOREIGN KEY (CustomerId) REFERINȚE Clienți (Id) ON DELETE SET NULL);