I. MySQL Connection & Disconnection
1. Connect to Local Database
mysql -u username -p
- Press Enter, then input the password (e.g., root password) to log in.
- Example:
mysql -u root -p
2. Connect to Remote Database
mysql -h hostIP -u username -p portnumber
- Example:
mysql -h 192.168.1.100 -u admin -p 3306
3. Exit Database
exit; -- or quit;
II. Database Operations
1. View All Databases
SHOW DATABASES;
2. Create Database
CREATE DATABASE database_name [CHARACTER SET charset] [COLLATE collation];
- Example (supports emojis with utf8mb4):
CREATE DATABASE test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
3. Switch Database
USE database_name;
- Example:
USE test_db;
4. Delete Database
DROP DATABASE database_name;
- Example:
DROP DATABASE test_db;
⚠️ Caution: Deletion is irreversible.
III. Table Operations
1. View All Tables in Current Database
SHOW TABLES;
2. Create Table
CREATE TABLE table_name (
column1 data_type [constraint],
column2 data_type [constraint],
...
[table-level constraint]
);
- Example (create a user table):
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT, -- Primary key, auto-increment
username VARCHAR(50) NOT NULL UNIQUE, -- Not null, unique
age INT DEFAULT 0, -- Default value 0
create_time DATETIME
);
3. View Table Structure
DESC table_name; -- or DESCRIBE table_name;
- Example:
DESC user;
4. Modify Table
- Add column:
ALTER TABLE table_name ADD column_name data_type [constraint];
Example:
ALTER TABLE user ADD email VARCHAR(100);
- Modify column type/constraint:
ALTER TABLE table_name MODIFY column_name new_data_type [new_constraint];
Example:
ALTER TABLE user MODIFY age TINYINT DEFAULT 18;
- Delete column:
ALTER TABLE table_name DROP column_name;
Example:
ALTER TABLE user DROP email;
- Rename table:
ALTER TABLE old_table_name RENAME TO new_table_name;
Example:
ALTER TABLE user RENAME TO t_user;
5. Delete Table
DROP TABLE table_name;
- Example:
DROP TABLE t_user;
IV. Data CRUD Operations
1. Insert Data (INSERT)
- Full-column insertion:
INSERT INTO table_name VALUES (value1, value2, ...);
Example:
INSERT INTO user VALUES (1, 'zhangsan', 20, '2023-01-01 10:00:00');
- Specified-column insertion:
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
Example:
INSERT INTO user (username, age) VALUES ('lisi', 25);
- Bulk insertion:
INSERT INTO table_name (column1, column2) VALUES (value1, value2), (value3, value4);
2. Query Data (SELECT)
- Basic query:
SELECT column1, column2, ... FROM table_name [WHERE condition];
Examples:
- Query all users:
SELECT * FROM user; -- * represents all columns
- Query usernames where age > 20:
SELECT username FROM user WHERE age > 20;
- Distinct query:
SELECT DISTINCT column FROM table_name;
Example:
SELECT DISTINCT age FROM user;
- Sorted query:
SELECT column FROM table_name ORDER BY column [ASC|DESC]; -- ASC (default) = ascending; DESC = descending
Example (sort by age descending):
SELECT * FROM user ORDER BY age DESC;
- Paged query:
SELECT column FROM table_name LIMIT start_index, number_of_records; -- Start index starts at 0
Example (query records 11-20):
SELECT * FROM user LIMIT 10, 10;
3. Update Data (UPDATE)
UPDATE table_name SET column1=value1, column2=value2, ... [WHERE condition];
- Example (change age of user with id=1 to 22):
UPDATE user SET age=22 WHERE id=1;
⚠️ Caution: Omitting WHERE modifies all data in the table.
4. Delete Data (DELETE)
DELETE FROM table_name [WHERE condition];
- Example (delete user with id=2):
DELETE FROM user WHERE id=2;
⚠️ Note:
- Omitting WHERE deletes all data but retains the table structure.
- To empty the table and reset auto-increment ID:
TRUNCATE TABLE table_name;
V. Advanced Queries
1. Conditional Query (WHERE Clause)
Common operators: =, !=, >, <, >=, <=, BETWEEN…AND…, IN(…), LIKE, IS NULL
Examples:
- Age between 18-30:
SELECT * FROM user WHERE age BETWEEN 18 AND 30;
- Username contains ‘zhang’:
SELECT * FROM user WHERE username LIKE '%zhang%'; -- % matches any character
- Age is empty:
SELECT * FROM user WHERE age IS NULL;
2. Multi-Condition Query (AND/OR)
SELECT * FROM user WHERE age > 20 AND username LIKE 'l%';
3. Aggregate Query (GROUP BY + Aggregate Functions)
Common functions: COUNT(), SUM(), AVG(), MAX(), MIN()
Examples:
- Count total users:
SELECT COUNT(*) FROM user;
- Group by age and count users per group:
SELECT age, COUNT(*) FROM user GROUP BY age;
- Filter group results (HAVING):
SELECT age, COUNT(*) FROM user GROUP BY age HAVING COUNT(*) > 2;
4. Multi-Table Join Query
- Inner Join (only matching records):
SELECT u.username, o.order_noFROM user uINNER JOIN order o ON u.id = o.user_id;
- Left Join (all left table records + right table matches):
SELECT u.username, o.order_noFROM user uLEFT JOIN order o ON u.id = o.user_id;
VI. Common Constraints
Constraint | Function |
PRIMARY KEY | Uniquely identifies a record; non-null and unique. |
UNIQUE | Ensures field values are unique (allows multiple NULLs). |
NOT NULL | Prevents field from being NULL. |
DEFAULT | Sets a default value for the field. |
FOREIGN KEY | Links to the primary key of another table to ensure data consistency. |
- Example (add foreign key with cascade delete):
CREATE TABLE order ( id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20) UNIQUE, user_id INT, FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE);
VII. Common Functions
1. String Functions
- CONCAT(str1, str2): Concatenates strings.
Example:
SELECT CONCAT(username, '_', age) FROM user;
- LENGTH(str): Returns string length.
- UPPER(str)/LOWER(str): Converts to uppercase/lowercase.
2. Date Functions
- NOW(): Gets current date and time.
Example:
INSERT INTO user (username, create_time) VALUES ('wangwu', NOW());
- DATE_FORMAT(date, format): Formats date.
Example:
SELECT DATE_FORMAT(create_time, '%Y-%m-%d') FROM user;
3. Math Functions
- ROUND(num, n): Rounds to n decimal places.
- ABS(num): Returns absolute value.
VIII. Index Operations
1. Create Index (Improves Query Efficiency)
- Normal index:
CREATE INDEX idx_age ON user(age);
- Unique index:
CREATE UNIQUE INDEX idx_username ON user(username);
2. View Indexes
SHOW INDEX FROM table_name;
3. Delete Index
DROP INDEX index_name ON table_name;
It’s Good!
Thanks!