# 本地连接
mysql -u root -p# 远程连接
mysql -h hostname -u root -p demo# 指定端口连接
mysql -h hostname -P 3306 -u root -p demo
连接参数说明
-u: 用户名
-p: 密码(会提示输入)
-h: 主机名或IP地址
-P: 端口号(默认3306)
2. 数据库操作
2.1 查看数据库
-- 显示所有数据库SHOWDATABASES;mysql>showdatabases;+--------------------+|Database|+--------------------+| information_schema || mysql || performance_schema || sys |+--------------------+4rowsinset(0.01 sec)-- 使用特定数据库USE mysql;mysql>USE mysql;
Reading table information for completion oftableandcolumn names
You can turn off this feature to get a quicker startup with-ADatabase changed-- 显示当前使用的数据库SELECTDATABASE();mysql>SELECTDATABASE();+------------+|DATABASE()|+------------+| mysql |+------------+1rowinset(0.00 sec)
-- 统计函数SELECTCOUNT(*)FROM users;-- 总记录数SELECTCOUNT(phone)FROM users;-- 非空phone字段数SELECTMAX(age),MIN(age),AVG(age)FROM users;-- 最大、最小、平均年龄SELECTSUM(age)FROM users;-- 年龄总和-- 分组统计SELECT age,COUNT(*)as count FROM users GROUPBY age;SELECTDATE(created_at)asdate,COUNT(*)as daily_users
FROM users
GROUPBYDATE(created_at)ORDERBYdateDESC;-- 分组过滤SELECT age,COUNT(*)as count
FROM users
GROUPBY age
HAVING count >5;
4.3 更新数据 (UPDATE)
-- 更新单个字段UPDATE users SET email ='newemail@example.com'WHERE id =1;-- 更新多个字段UPDATE users SET email ='updated@example.com',age =25,updated_at =CURRENT_TIMESTAMPWHERE username ='john_doe';-- 批量更新UPDATE users SET is_active =FALSEWHERE created_at <'2022-01-01';-- 使用表达式更新UPDATE users SET age = age +1WHERE birthday = CURDATE();
4.4 删除数据 (DELETE)
-- 删除特定记录DELETEFROM users WHERE id =1;-- 批量删除DELETEFROM users WHERE is_active =FALSE;-- 删除所有数据(保留表结构)DELETEFROM users;-- 清空表(更快,重置AUTO_INCREMENT)TRUNCATETABLE users;
5. 高级查询
5.1 连接查询 (JOIN)
内连接 (INNER JOIN)
-- 基本内连接SELECT u.username, p.title
FROM users u
INNERJOIN posts p ON u.id = p.user_id;-- 多表连接SELECT u.username, p.title, c.content
FROM users u
INNERJOIN posts p ON u.id = p.user_id
INNERJOIN comments c ON p.id = c.post_id;
左连接 (LEFT JOIN)
-- 左连接(显示所有用户,即使没有发布文章)SELECT u.username, p.title
FROM users u
LEFTJOIN posts p ON u.id = p.user_id;
右连接 (RIGHT JOIN)
-- 右连接(显示所有文章,即使用户不存在)SELECT u.username, p.title
FROM users u
RIGHTJOIN posts p ON u.id = p.user_id;
全外连接 (FULL OUTER JOIN)
-- MySQL不直接支持FULL OUTER JOIN,需要使用UNIONSELECT u.username, p.title
FROM users u LEFTJOIN posts p ON u.id = p.user_id
UNIONSELECT u.username, p.title
FROM users u RIGHTJOIN posts p ON u.id = p.user_id;
5.2 子查询
-- 标量子查询SELECT*FROM users
WHERE id =(SELECT user_id FROM posts WHERE title ='My First Post');-- 列表子查询SELECT*FROM users
WHERE id IN(SELECT user_id FROM posts WHERE created_at >'2023-01-01');-- 相关子查询SELECT*FROM users u
WHEREEXISTS(SELECT1FROM posts p WHERE p.user_id = u.id);-- 子查询在FROM中SELECT avg_age.age_group,COUNT(*)as user_count
FROM(SELECTCASEWHEN age <18THEN'Youth'WHEN age BETWEEN18AND65THEN'Adult'ELSE'Senior'ENDas age_groupFROM users
) avg_age
GROUPBY avg_age.age_group;
5.3 窗口函数 (MySQL 8.0+)
-- ROW_NUMBER()SELECT username, age, ROW_NUMBER()OVER(ORDERBY age DESC)as rank
FROM users;-- RANK() 和 DENSE_RANK()SELECT username, age,RANK()OVER(ORDERBY age DESC)as rank,DENSE_RANK()OVER(ORDERBY age DESC)as dense_rank
FROM users;-- 分区窗口函数SELECT username, department, salary,ROW_NUMBER()OVER(PARTITIONBY department ORDERBY salary DESC)as dept_rank
FROM employees;
5.4 公用表表达式 (CTE) - MySQL 8.0+
-- 基本CTEWITH high_value_users AS(SELECT*FROM users WHERE age >30)SELECT username, email FROM high_value_users;-- 递归CTEWITH RECURSIVE employee_hierarchy AS(SELECT id, name, manager_id,1aslevelFROM employeesWHERE manager_id ISNULLUNIONALLSELECT e.id, e.name, e.manager_id, eh.level+1FROM employees eINNERJOIN employee_hierarchy eh ON e.manager_id = eh.id
)SELECT*FROM employee_hierarchy;
6. 索引操作
6.1 创建索引
-- 普通索引CREATEINDEX idx_username ON users (username);-- 唯一索引CREATEUNIQUEINDEX idx_email ON users (email);-- 复合索引CREATEINDEX idx_name_age ON users (username, age);-- 前缀索引CREATEINDEX idx_email_prefix ON users (email(10));-- 在创建表时添加索引CREATETABLE users (id INTPRIMARYKEY,username VARCHAR(50),email VARCHAR(100),INDEX idx_username (username),UNIQUEINDEX idx_email (email));
6.2 查看索引
-- 查看表的所有索引SHOWINDEXFROM users;-- 查看索引使用情况EXPLAINSELECT*FROM users WHERE username ='john';
6.3 删除索引
-- 删除索引DROPINDEX idx_username ON users;-- 删除主键ALTERTABLE users DROPPRIMARYKEY;
在 Eclipse 中将一个项目设置为 Web 项目(或称动态 Web 项目)主要有两种场景:创建新的 Web 项目 和 将现有项目转换为 Web 项目。我将为你详细讲解这两种方法。前提条件:确保你有必要的 Eclipse 组件在开始之前,…
大家周四快乐,今天分享粉丝投稿的面经。
内容整理如下:go
go singleflight 的底层实现
singleflight 是 Go 语言标准库中的一个很有用的包,它主要用来处理并发请求时的重复问题。比如在高并发场景下,如果多个请求同时访问同一个资…
c打包pyd文件给Python使用调用函数C语言源码:simplemath.cpp代码://
// Created by ASFOR on 2025/9/11.
//
#include <pybind11/pybind11.h>namespace py pybind11;// 一个简单的加法函数
int add(int a, int b) {return a b;
}// 一个简单的乘…