MySql 基本操作指令大全
MySQL 基本操作指令大全
1. 数据库操作
连接数据库
sql
mysql -u username -p mysql -h hostname -u username -p
查看数据库
sql
SHOW DATABASES;
创建数据库
sql
CREATE DATABASE database_name; CREATE DATABASE IF NOT EXISTS database_name; CREATE DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
选择数据库
sql
USE database_name;
删除数据库
sql
DROP DATABASE database_name; DROP DATABASE IF EXISTS database_name;
查看当前数据库
sql
SELECT DATABASE();
2. 表操作
查看表
sql
SHOW TABLES; SHOW TABLES FROM database_name;
创建表
sql
CREATE TABLE table_name (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT,email VARCHAR(255) UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );-- 带索引的表 CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,password VARCHAR(255) NOT NULL,email VARCHAR(100),created_at DATETIME DEFAULT CURRENT_TIMESTAMP,INDEX idx_username (username),INDEX idx_email (email) );
查看表结构
sql
DESCRIBE table_name; DESC table_name; SHOW COLUMNS FROM table_name;
查看建表语句
sql
SHOW CREATE TABLE table_name;
修改表
sql
-- 添加列 ALTER TABLE table_name ADD COLUMN new_column VARCHAR(100);-- 修改列 ALTER TABLE table_name MODIFY COLUMN column_name TEXT;-- 重命名列 ALTER TABLE table_name CHANGE old_name new_name VARCHAR(100);-- 删除列 ALTER TABLE table_name DROP COLUMN column_name;-- 添加主键 ALTER TABLE table_name ADD PRIMARY KEY (column_name);-- 添加索引 ALTER TABLE table_name ADD INDEX index_name (column_name);-- 删除表 DROP TABLE table_name; DROP TABLE IF EXISTS table_name;
重命名表
sql
RENAME TABLE old_name TO new_name; ALTER TABLE old_name RENAME TO new_name;
3. 数据操作(CRUD)
插入数据
sql
-- 插入单条数据 INSERT INTO table_name (column1, column2) VALUES (value1, value2);-- 插入多条数据 INSERT INTO table_name (name, age, email) VALUES ('John', 25, 'john@email.com'), ('Jane', 30, 'jane@email.com'), ('Bob', 35, 'bob@email.com');-- 插入查询结果 INSERT INTO table_backup SELECT * FROM table_original WHERE condition;
查询数据
sql
-- 基本查询 SELECT * FROM table_name; SELECT column1, column2 FROM table_name;-- 条件查询 SELECT * FROM table_name WHERE condition; SELECT * FROM users WHERE age > 18 AND status = 'active';-- 排序 SELECT * FROM table_name ORDER BY column_name ASC; -- 升序 SELECT * FROM table_name ORDER BY column_name DESC; -- 降序 SELECT * FROM table_name ORDER BY column1 ASC, column2 DESC;-- 限制结果 SELECT * FROM table_name LIMIT 10; -- 前10条 SELECT * FROM table_name LIMIT 5, 10; -- 从第6条开始取10条 SELECT * FROM table_name LIMIT 10 OFFSET 5; -- 同上-- 去重 SELECT DISTINCT column_name FROM table_name;-- 分组 SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name; SELECT department, AVG(salary) FROM employees GROUP BY department;-- 分组过滤 SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 5000;
更新数据
sql
UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;-- 示例 UPDATE users SET status = 'inactive' WHERE last_login < '2023-01-01'; UPDATE products SET price = price * 1.1 WHERE category = 'electronics';
删除数据
sql
DELETE FROM table_name WHERE condition;-- 清空表(不可恢复) TRUNCATE TABLE table_name;-- 示例 DELETE FROM users WHERE status = 'inactive'; DELETE FROM logs WHERE created_at < DATE_SUB(NOW(), INTERVAL 1 YEAR);
4. 高级查询
连接查询
sql
-- 内连接 SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.table1_id;-- 左连接 SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.table1_id;-- 右连接 SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.table1_id;-- 全外连接(MySQL不支持,用UNION模拟) SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.table1_id UNION SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.table1_id;
子查询
sql
-- WHERE子句中的子查询 SELECT * FROM users WHERE age > (SELECT AVG(age) FROM users);-- IN子查询 SELECT * FROM products WHERE category_id IN (SELECT id FROM categories WHERE status = 'active');-- EXISTS子查询 SELECT * FROM customers WHERE EXISTS (SELECT 1 FROM orders WHERE orders.customer_id = customers.id);
联合查询
sql
SELECT column_name FROM table1 UNION SELECT column_name FROM table2;SELECT column_name FROM table1 UNION ALL SELECT column_name FROM table2;
5. 聚合函数
sql
SELECT COUNT(*) FROM table_name; -- 计数 SELECT COUNT(DISTINCT column_name) FROM table_name; -- 去重计数 SELECT SUM(column_name) FROM table_name; -- 求和 SELECT AVG(column_name) FROM table_name; -- 平均值 SELECT MAX(column_name) FROM table_name; -- 最大值 SELECT MIN(column_name) FROM table_name; -- 最小值 SELECT GROUP_CONCAT(column_name) FROM table_name; -- 连接字符串
6. 索引操作
sql
-- 创建索引 CREATE INDEX index_name ON table_name (column_name); CREATE UNIQUE INDEX index_name ON table_name (column_name);-- 创建复合索引 CREATE INDEX index_name ON table_name (col1, col2, col3);-- 删除索引 DROP INDEX index_name ON table_name;-- 查看索引 SHOW INDEX FROM table_name;
7. 用户和权限管理
用户管理
sql
-- 创建用户 CREATE USER 'username'@'host' IDENTIFIED BY 'password';-- 删除用户 DROP USER 'username'@'host';-- 修改密码 ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';-- 查看用户 SELECT user, host FROM mysql.user;
权限管理
sql
-- 授予权限 GRANT privilege_type ON database_name.table_name TO 'username'@'host';-- 示例 GRANT SELECT, INSERT ON mydb.* TO 'user1'@'localhost'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%';-- 撤销权限 REVOKE privilege_type ON database_name.table_name FROM 'username'@'host';-- 刷新权限 FLUSH PRIVILEGES;-- 查看权限 SHOW GRANTS FOR 'username'@'host';
8. 事务操作
sql
-- 开始事务 START TRANSACTION; BEGIN;-- 提交事务 COMMIT;-- 回滚事务 ROLLBACK;-- 设置自动提交 SET autocommit = 0; -- 关闭自动提交 SET autocommit = 1; -- 开启自动提交
9. 备份与恢复
备份数据库
bash
# 命令行备份 mysqldump -u username -p database_name > backup.sql mysqldump -u username -p --all-databases > all_backup.sql mysqldump -u username -p database_name table1 table2 > partial_backup.sql
恢复数据库
bash
# 命令行恢复 mysql -u username -p database_name < backup.sql
10. 实用函数
字符串函数
sql
SELECT CONCAT('Hello', ' ', 'World'); -- 字符串连接 SELECT SUBSTRING('Hello World', 1, 5); -- 子字符串 SELECT LENGTH('Hello'); -- 字符串长度 SELECT UPPER('hello'); -- 转大写 SELECT LOWER('HELLO'); -- 转小写 SELECT TRIM(' hello '); -- 去除空格 SELECT REPLACE('Hello World', 'World', 'MySQL'); -- 替换
日期函数
sql
SELECT NOW(); -- 当前日期时间 SELECT CURDATE(); -- 当前日期 SELECT CURTIME(); -- 当前时间 SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 日期格式化 SELECT DATEDIFF('2023-12-31', '2023-01-01'); -- 日期差 SELECT DATE_ADD(NOW(), INTERVAL 1 DAY); -- 日期加法 SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH); -- 日期减法
数学函数
sql
SELECT ABS(-10); -- 绝对值 SELECT ROUND(3.14159, 2); -- 四舍五入 SELECT CEIL(3.14); -- 向上取整 SELECT FLOOR(3.14); -- 向下取整 SELECT RAND(); -- 随机数
11. 系统信息
sql
SELECT VERSION(); -- MySQL版本 SELECT DATABASE(); -- 当前数据库 SELECT USER(); -- 当前用户 SELECT NOW(); -- 当前时间 SHOW PROCESSLIST; -- 显示进程 SHOW VARIABLES; -- 显示系统变量 SHOW STATUS; -- 显示系统状态
这些命令涵盖了MySQL日常使用的大部分场景,从基本的数据库操作到高级的查询和系统管理。