Error 1046 (3D000): "No database selected" เกิดขึ้นเมื่อพยายามรันคำสั่ง DDL/DML (CREATE, INSERT, UPDATE, SELECT) โดยไม่ได้เลือก Database ก่อน
สาเหตุที่พบบ่อย
- เพิ่งเชื่อมต่อ MySQL ใหม่ ยังไม่ได้รัน
USE database_name - Connection String ไม่ได้ระบุ Database
- Database ถูกลบหรือชื่อผิด
ตัวอย่าง Error
mysql> CREATE TABLE MyTable1 (id INT);
ERROR 1046 (3D000): No database selected
mysql> INSERT INTO sample VALUES (1);
ERROR 1046 (3D000): No database selected
วิธีแก้ไข
1. ใช้คำสั่ง USE
mysql> USE business;
Database changed
mysql> CREATE TABLE MyTable1 (id INT);
Query OK, 0 rows affected (0.49 sec)
2. ระบุ Database ใน Connection String (แนะนำสำหรับ Application)
-- MySQL CLI
mysql -u root -p -D business
-- PHP PDO
$pdo = new PDO('mysql:host=localhost;dbname=business', 'user', 'pass');
-- MySQLi
$mysqli = new mysqli('localhost', 'user', 'pass', 'business');
3. ระบุ Database พร้อมชื่อตาราง (Fully Qualified)
CREATE TABLE business.MyTable1 (id INT);
INSERT INTO business.sample VALUES (1);
การตรวจสอบ
SHOW TABLES LIKE '%MyTable1%';
+---------------------------------+
| Tables_in_business (%MyTable1%) |
+---------------------------------+
| mytable1 |
+---------------------------------+
Best Practice
- ระบุ Database ตอน Connect เสมอ (ลดโอกาส Error)
- ตรวจสอบ
SELECT DATABASE()ว่าอยู่ใน DB ไหนอยู่ - ใช้
USEทุกครั้งที่สลับ Database ใน Session เดียวกัน