PostgreSQL
PostgreSQL
Phần tiêu đề “PostgreSQL”PostgreSQL là open-source relational database mạnh mẽ.
Setup
Phần tiêu đề “Setup”# Installbrew install postgresql # macOSsudo apt install postgresql # Linux
# Start servicebrew services start postgresqlBasic SQL
Phần tiêu đề “Basic SQL”-- Create tableCREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, created_at TIMESTAMP DEFAULT NOW());
-- Insert dataINSERT INTO users (name, email)VALUES ('Phi', 'phi@example.com');
-- QuerySELECT * FROM users WHERE email = 'phi@example.com';
-- UpdateUPDATE users SET name = 'Anh Phi' WHERE id = 1;
-- DeleteDELETE FROM users WHERE id = 1;Relationships
Phần tiêu đề “Relationships”CREATE TABLE posts ( id SERIAL PRIMARY KEY, title VARCHAR(200) NOT NULL, user_id INTEGER REFERENCES users(id), created_at TIMESTAMP DEFAULT NOW());
-- Join querySELECT users.name, posts.titleFROM usersJOIN posts ON users.id = posts.user_id;Using with Node.js (pg library)
Phần tiêu đề “Using with Node.js (pg library)”import pg from "pg";
const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL,});
// Queryconst result = await pool.query("SELECT * FROM users");console.log(result.rows);
// Parameterized query (prevent SQL injection)const user = await pool.query("SELECT * FROM users WHERE email = $1", ["phi@example.com"]);Prisma ORM
Phần tiêu đề “Prisma ORM”model User { id Int @id @default(autoincrement()) name String email String @unique posts Post[] createdAt DateTime @default(now())}
model Post { id Int @id @default(autoincrement()) title String author User @relation(fields: [authorId], references: [id]) authorId Int}import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
// Create userconst user = await prisma.user.create({ data: { name: "Phi", email: "phi@example.com", },});
// Find usersconst users = await prisma.user.findMany({ include: { posts: true },});