INSERT
INSERT командаар хүснэгтэд шинэ мөр нэмнэ. Энэ бол MySQL-ийн хамгийн түгээмэл ашиглагддаг командуудын нэг юм.
Үндсэн синтакс
INSERT INTO хүснэгтийн_нэр (багана1, багана2, ...)
VALUES (утга1, утга2, ...);
Жишээ:
INSERT INTO users (name, email)
VALUES ('Болд', 'bold@example.com');
Query OK, 1 row affected (0.01 sec)
Зөв оруулсан эсэхийг шалгах:
SELECT * FROM users;
+----+------+------------------+---------------------+
| id | name | email | created_at |
+----+------+------------------+---------------------+
| 1 | Болд | bold@example.com | 2024-06-01 10:00:00 |
+----+------+------------------+---------------------+
Баганын дарааллын тухай
INSERT дахь баганын дараалал хүснэгтийн тодорхойлолттой таарах шаардлагагүй — гэхдээ утгуудын дараалал баганын дараалалтай яг таарах ёстой.
-- email эхэлж, name хойно — зөв
INSERT INTO users (email, name)
VALUES ('dорж@example.com', 'Дорж');
-- Баганын нэр огт орхивол БҮГДИЙГ дарааллаар оруулна
INSERT INTO users
VALUES (NULL, 'Мөнх', 'munkh@example.com', NOW());
-- ↑ id нь AUTO_INCREMENT тул NULL дамжуулна
Баганын нэрийг орхих нь эмзэг хэрэглэлт — хүснэгтийн бүтэц өөрчлөгдвөл алдаа гарна. Баганын нэрийг үргэлж тодорхой бичих нь аюулгүй.
Анхдагч утга ба AUTO_INCREMENT
DEFAULT утгатай эсвэл AUTO_INCREMENT баганыг орхиж болно — MySQL өөрөө утгыг оруулна.
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(200) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
stock INT DEFAULT 0,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- stock, is_active, created_at орхисон — анхдагч утгаар орно
INSERT INTO products (name, price)
VALUES ('Утасны дэр', 4990.00);
id=1, name='Утасны дэр', price=4990.00, stock=0, is_active=1, created_at=одоогийн цаг
Сүүлд оруулсан AUTO_INCREMENT утгыг авах:
SELECT LAST_INSERT_ID();
+-----------------+
| LAST_INSERT_ID()|
+-----------------+
| 1 |
+-----------------+
Энэ утгыг холбоотой хүснэгтэд (жишээ нь захиалгад) ашиглах боломжтой.
Олон мөр нэг дор оруулах
INSERT INTO users (name, email)
VALUES
('Болд', 'bold@example.com'),
('Дорж', 'dorj@example.com'),
('Мөнх', 'munkh@example.com'),
('Энх', 'enkh@example.com');
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
Мөр тус бүрт тусдаа INSERT бичихээс олон мөрийг нэг командаар оруулах нь хамаагүй хурдан — сүлжээний харилцаа, transaction нэг удаа л явагдана.
INSERT INTO ... SELECT
Нэг хүснэгтийн өгөгдлийг нөгөө хүснэгтэд хуулах:
INSERT INTO archive_users (name, email, created_at)
SELECT name, email, created_at
FROM users
WHERE created_at < '2023-01-01';
SELECT хэсэгт WHERE, JOIN, хүссэн нарийн нөхцөл ашиглаж болно — нарийн шүүлтүүртэй өгөгдлийг шилжүүлэхэд хэрэгтэй.
ON DUPLICATE KEY UPDATE
UNIQUE баганад давтагдсан утга оруулахыг оролдвол алдаа гарна. Энэ тохиолдолд шинэ мөр нэмэхийн оронд байгаа мөрийг шинэчлэх боломжтой:
INSERT INTO products (sku, name, price)
VALUES ('ABC-001', 'Утасны дэр', 4990.00)
ON DUPLICATE KEY UPDATE
price = VALUES(price),
name = VALUES(name);
sku давтагдвал INSERT биш UPDATE хийгдэнэ — "upsert" гэж нэрлэдэг.
INSERT IGNORE
Алдааг үл тоож, амжилтгүй мөрийг алгасна:
INSERT IGNORE INTO users (name, email)
VALUES ('Болд', 'bold@example.com');
-- email аль хэдийн байгаа бол алдаагүй алгасна
Жишээ: myshop database-д өгөгдөл оруулах
USE myshop;
INSERT INTO users (name, email) VALUES
('Болд Батбаяр', 'bold@example.com'),
('Дорж Гантулга', 'dorj@example.com'),
('Мөнх Эрдэнэ', 'munkh@example.com');
INSERT INTO products (name, price, stock) VALUES
('Утасны дэр', 4990.00, 50),
('Bluetooth чихэвч', 29900.00, 20),
('Цэнэглэгч кабель', 1990.00, 100),
('Ухаалаг цаг', 89900.00, 10);
INSERT INTO orders (user_id, product_id, quantity) VALUES
(1, 2, 1),
(1, 3, 2),
(2, 1, 1),
(3, 4, 1);
Дараагийн хичээлд:
SELECT командаар хүснэгтийн өгөгдлийг унших — *, тодорхой багана, DISTINCT, alias ашиглах аргуудыг үзнэ.