MySQL Select Database
Overview
Selecting (switching to) a database in MySQL is necessary before performing operations on that database. This chapter covers how to select databases and work with database context.
Database Context
The database context determines which database is the default for SQL statements. When you select a database, all subsequent operations without explicit database qualification will use that database.
SELECT DATABASE Methods
USE Statement
sql
-- Select (use) a database
USE database_name;
-- Example
USE myapp;
-- Verify current database
SELECT DATABASE();Command Line
bash
# Connect directly to specific database
mysql -u username -p database_name
# Switch database after connection
mysql> USE database_name;
# Connect and execute query
mysql -u username -p -e "USE database_name; SHOW TABLES;"Programming Languages
Python / Python
python
import mysql.connector
conn = mysql.connector.connect(
host='localhost',
user='root',
password='password',
database='myapp' # Select database on connection
)
cursor = conn.cursor()
cursor.execute("SHOW TABLES")
conn.close()PHP / PHP
php
<?php
$conn = new mysqli('localhost', 'username', 'password', 'database_name');
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected to database: " . $conn->host_info;
// Select different database
$conn->select_db('another_database');
$conn->close();
?>Current Database Information
Get Current Database
sql
-- Get current database name
SELECT DATABASE();
SELECT SCHEMA();
-- Equivalent
SELECT current_database();Get Database Details
sql
-- Get current database character set
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_database';
-- Get database size
SELECT
table_schema AS database_name,
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS size_mb,
COUNT(*) AS table_count
FROM information_schema.tables
WHERE table_schema = DATABASE()
GROUP BY table_schema;
-- List tables in current database
SHOW TABLES;
-- List tables with additional info
SHOW TABLE STATUS;Multiple Database Operations
Qualified Names
sql
-- Use fully qualified table names
SELECT * FROM database1.table1;
SELECT * FROM database2.table2;
-- Join tables from different databases
SELECT
db1.users.name,
db2.orders.order_number
FROM db1.users
INNER JOIN db2.orders ON db1.users.id = db2.orders.user_id;
-- Use specific database tables in queries
SELECT * FROM other_database.users WHERE status = 'active';Cross-Database Queries
sql
-- Query across databases
SELECT
a.column1,
b.column2
FROM database1.table1 a
JOIN database2.table2 b ON a.id = b.related_id;
-- Aggregate across databases
SELECT
'database1' AS db_name,
COUNT(*) AS table_count
FROM information_schema.tables
WHERE table_schema = 'database1'
UNION ALL
SELECT
'database2' AS db_name,
COUNT(*) AS table_count
FROM information_schema.tables
WHERE table_schema = 'database2';Temporary Table Scope
sql
-- Create temporary table in current database
USE database1;
CREATE TEMPORARY TABLE temp_table AS SELECT * FROM users;
-- Temporary table is visible only in current session
-- It uses the current database context
-- Switch database (temporary table still accessible)
USE database2;
SELECT * FROM temp_table; -- Still accessibleDatabase Context in Procedures
Stored Procedures
sql
-- Create procedure in specific database
USE myapp;
DELIMITER //
CREATE PROCEDURE GetUserCount()
BEGIN
SELECT COUNT(*) AS user_count FROM users;
END //
DELIMITER ;
-- Call procedure (uses database where it was created)
CALL GetUserCount();Prepared Statements
sql
-- Prepare statement with dynamic database
SET @sql = CONCAT('SELECT * FROM ', DATABASE(), '.users');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;Database Connection Patterns
Single Database
python
# Connect to specific database
conn = mysql.connector.connect(
host='localhost',
user='app_user',
password='password',
database='myapp'
)Multiple Databases
python
# Connect to multiple databases
conn1 = mysql.connector.connect(
host='localhost',
user='app_user',
password='password',
database='app1'
)
conn2 = mysql.connector.connect(
host='localhost',
user='app_user',
password='password',
database='app2'
)
# Query both databases
cursor1.execute("SELECT * FROM table1")
cursor2.execute("SELECT * FROM table2")Dynamic Database Selection
python
def get_connection(database_name):
return mysql.connector.connect(
host='localhost',
user='app_user',
password='password',
database=database_name
)
# Usage
conn = get_connection('myapp')Session Management
Session Variables
sql
-- Set database for session
USE myapp;
-- Session persists until disconnected or changed
-- All queries use 'myapp' database
-- Switch database in same session
USE another_database;
-- Current database changes for rest of sessionConnection Pool
python
from mysql.connector import pooling
pool = pooling.MySQLConnectionPool(
pool_name="mypool",
pool_size=10,
pool_reset_session=True,
host='localhost',
user='app_user',
password='password',
database='myapp' # Default database
)
# Each connection from pool has default database
conn = pool.get_connection()Database Context and Security
User Privileges
sql
-- User can access specific databases
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'user'@'localhost';
REVOKE DROP ON myapp.* FROM 'user'@'localhost';
-- User cannot access other databases
SHOW GRANTS FOR 'user'@'localhost';Prepared Statements
python
# Safe database selection with prepared statements
def get_user_data(database_name, user_id):
conn = mysql.connector.connect(
host='localhost',
user='app_user',
password='password',
database=database_name
)
cursor = conn.cursor(prepared=True)
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
result = cursor.fetchone()
conn.close()
return resultBest Practices
Explicit Database Qualification
sql
-- Good: Use explicit database names
SELECT * FROM myapp.users;
-- Avoid: Rely on current database context
USE myapp;
SELECT * FROM users; -- Works but less clearConnection Management
python
# Good: Use context manager or try-finally
import mysql.connector
conn = None
try:
conn = mysql.connector.connect(
host='localhost',
user='app_user',
password='password',
database='myapp'
)
# Use connection
finally:
if conn:
conn.close()Error Handling
python
try:
conn = mysql.connector.connect(
host='localhost',
user='app_user',
password='password',
database='myapp'
)
except mysql.connector.Error as err:
print(f"Error connecting to database: {err}")
# Handle errorTroubleshooting
Common Errors
sql
-- No database selected
-- Error: No database selected
-- Solution: USE database_name;
-- Unknown database
-- Error: Unknown database 'database_name'
-- Solution: Check database name with SHOW DATABASES
-- Access denied
-- Error: Access denied for user to database
-- Solution: Check user privilegesDebug Commands
sql
-- Check current database
SELECT DATABASE();
-- List available databases
SHOW DATABASES;
-- Check user privileges
SHOW GRANTS;
-- Check table existence
SHOW TABLES FROM database_name;Summary
Database selection in MySQL involves:
- USE Statement: Primary method for selecting database
- Connection Parameter: Specify database on connect
- Context Awareness: Current database affects queries
- Cross-Database: Use qualified names for multiple databases
- Security: Proper user privileges for access
Previous: Drop Database
Next: Data Types