Menggunakan Foreign Keys


Sebuah constraint foreign key tidak diperlukan hanya untuk join dua tabel. Untuk mesin penyimpanan selain InnoDB, adalah mungkin ketika mendefinisikan kolom untuk menggunakan klausa REFERENCES tbl_name (col_name), yang tidak memiliki efek yang sebenarnya, dan hanya berfungsi sebagai memo atau komentar kepada anda bahwa kolom yang sedang anda definisikan dimaksudkan untuk merujuk ke kolom di tabel lain. Hal ini sangat penting untuk menyadari ketika menggunakan sintaks ini:

  • MySQL tidak melakukan CHECK untuk memastikan bahwa col_name benar-benar ada pada tbl_name (atau bahkan tbl_name sendiri ada).
  • MySQL tidak melakukan segala macam tindakan terhadap tbl_name seperti menghapus baris dalam respon terhadap tindakan yang diambil pada baris dalam tabel yang anda definisikan, dalam kata lain, sintaks ini menyebabkan tidak ada perilaku ON DELETE atau ON UPDATE. (Meskipun anda dapat menulis klausa ON DELETE atau ON UPDATE sebagai bagian dari klausa REFERENCES, itu juga diabaikan.)
  • Sintaks ini menciptakan kolom, itu tidak menciptakan segala macam indeks atau key.

Anda dapat menggunakan kolom sehingga dibuat sebagai kolom join, seperti yang ditunjukkan di sini:

mysql> CREATE TABLE person (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
name CHAR(60) NOT NULL,
PRIMARY KEY (id)
);

mysql> CREATE TABLE shirt (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
style ENUM(‘t-shirt’, ‘polo’, ‘dress’) NOT NULL,
color ENUM(‘red’, ‘blue’, ‘orange’, ‘white’, ‘black’) NOT NULL,
owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),
PRIMARY KEY (id)
);

mysql> INSERT INTO person VALUES (NULL, ‘Antonio Paz’);

mysql> SELECT @last := LAST_INSERT_ID();

mysql> INSERT INTO shirt VALUES
(NULL, ‘dress’, ‘orange’, @last),
(NULL, ‘polo’, ‘red’, @last),
(NULL, ‘dress’, ‘blue’, @last),
(NULL, ‘t-shirt’, ‘white’, @last);

mysql> INSERT INTO person VALUES (NULL, ‘Liliana Angelovska’);

mysql> SELECT @last := LAST_INSERT_ID;

INSERT INTO shirt VALUES (NULL, ‘dress’, ‘orange’, @last),

(NULL, ‘polo’, ‘red’, @last),

(NULL, ‘dress’, ‘blue’, @last),

(NULL, ‘t-shirt’, ‘white’, @last);

mysql> SELECT s.* FROM person p INNER JOIN shirt s
-> ON s.owner = p.id
-> WHERE p.name LIKE ‘Liliana%’
-> AND s.color <> ‘white’;

Ketika digunakan dalam mode ini, klausa REFERENCES tidak ditampilkan dalam output dari SHOW CREATE TABLE atau DESCRIBE:

mysql> SHOW CREATE TABLE shirt \G
*************************** 1. row ***************************

Table: shirt
Create Table: CREATE TABLE `shirt` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`style` enum(‘t-shirt’,’polo’,’dress’) NOT NULL,
`color` enum(‘red’,’blue’,’orange’,’white’,’black’) NOT NULL,
`owner` smallint(5) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

Penggunaan REFERENCES dengan cara ini sebagai sebuah komentar atau “pengingat” dalam definisi kolom bekerja dengan tabel MyISAM.

Iklan
  1. No trackbacks yet.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: