At some point we need to store the data to some place - that place is a database. In this post we will go through basics of what databases are and how to create your own. We will focus more on SQL databases for now.
What are databases
A database is just a place to store data in an organized way so that it can be easily accessed, searched, updated, or deleted later. There are many types of databases, but in this post we’ll focus on SQL databases, which are the most widely used for structured data. At its core, a database is often stored as a large text-like file under the hood. This file is then split into smaller chunks called “pages”, which the database engine uses to read and write data efficiently. Each of these pages contains rows of data, and those rows are what you interact with when you run a SQL query like SELECT * FROM users.
You don’t normally need to think about these low-level details, but it’s helpful to know that even though we use SQL to interact with a database, everything is ultimately stored as organized chunks of data behind the scenes.
We use SQL (Structured Query Language) to interact with databases—writing instructions to store, retrieve, and organize our data.
Parts of an SQL database
When working with SQL, it helps to understand the key parts that make up a database:
-
Database - A database is the main container that holds all of your data. You usually have one database per project.
💡 Think of it like a drawer—inside it, you can have different compartments for different types of information. -
Table - A table lives inside a database and stores data grouped by category.
For example:users,posts,commentsare all different tables that serve different purposes.
Think of a table as a specific section in your drawer. One section holds all your pencils, another all your notebooks. -
Row - A row is a single entry in a table—one piece of data.
If you’re looking at theuserstable, each row is one specific user (like Alice or Bob).
Think of a row as one specific item in your drawer section, like one individual pencil from the pencil section. -
Column - A column is an attribute or property of the data in the table.
For auserstable, common columns would be:id,name,email,created_at.
Think of columns as labels for what you want to remember about each item—like color or size for each pencil.Apart from that every table needs to have a column that is PRIMARY KEY. This is a unique ID for each row and its used to identify and connect data.
Working with SQL
Here we will learn how to write simple SQL for our current needs which for now is creating database and tables, and CRUD(Create, read, update, delete) from table. Later on we will learn advanced querying, relationships, indexes and other fun stuff.
Create Database
CREATE DATABASE mydatabase;
Creating database with a specific name(mydatabase).
Create Table
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(100),
email VARCHAR(255) UNIQUE NOT NULL
);
Creating a table with specific name (users) and we are defining 3 different columns. Notice that each column needs to have its type.
id- we define this as typeINTEGERmeaning its a full number. We also set this value to bePRIMARY KEYbut also asAUTOINCREMENTmeaning this value will be automatically incremented on each new inserted row. We don’t have to defineNOT NULLbecause PRIMARY KEY is by default not nullable.name- this is a typeVARCHARmeaning string but with a max allowed length of 100 characters. This field can benullemail- this is a typeVARCHARwith a max allowed length of 255 characters. We are also enforcing this field to be unique in all rows. This field can not benulldue toNOT NULL
Keep in mind that depending on the database engine that you are using some types are named differently or have some specifics on how its stored. But in this tutorial, we’re using SQLite, which is lightweight, beginner-friendly, and flexible enough for learning but for some intermediate work as well.
Insert data
INSERT INTO users (name, email)
VALUES ('Alice', 'alice@example.com')
or if you want to insert multiple values at once:
INSERT INTO users (name, email)
VALUES
('Bob', 'bob@example.com'),
('Charlie', 'charlie@example.com');
In both cases we are inserting in table users, and in first () we define which properties we are inserting then in VALUES(...) we define values for those properties.
Note that id doesn’t need to be defined as its set to AUTOINCREMENT and as such will be auto defined and auto incremented. If you wanted you could define it but its best to leave it like this(in 99% of cases).
Search data
SELECT *
FROM users
WHERE id = 1;
SELECT- Defines which columns you want to return. You can specify exact columns likeSELECT id, nameor use*to return all columns.FROM- Tells the database which table to get the data from (users).WHERE- Filters the data based on a condition (e.g., only return the row where id = 1).
More example with only WHERE part:
WHERE id > 1;
WHERE name = "test" AND id < 250 AND email LIKE char%;
Unlike JS where we have == for a comparison, in SQL we use only = for comparison.
ANDallows you to combine multiple conditions.LIKEis used for partial string matching. Use%as a wildcard:char%means “starts with char”%charmeans “ends with char”%char%means “contains char anywhere”
Update data
UPDATE users
SET name = 'Alice Johnson', email = 'alice.johnson@example.com'
WHERE id = 1;
-
UPDATE– Specifies the table you want to update the data in. -
SET– Defines which columns to update and their new values. If you’re updating multiple columns, you separate each pair with a comma.Example: name = ‘Alice Johnson’ and email = ‘alice.johnson@example.com’.
-
WHERE– Filters which rows to update. It’s just like a WHERE clause in a SELECT statement. This ensures you’re only updating the row(s) that meet your conditions (e.g., id = 1).Note: Without the
WHEREclause, every row in the table would be updated! Always be careful when usingUPDATEto include aWHEREclause unless you truly want to update all rows.Delete data
DELETE FROM users
WHERE id = 1;
-
DELETE– Tells the database you want to delete a row. -
FROM– Specifies the table you want to delete the data in. -
WHERE– Filters which rows to delete. It’s just like a WHERE clause in a SELECT statement. This ensures you’re only deleting the row(s) that meet your conditions (e.g., id = 1).Note: Without the
WHEREclause, every row in the table would be deleted! Always be careful when usingDELETEto include aWHEREclause unless you truly want to delete all rows.