sql >> Database >  >> RDS >> Mysql

Een tabel maken in SQL - Voorbeeldquery van Postgres en MySQL

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 :

  1. Numeriek (int, float, serieel, decimaal, enz.)
  2. Gegevens en tijd (tijdstempel, gegevens, tijd, enz.)
  3. Teken en tekenreeks (char, varchar, tekst, enz.)
  4. Unicode (ntext, nvarchar, enz.)
  5. Binair (binair, enz.)
  6. 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.



  1. Hoe een id uit de database te halen bij het klikken op een lijstweergave-item in Android

  2. Wat is databasetesten en hoe voer je het uit?

  3. ClusterControl:Inleiding tot de nieuwe querymonitor

  4. Hoe gebruik je scriptvariabelen in psql?