Ташкили маънодори ҷадвалҳо
Дар лексияҳои гузаштаи мо аллакай каме бо дархостҳо барои ташкил намудани ҷадвалҳо шинос шудем, ҳоло вақти он расидааст, ки дар ин ҷиҳат баландтар шинос шавем.
Ташкил намудани ҷадвал бисёр ба эълони клаcс дар Java монанд аст ва он як қолаб дорад:
CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, ... );
Биё барои мисол дархосте нависем, ки ҷадвалро бо корбарон ташкил мекунад:
CREATE TABLE user ( id INT, name VARCHAR(100), level INT, created_date DATE );
Ба назар хеле сода менамояд, зеро ин ҷо бисёр нозукиҳо нишон дода нашудааст.
Аввалан, ҷадвал метавонад танзимоти иловагӣ дошта бошад.
Сониян, ҳар як сутун метавонад танзимоти иловагӣ дошта бошад.
Ва мо аз танзимоти ташкил намудани сутунҳо оғоз мекунем.
Калидҳо дар ҷадвал
Ба ғайр аз номи ва навъи додаҳо, сутуни ҷадвал метавонад чунин танзимҳо дошта бошад:
PRIMARY KEY | Сутун калиди ҷадвал аст |
UNIQUE KEY | Ҳамаи арзишҳои сутун бояд ягона бошанд |
DEFAULT value | Арзиши пешфарз |
NOT NULL | Манъияти қабул намудани арзиши NULL |
AUTO_INCREMENT | SQL-сервер ба таври автоматӣ арзишро ҳангоми илова кардани сатр нав дар ҷадвал зиёд мекунад |
GENERATED | Филдери ҳисобшаванда |
STORAGE | Дар куҷо нигоҳ доштани додаҳо: дар диска ё дар хотира |
COMMENT | Шарҳ ба сутун, масалан, номи дар забони маҳалӣ |
Дар зер мо баъзе аз онҳо муҳокима мекунем.
Аввалан, ин PRIMARY KEY.
Аксар вақт ин як сутуни ҷудогона бо номи id ва навъи INT мебошад. Ин ба ном “калиди асосӣ” ҷадвал аст, ва тамоми сатрҳои он арзишҳои яктои ин калид доранд. Пеш аз ҳама он барои он истифода мешавад, ки ҷадвалҳои дигар ба қайдҳои ҷадвали мо ишора кунанд ва нишонаи қайди муайянро нишон диҳанд.
Сониян, ин UNIQUE KEY.
Ба назар, он ба PRIMARY KEY монанд аст, гарчанде ки бори маъноии он тамоман дигар аст. Агар сутун дорои атрибути UNIQUE бошад, пас ҳама арзишҳои ин сутун бояд якто бошанд. Мисоли хуби фарқияти UNIQUE KEY ва PRIMARY KEY – ин рӯйхати одамон дар идораи шиноснома мебошад.
Рақами андоз – ин PRIMARY KEY, он барои он истифода мешавад, ки ба осонӣ ба шахси лозима ишора кунанд аз ҷадвалҳои дигар.
Шумораи шиноснома – ин UNIQUE KEY. Дар ду шахс бо шумораи шиносномаи якхела буда наметавонад. Аммо шумораи шиноснома мумкин аст тағйир дода шавад. Барои мисол, ҳангоми иваз намудани насаб. Аммо шумораи андоз дар назди шумо ҳамеша боқӣ мемонад. Ин ва ҳамин вазифаи асосии PRIMARY KEY аст. Мисоли дархост бо нишон додани PRIMARY KEY:
CREATE TABLE user ( id INT, name VARCHAR(100), level INT, created_date DATE, PRIMARY KEY (id) );
Танзимоти навъи додаҳо
Атрибутҳои камтар муҳим, вале муфид мавҷуданд.
DEFAUL value
Ҳангоми ворид намудани додаҳо (илова намудани сатри нав) дар ҷадвал метавонед арзишҳои баъзе сутунҳоро нишон надиҳед, агар онҳо арзиши пешфарз дошта бошанд. Дар чунин ҳолат SQL-сервер танҳо арзиши сутунро худ мустақилона мегузорад.
Аз версияи 8-и MySQL шурӯъ карда, ҳамчун арзиш метавон изҳороти ишора кард.
NOT NULL
Агар ҳангоми ташкил намудани ҷадвал дар сутун атрибут NOT NULL нишон дошта бошад, пас SQL-сервер онро назорат хоҳад кард, то ки дар ин сутун арзиши NULL сабт нашавад. Ба таври пешфарз дар ҳар гуна сутун метавонад арзиши NULL бошад, ҳатто дар сутуни бо навъи INT. Чизе, ки барои барномасози Java-истеъмолкунанда каме нофаҳмо аст.
AUTO_INCREMENT
Аксар вақт он барои сутунҳои id истифода мешавад. Вақте ки шумо сатри навро дар ҷадвал илова мекунед, хеле муҳим аст, ки SQL-сервер худ мустақилона id-ро ба ин қайд таълик кунад. Ва кӣ беҳтар аз сервер медонад, ки дар ҷадвал чанд сатр дорад. Хусусан агар ба як SQL-сервер дархостҳо аз мизоҷони гуногун раванд.
Маҳз ин ҳамон чизест, ки атрибути AUTO_INCREMENT иҷро мекунад. Ҳангоми илова намудани сатри нав мо танҳо ҳеҷ чизро чун id интиқол намедиҳем, ва SQL-сервер худ мустақилона ID-и лозимиро ба ин қайд таъин мекунад: он танҳо ID-и қайди охирини мавҷударо гирифта, онро ба 1 зиёд мекунад. Ин атрибутро танҳо бо навъҳои рақамҳои целалӣ ва рақамҳои ҳисоби истифода кардан мумкин аст. Ва албатта, биёед як мисоли ташкил намудани чунин ҷадвалро бикунем:
CREATE TABLE user ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(100) NOT NULL, level INT DEFAULT 1, created_date DATE NOT NULL, PRIMARY KEY (id) );
GO TO FULL VERSION