Penciptaan jadual yang bermakna

Dalam kuliah sebelum ini, kita sudah berkenalan sedikit dengan pertanyaan untuk membuat jadual, kini tiba masanya untuk menyelidiki perkara ini dengan lebih mendalam.

Mencipta jadual sangat serupa dengan mengisytiharkan kelas di Jawa dan mempunyai corak ini:

CREATE TABLE table_name (
	column1 datatype,
	column2 datatype,
	column3 datatype,
   ....
);

Sebagai contoh, mari tulis pertanyaan yang mencipta jadual dengan pengguna:

CREATE TABLE user (
	id INT,
	name VARCHAR(100),
	level INT,
	created_date DATE,
);

Ia kelihatan sangat mudah, kerana banyak nuansa tidak ditunjukkan di sini.

Pertama, jadual mungkin mempunyai tetapan tambahan.

Dan kedua, setiap lajur boleh mempunyai tetapan tambahan.

Dan kita akan mulakan dengan tetapan untuk membuat lajur.

Kunci dalam jadual

Selain nama dan jenis data, lajur jadual juga boleh mempunyai tetapan berikut:

KUNCI UTAMA Lajur ialah kunci jadual
KUNCI UNIK Semua nilai lajur mestilah unik.
Nilai asal Nilai asal
BUKAN NULL Larangan menerima nilai NULL
AUTO_INCREMENT SQL Server akan menambah nilai secara automatik apabila rekod baharu ditambahkan pada jadual
DIJANA Medan yang dikira
PENYIMPANAN Di mana untuk menyimpan data: pada cakera atau dalam memori
KOMEN Komen lajur, cth. tajuk dalam bahasa tempatan

Di bawah ini kita akan melihat sebahagian daripada mereka.

Pertama, ia adalah KUNCI UTAMA .

Selalunya, ini adalah lajur berasingan dengan nama id dan jenis INT. Ini adalah apa yang dipanggil "kunci induk" jadual, dan semua barisnya mempunyai nilai unik untuk kunci ini. Ia digunakan terutamanya supaya jadual lain boleh merujuk kepada rekod jadual kami dan menunjuk kepada rekod khususnya.

Kedua ialah UNIQUE KEY .

Dalam beberapa cara, ia serupa dengan PRIMARY KEY, walaupun beban semantiknya berbeza sama sekali. Jika lajur mempunyai atribut UNIK, maka semua nilai dalam lajur itu mestilah unik. Contoh yang baik tentang perbezaan antara KUNCI UNIK dan KUNCI PRIMER ialah senarai orang di pejabat pasport.

Nombor cukai ialah KUNCI UTAMA, ia digunakan untuk memudahkan merujuk kepada orang yang betul dari jadual lain.

Nombor pasport adalah KUNCI UNIK. Tiada dua orang boleh mempunyai nombor pasport yang sama. Walau bagaimanapun, nombor pasport boleh ditukar. Contohnya, apabila menukar nama keluarga. Dan nombor cukai akan kekal bersama anda selama-lamanya. Ini adalah tugas utama KUNCI PRIMER. Contoh pertanyaan yang menyatakan KUNCI UTAMA:

CREATE TABLE user (
	id INT PRIMARY KEY,
	name VARCHAR(100),
	level INT,
	created_date DATE,
);

Tetapan jenis data

Terdapat sifat yang kurang penting tetapi berguna.

nilai DEFAUL

Apabila memasukkan data (menambah baris baharu) ke dalam jadual, anda boleh meninggalkan nilai beberapa lajur jika ia mempunyai nilai lalai. Dalam kes ini, pelayan SQL hanya akan menetapkan nilai lajur itu sendiri.

Bermula dengan versi 8 MySQL, anda boleh menentukan ungkapan sebagai nilai.

BUKAN NULL

Jika anda menentukan atribut NOT NULL untuk lajur semasa membuat jadual, maka SQL Server akan memastikan bahawa adalah mustahil untuk menyimpan nilai NULL dalam lajur ini. Secara lalai, mana-mana lajur boleh mempunyai nilai NULL, malah lajur INT. Yang agak tidak jelas untuk pengaturcara Java.

AUTO_INCREMENT

Ia biasanya digunakan untuk id lajur. Apabila anda menambah baris baharu pada jadual, anda benar-benar mahu pelayan SQL memberikan id untuk entri ini. Siapa yang lebih baik daripada pelayan tahu berapa banyak baris yang dia ada dalam jadual. Terutama jika permintaan daripada pelanggan yang berbeza pergi ke pelayan SQL yang sama.

Inilah yang dilakukan oleh atribut AUTO_INCREMENT. Apabila menambah baris baharu, kami hanya tidak menghantar apa-apa sebagai id dan pelayan SQL akan menentukan ID yang betul untuk rekod ini: ia hanya akan mengambil ID rekod sedia ada terakhir dan meningkatkannya sebanyak 1. Atribut ini hanya boleh digunakan dengan jenis integer dan nombor nyata. Dan, sudah tentu, mari kita buat contoh membuat jadual sedemikian:

CREATE TABLE user (
	id INT PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(100) NOT NULL,
	level INT DEFAULT 1,
	created_date DATE NOT NULL,
);