Weten hoe je tabellen maakt in SQL
is een belangrijk en fundamenteel begrip.
In deze tutorial zal ik je door de SQL
leiden syntaxis voor de CREATE TABLE
statement met codevoorbeelden voor zowel PostgreSQL als MySQL.
Basis CREATE TABLE
Syntaxis
Hier is de basissyntaxis voor de CREATE TABLE
verklaring:
CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
);
Voor het eerste deel moet je beginnen met de CREATE TABLE
statement gevolgd door de naam van de tabel die u wilt maken.
Als ik een tabel met lerareninformatie zou willen maken, dan zou ik zoiets als dit schrijven:
CREATE TABLE teachers();
Binnen de haakjes voegt u de informatie toe voor het maken van de kolommen voor de tabel. Als u de haakjes vergeet, krijgt u een foutmelding.
CREATE TABLE teachers;
De puntkomma aan het einde van de haakjes vertelt de computer dat dit het einde is van de SQL
uitspraak. Je zult dit wel eens een statement-terminator horen noemen.
Wat zijn MySQL
opslagengines?
Volgens de MySQL
documentatie:
Opslag-engines zijn MySQL-componenten die de SQL-bewerkingen voor verschillende tabeltypen afhandelen.
MySQL
gebruikt deze opslagengines om CRUD-bewerkingen (creëren, lezen, bijwerken en verwijderen) op de database uit te voeren.
In MySQL
, hebt u de mogelijkheid om het type opslagengine op te geven dat u voor uw tabel wilt gebruiken. Als u de ENGINE
. weglaat clausule dan is de standaard InnoDB.
CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
)ENGINE=storage_engine;
Wat is de IF NOT EXISTS
clausule?
Er is een optionele clausule genaamd IF NOT EXISTS
die zal controleren of de tabel die u wilt maken al in de database bestaat. U kunt die clausule net voor de tabelnaam plaatsen.
CREATE TABLE IF NOT EXISTS teachers();
Als de tabel al bestaat, zal de computer geen nieuwe tabel maken.
Als u de IF NOT EXISTS
. weglaat clausule en probeer een tabel te maken die al in de database bestaat, dan krijg je een foutmelding.
In dit voorbeeld heb ik eerst een tabel gemaakt met de naam docenten. Maar als ik diezelfde tabel in de volgende opdracht probeer te maken, zal ik een fout tegenkomen.
CREATE TABLE IF NOT EXISTS teachers();
CREATE TABLE teachers();
Kolommen maken in de tabel
Binnen de haakjes voor de CREATE TABLE
statement, gaat u de namen opsommen van de kolommen die u wilt maken, samen met hun gegevenstypen en beperkingen.
Dit is een voorbeeld van hoe we vier kolommen met school_id
. kunnen toevoegen , name
, email
en age
aan onze lerarentafel. Elke kolomnaam moet worden gescheiden door komma's.
CREATE TABLE teachers(
school_id data_type column_constraint,
name data_type column_constraint,
email data_type column_constraint,
age data_type column_constraint
);
Volgens de MySQL
documentatie:
MySQL heeft een harde limiet van 4096 kolommen per tabel, maar het effectieve maximum kan lager zijn voor een bepaalde tabel. De exacte kolomlimiet hangt van verschillende factoren af.
Als u werkt aan kleinere MySQL
persoonlijke projecten, dan hoeft u zich waarschijnlijk geen zorgen te maken over het overschrijden van het aantal kolommen voor uw tabellen.
Volgens de PostgreSQL-documentatie is er een limiet van 1600 kolommen per tabel. gelijk aan MySQL
, kan een exacte limiet variëren, afhankelijk van schijfruimte of prestatiebeperkingen.
Gegevenstypen in SQL
Wanneer u kolommen in de tabel maakt, moet u deze een gegevenstype toewijzen. Gegevenstypen beschrijven het type waarde in de kolommen.
Hier zijn zes populaire categorieën gegevenstypen in SQL
:
- Numeriek (int, float, serieel, decimaal, enz.)
- Gegevens en tijd (tijdstempel, gegevens, tijd, enz.)
- Teken en tekenreeks (char, varchar, tekst, enz.)
- Unicode (ntext, nvarchar, enz.)
- Binair (binair, enz.)
- Diversen (xml, tabel, enz.)
Dit artikel zal niet elk gegevenstype doornemen, maar zal enkele van de populaire behandelen.
Hier is de volledige lijst van PostgreSQL
gegevenstypen en MySQL
gegevens typen.
Wat is SERIAL
en AUTO_INCREMENT
?
In PostgreSQL
, een SERIAL
gegevenstype is een geheel getal dat automatisch met één wordt verhoogd voor elke nieuwe rij die wordt gemaakt.
We kunnen SERIAL
add toevoegen direct na de school_id
kolom in onze lerarentabel.
school_id SERIAL
In MySQL
, zou u AUTO_INCREMENT
. gebruiken in plaats van SERIAL
. In dit voorbeeld is de INT
gegevenstype wordt gebruikt dat een geheel getal vertegenwoordigt.
school_id INT AUTO_INCREMENT
Als we vijf rijen aan onze lerarentabel zouden toevoegen, zou de uitvoer de getallen 1, 2, 3, 4, 5 tonen voor de school_id
kolom omdat het gehele getal automatisch met één wordt verhoogd voor elke nieuwe rij.
Wat is de VARCHAR
data type?
Een VARCHAR
gegevenstype is een variabele tekenreekslengte waarbij u een maximale tekenlengte kunt instellen.
Dit is een voorbeeld van het gebruik van de VARCHAR
gegevenstype voor de name
en email
kolommen in onze docententabel. Het getal 30 is de maximale tekenlengte.
name VARCHAR(30) column_constraint,
email VARCHAR(30) column_constraint,
Kolombeperkingen in SQL
Dit zijn regels die worden toegepast op de gegevens in de tabelkolommen.
Hier is een lijst van enkele van de meest voorkomende kolombeperkingen:
- PRIMAIRE SLEUTEL - deze sleutel dient als een unieke identificatie voor de tabel
- BUITENLANDSE SLEUTEL - deze sleutel zorgt ervoor dat de waarden in een kolom ook in een andere tabel voorkomen. Dit dient als een koppeling tussen tabellen.
- UNIEK - alle waarden in de kolom moeten uniek zijn
- NIET NULL - de waarden kunnen niet NULL zijn. NULL is de afwezigheid van een waarde
- CHECK - test een waarde tegen een booleaanse uitdrukking
Voorbeelden van PRIMARY
en FOREIGN
toetsen
In onze lerarentabel kunnen we een PRIMARY KEY
. toevoegen naar de school_id
kolom.
Dit is hoe de code eruit zou zien in PostgreSQL:
school_id SERIAL PRIMARY KEY
Dit is hoe de code eruit zou zien in MySQL:
school_id INT AUTO_INCREMENT PRIMARY KEY
Als u meer dan één kolom wilt hebben voor de PRIMARY KEY
, dan zou je het direct na je kolomcreaties toevoegen.
CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
PRIMARY KEY (column1, column2)
);
Als u de ene tabel aan de andere wilt koppelen, kunt u een FOREIGN KEY
. gebruiken .
Laten we zeggen dat we een tabel hebben met de naam district_employees met als primaire sleutel district_id
. Hier is hoe de code eruit zou zien in PostgreSQL:
CREATE TABLE district_employees(
district_id SERIAL PRIMARY KEY,
employee_name VARCHAR(30) NOT NULL,
PRIMARY KEY(district_id)
);
In onze lerarentabel kunnen we een externe sleutel gebruiken en verwijzen naar de tabel district_employees.
district_id INT REFERENCES district_employees(district_id),
CREATE TABLE teachers(
school_id SERIAL PRIMARY KEY,
district_id INT REFERENCES district_employees(district_id),
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
);
Voorbeelden van NOT NULL
, CHECK
en UNIQUE
Als we er zeker van willen zijn dat we geen waarden hebben die null zijn, kunnen we de NOT NULL
gebruiken beperking.
name VARCHAR(30) NOT NULL
We kunnen de CHECK
. gebruiken beperking om ervoor te zorgen dat al onze leraren 18 jaar of ouder zijn. De CHECK
constraint test een waarde tegen een booleaanse uitdrukking.
age INT CHECK(age >= 18)
Als een van onze waarden niet aan die voorwaarde voldoet, krijgen we een foutmelding.
We kunnen de UNIQUE
. gebruiken beperking om ervoor te zorgen dat alle e-mails uniek zijn.
email VARCHAR(30) UNIQUE
Dit is het eindresultaat voor de lerarentafel:
Dit is hoe de code eruit zou zien in PostgreSQL:
CREATE TABLE teachers(
school_id SERIAL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(30) UNIQUE,
age INT CHECK(age >= 18)
);
Dit is hoe de code eruit zou zien in MySQL:
CREATE TABLE teachers(
school_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(30) UNIQUE,
age INT CHECK(age >= 18)
);
Ik hoop dat je genoten hebt van dit artikel en veel succes op je SQL-reis.