Создание таблицы в SQL выполняется командой CREATE TABLE
. Вот базовый синтаксис:
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
...,
table_constraints
);
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
hire_date DATE DEFAULT CURRENT_DATE,
salary DECIMAL(10,2) CHECK (salary > 0),
department_id INT,
CONSTRAINT fk_department
FOREIGN KEY (department_id)
REFERENCES departments(department_id)
);
Каждый столбец определяется:
employee_id
)INT
, VARCHAR(50)
)NOT NULL
)Основные типы данных:
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) CHECK (price > 0),
category_id INT REFERENCES categories(category_id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE (product_name, category_id)
);
Основные ограничения:
PRIMARY KEY
- первичный ключFOREIGN KEY
- внешний ключNOT NULL
- запрет NULL значенийUNIQUE
- уникальные значенияCHECK
- проверка условияDEFAULT
- значение по умолчаниюДва способа определения:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT REFERENCES customers(customer_id),
...
);
CREATE TABLE order_items (
order_item_id INT PRIMARY KEY,
order_id INT,
product_id INT,
CONSTRAINT fk_order
FOREIGN KEY (order_id)
REFERENCES orders(order_id),
CONSTRAINT fk_product
FOREIGN KEY (product_id)
REFERENCES products(product_id)
);
CREATE TABLE high_paid_employees AS
SELECT * FROM employees WHERE salary > 100000;
-- Локальная временная таблица (SQL Server)
CREATE TABLE #temp_products (
product_id INT,
name VARCHAR(100)
);
-- Глобальная временная таблица (SQL Server)
CREATE TABLE ##global_temp (
id INT
);
-- Временная таблица (PostgreSQL)
CREATE TEMP TABLE temp_users AS
SELECT * FROM users WHERE last_login > CURRENT_DATE - INTERVAL '30 days';
-- Создать только если не существует (многие СУБД)
CREATE TABLE IF NOT EXISTS customers (
id INT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE sales (
sale_id SERIAL,
sale_date DATE NOT NULL,
amount DECIMAL(10,2),
region VARCHAR(50)
) PARTITION BY RANGE (sale_date);
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
CREATE TABLE employees (
emp_id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
emp_name VARCHAR2(100) NOT NULL,
hire_date DATE DEFAULT SYSDATE
) TABLESPACE users;
CREATE TABLE dbo.products (
product_id INT IDENTITY(1,1) PRIMARY KEY,
product_name NVARCHAR(100) NOT NULL,
price MONEY CHECK (price > 0)
);
Создание таблиц в SQL включает:
Лучшие практики:
Правильно спроектированные таблицы - основа эффективной базы данных.
Тип данных | Описание | Пример |
---|---|---|
INT | Целое число | employee_id INT |
VARCHAR(n) | Строка переменной длины | name VARCHAR(100) |
CHAR(n) | Строка фиксированной длины | gender CHAR(1) |
DECIMAL(p,s) | Число с фиксированной точностью | salary DECIMAL(10,2) |
DATE | Дата | hire_date DATE |
BOOLEAN | Логическое значение | is_active BOOLEAN |
TEXT | Длинный текст | description TEXT |