目录
一、MySQL 连接与退出
1.连接本地数据库
mysql -u 用户名 -p
输入后回车,再输入密码(如 root 用户密码)即可登录。示例:
mysql -u root -p
2.连接远程数据库
mysql -h 主机IP -u 用户名 -p 端口号
示例:
mysql -h 192.168.1.100 -u admin -p 3306
3.退出数据库
exit; 或 quit;
二、数据库操作
1.查看所有数据库
SHOW DATABASES;
2.创建数据库
CREATE DATABASE 数据库名 [CHARACTER SET 字符集] [COLLATE 排序规则];
示例:
CREATE DATABASE test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;\
(utf8mb4 支持 emoji)
3.切换数据库
USE 数据库名;
示例:
USE test_db;
4.删除数据库
DROP DATABASE 数据库名;
示例:
DROP DATABASE test_db;
(谨慎操作,删除后无法恢复)
三、数据表操作
1. 查看当前数据库所有表
SHOW TABLES;
2. 创建表
CREATE TABLE 表名 (
字段名1 数据类型 [约束],
字段名2 数据类型 [约束],
...
[表级约束]
);
示例:创建 user 表
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键,自增
username VARCHAR(50) NOT NULL UNIQUE, -- 非空,唯一
age INT DEFAULT 0, -- 默认值 0
create_time DATETIME
);
3. 查看表结构
DESC 表名; 或 DESCRIBE 表名;
示例:
DESC user;
4. 修改表
- 添加字段
ALTER TABLE 表名 ADD 字段名 数据类型 [约束];
示例:
ALTER TABLE user ADD email VARCHAR(100);
- 修改字段类型 / 约束
ALTER TABLE 表名 MODIFY 字段名 新数据类型 [新约束];
示例:
ALTER TABLE user MODIFY age TINYINT DEFAULT 18;
- 删除字段
ALTER TABLE 表名 DROP 字段名;
示例:
ALTER TABLE user DROP email;
- 修改表名
ALTER TABLE 旧表名 RENAME TO 新表名;
示例:
ALTER TABLE user RENAME TO t_user;
5. 删除表
DROP TABLE 表名;
示例:
DROP TABLE t_user;
四、数据增删改查(CRUD)
1. 新增数据(INSERT)
- 全字段插入
INSERT INTO 表名 VALUES (值1, 值2, ...);
示例:
INSERT INTO user VALUES (1, 'zhangsan', 20, '2023-01-01 10:00:00');
- 指定字段插入
INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...);
示例:
INSERT INTO user (username, age) VALUES ('lisi', 25);
- 批量插入
INSERT INTO 表名 (字段1, 字段2) VALUES
(值1, 值2),
(值3, 值4);
2. 查询数据(SELECT)
- 基础查询
SELECT 字段1, 字段2, ... FROM 表名 [WHERE 条件];
示例:
查询所有用户 SELECT * FROM user;
(* 表示所有字段)
示例:
查询年龄 > 20 的用户名 SELECT username FROM user WHERE age > 20;
- 去重查询
SELECT DISTINCT 字段 FROM 表名;
示例:
SELECT DISTINCT age FROM user;
- 排序查询
SELECT 字段 FROM 表名 ORDER BY 字段 [ASC|DESC];
-- ASC 升序(默认),DESC 降序
示例:
按年龄降序
SELECT * FROM user ORDER BY age DESC;
- 分页查询
SELECT 字段 FROM 表名 LIMIT 起始索引, 查询条数; -- 起始索引从 0 开始
示例:
查询第 11-20 条数据
SELECT * FROM user LIMIT 10, 10;
3. 修改数据(UPDATE)
UPDATE 表名 SET 字段1=值1, 字段2=值2, ... [WHERE 条件];
示例:
将 id=1 的用户年龄改为 22
UPDATE user SET age=22 WHERE id=1;
注意:不加 WHERE 条件会修改表中所有数据,谨慎操作!
4. 删除数据(DELETE)
DELETE FROM 表名 [WHERE 条件];
示例:
删除 id=2 的用户
DELETE FROM user WHERE id=2;
注意:不加 WHERE 条件会删除表中所有数据(保留表结构),如需清空表且自增 ID 重置,用 TRUNCATE TABLE 表名;
五、查询进阶
1. 条件查询(WHERE 子句)
常用运算符:=、!=、>、<、>=、<=、BETWEEN...AND...、IN(...)、LIKE、IS NULL
示例:
年龄在 18-30 之间
SELECT * FROM user WHERE age BETWEEN 18 AND 30;
用户名包含 'zhang'
SELECT * FROM user WHERE username LIKE '%zhang%';(% 匹配任意字符)
年龄为空
SELECT * FROM user WHERE age IS NULL;
2. 多条件查询(AND/OR)
SELECT * FROM user WHERE age > 20 AND username LIKE 'l%';
3. 聚合查询(GROUP BY + 聚合函数)
常用聚合函数:COUNT()、SUM()、AVG()、MAX()、MIN()
示例:
统计用户总数
SELECT COUNT(*) FROM user;
按年龄分组统计每组人数
SELECT age, COUNT(*) FROM user GROUP BY age;
过滤分组结果
(HAVING)SELECT age, COUNT(*) FROM user GROUP BY age HAVING COUNT(*) > 2;
4. 多表连接查询
1.内连接(INNER JOIN):
只显示匹配的记录
SELECT u.username, o.order_no
FROM user u
INNER JOIN order o ON u.id = o.user_id;
2.左连接(LEFT JOIN):
左表所有记录 + 右表匹配记录
SELECT u.username, o.order_no
FROM user u
LEFT JOIN order o ON u.id = o.user_id;
六、常用约束
约束 | 作用 |
PRIMARY KEY | 主键,唯一标识一条记录,非空且唯一 |
UNIQUE | 字段值唯一(可多个 NULL) |
NOT NULL | 字段值不能为 NULL |
DEFAULT | 字段默认值 |
FOREIGN KEY | 外键,关联另一表的主键,保证数据一致性 |
示例:添加外键
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
-- 级联删除
);
七、常用函数
1.字符串函数
- CONCAT(str1, str2):拼接字符串
示例:
SELECT CONCAT(username, '_', age) FROM user;
- LENGTH(str):获取字符串长度
- UPPER(str)/LOWER(str):转大小写
2.日期函数
- NOW():获取当前日期时间
示例:
INSERT INTO user (username, create_time) VALUES ('wangwu', NOW());
- DATE_FORMAT(date, format):格式化日期
示例:
SELECT DATE_FORMAT(create_time, '%Y-%m-%d') FROM user;
3.数学函数
- ROUND(num, n):四舍五入保留 n 位小数
- ABS(num):绝对值
八、索引操作
1.创建索引(提高查询效率)
CREATE INDEX idx_age ON user(age); -- 普通索引
CREATE UNIQUE INDEX idx_username ON user(username); -- 唯一索引
2.查看索引
SHOW INDEX FROM 表名;
3,删除索引
DROP INDEX 索引名 ON 表名;
篇幅多大,后续在下一篇中。。。。