Referentiële integriteit (MySQL): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
(Een tussenliggende versie door dezelfde gebruiker niet weergegeven)
Regel 1: Regel 1:
Voorbeeld [http://www.databasejournal.com/features/mysql/article.php/2248101/Referential-Integrity-in-MySQL.htm]:
+
In bepaalde situaties is automatisch afdwingen of bijwerken van ''referentiële integriteit'' onmisbaar. Bv. als je data aanpast, en wilt dat die aanpassingen propageert.  
 +
 
 +
Simpel voorbeeld: De kaartenbak in de openbare bibliotheek. Op het moment dat ''Gerard van het Reve'' zijn naam verandert in ''Gerard Reve'', wil je dat die verandering ook wordt doorgevoerd in de kaarten die betrekking hebben op zijn boeken.
 +
 
 +
== Voorbeeld ==
  
 
<pre>
 
<pre>
CREATE TABLE customer  
+
drop table if exists customer;
 +
create table customer
 
(
 
(
    customer_id INT NOT NULL,
+
customer_id int not null,
     name       VARCHAR(30),
+
     name varchar(30),
     PRIMARY KEY (customer_id)
+
      
) TYPE = INNODB;
+
    primary key(customer_id)
 +
);
  
CREATE TABLE customer_sales  
+
drop table if exists customer_sales;
 +
create table customer_sales
 
(
 
(
    transaction_id INT NOT NULL,
+
transaction_id int not null,
     amount   INT,
+
     amount int,
     customer_id   INT NOT NULL,
+
     customer_id int not null,
     PRIMARY KEY(transaction_id),
+
      
     INDEX (customer_id),
+
    primary key (transaction_id),
     FOREIGN KEY (customer_id) REFERENCES customer (customer_id)  
+
     index (customer_id),
) TYPE = INNODB;
+
     foreign key (customer_id) references customer (customer_id)
 +
);
 +
 
 +
insert into customer
 +
values
 +
    (1, "Vos"),
 +
    (2, "Veldt");
 +
 
 +
insert into customer_sales
 +
values
 +
    (1, 123, 1), -- transactie #1: € 123 met klant Vos
 +
    (2, 234, 2), -- Transactie #2: € 234 met klant Veldt
 +
--    (3, 345, 12);    -- Geeft foutmelding: Klant "12" bestaat niet
 
</pre>
 
</pre>
  
Regel 23: Regel 42:
  
 
* https://dev.mysql.com/tech-resources/articles/mysql-enforcing-foreign-keys.html
 
* https://dev.mysql.com/tech-resources/articles/mysql-enforcing-foreign-keys.html
 +
* https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html

Versie van 24 apr 2017 17:19

In bepaalde situaties is automatisch afdwingen of bijwerken van referentiële integriteit onmisbaar. Bv. als je data aanpast, en wilt dat die aanpassingen propageert.

Simpel voorbeeld: De kaartenbak in de openbare bibliotheek. Op het moment dat Gerard van het Reve zijn naam verandert in Gerard Reve, wil je dat die verandering ook wordt doorgevoerd in de kaarten die betrekking hebben op zijn boeken.

Voorbeeld

drop table if exists customer;
create table customer
(
	customer_id int not null,
    name 		varchar(30),
    
    primary key(customer_id)
);

drop table if exists customer_sales;
create table customer_sales
(
	transaction_id	int not null,
    amount 			int,
    customer_id 	int not null,
    
    primary key (transaction_id),
    index (customer_id),
    foreign key (customer_id) references customer (customer_id)
);

insert into customer
values
    (1, "Vos"),
    (2, "Veldt");

insert into customer_sales
values
    (1, 123, 1),	-- transactie #1: € 123 met klant Vos
    (2, 234, 2),	-- Transactie #2: € 234 met klant Veldt
--    (3, 345, 12);     -- Geeft foutmelding: Klant "12" bestaat niet

Bronnen