MySQL 连接
使用 MySQL 二进制方式连接
您可以使用 MySQL 二进制方式进入到 mysql 命令提示符下来连接 MySQL 数据库,格式如下:
mysql -u your_username -p
参数说明:
- -u 参数用于指定用户名。
- -p 参数表示需要输入密码。(如果不写-p且没有设置无密码登录,则会尝试无密码登录之后报错)
指定主机和端口连接(适用于远程连接):
mysql -h 主机名或IP地址 -P 端口号 -u 用户名 -p --示例 mysql -h 127.0.0.1 -P 3306 -u root -p
创建数据库
服务端创建数据库
- 我们可以在登陆 MySQL 服务后,使用 create 命令创建数据库
MySQL 数据库连接与操作
连接 MySQL 数据库
使用 MySQL 二进制方式连接数据库,命令格式如下:
mysql -u your_username -p
-u参数指定用户名。-p参数提示输入密码。
远程连接需指定主机和端口:
mysql -h 主机名或IP地址 -P 端口号 -u 用户名 -p
示例:
mysql -h 127.0.0.1 -P 3306 -u root -p
创建数据库
登录 MySQL 后使用 CREATE 命令:
CREATE DATABASE RUNOOB;
或使用 mysqladmin:
mysqladmin -u your_username -p create your_database
示例:
mysqladmin -u root -p create RUNOOB
删除数据库
使用 DROP 命令:
DROP DATABASE [IF EXISTS] database_name;
示例:
DROP DATABASE RUNOOB;
DROP DATABASE IF EXISTS RUNOOB;
通过 mysqladmin 删除:
mysqladmin -u your_username -p drop your_database
选择数据库
登录后使用 USE 语句:
USE database_name;
或在命令行直接指定:
mysql -u your_username -p -D your_database
MySQL 数据类型
数值类型
SMALLINT: 2 Bytes,范围 0~65,535。INT/INTEGER: 4 Bytes,范围 0~4,294,967,295。BIGINT: 8 Bytes,极大整数值。FLOAT: 4 Bytes,单精度浮点数。DOUBLE: 8 Bytes,双精度浮点数。DECIMAL(M,D): 定点数,M 为总位数,D 为小数位数。
日期类型
DATE: 3 Bytes,格式YYYY-MM-DD。TIME: 3 Bytes,格式HH:MM:SS。YEAR: 1 Byte,年份值。DATETIME: 8 Bytes,格式YYYY-MM-DD hh:mm:ss。
字符串类型
CHAR: 定长字符串,0~255 Bytes。VARCHAR: 变长字符串,0~65,535 Bytes。TEXT: 长文本数据,最大 65,535 Bytes。BLOB: 二进制长文本数据。
枚举与集合
ENUM: 存储单一预定义值。SET: 存储多个预定义值。
表操作
创建表
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
...
);
示例:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
birthdate DATE,
is_active BOOLEAN DEFAULT TRUE
);
指定字符集和排序规则:
CREATE TABLE mytable (
id INT PRIMARY KEY,
name VARCHAR(50)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
删除表
完全删除表:
DROP TABLE [IF EXISTS] table_name;
清空表数据:
TRUNCATE TABLE table_name;
数据操作
插入数据
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
示例:
INSERT INTO users (username, email, birthdate, is_active)
VALUES ('test', 'test@example.com', '1990-01-01', true);
查询数据
SELECT column1, column2, ...
FROM table_name
[WHERE condition]
[ORDER BY column_name [ASC | DESC]]
[LIMIT number];
使用条件运算符和逻辑运算符筛选数据:
-- 使用 AND 运算符和通配符
SELECT * FROM users WHERE username LIKE 'j%' AND is_active = TRUE;
-- 使用 OR 运算符
SELECT * FROM users WHERE is_active = TRUE OR birthdate < '1990-01-01';
-- 使用 IN 子句
SELECT * FROM users WHERE birthdate IN ('1990-01-01', '1992-03-15', '1993-05-03');
示例:
-- 查询所有列
SELECT * FROM users;
-- 查询特定列
SELECT username, email FROM users;
-- 条件查询
SELECT * FROM users WHERE is_active = TRUE;
-- 排序
SELECT * FROM users ORDER BY birthdate DESC;
-- 限制结果数量
SELECT * FROM users LIMIT 10;
LIKE 子句使用
进行模糊匹配查询:
-- 百分号通配符 %
SELECT * FROM customers WHERE last_name LIKE 'S%';
-- 下划线通配符 _
SELECT * FROM products WHERE product_name LIKE '_a%';
-- 组合使用通配符
SELECT * FROM users WHERE username LIKE 'a%o_';
-- 不区分大小写匹配
SELECT * FROM employees WHERE last_name LIKE 'smi%' COLLATE utf8mb4_general_ci;
UNION 操作符
合并多个查询结果并去重:
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2
ORDER BY column1;
-- 保留重复记录
SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers
ORDER BY city;
ORDER BY 排序
对查询结果进行排序:
-- 单列排序
SELECT * FROM employees ORDER BY hire_date DESC;
-- 多列排序
SELECT * FROM employees
ORDER BY department_id ASC, hire_date DESC;
-- 使用列位置排序
SELECT first_name, last_name, salary
FROM employees
ORDER BY 3 DESC, 1 ASC;
GROUP BY 分组
对结果集进行分组计算:
SELECT department_id, COUNT(*) as employee_count
FROM employees
GROUP BY department_id;
-- 带 WHERE 条件的分组
SELECT category, AVG(price) as avg_price
FROM products
WHERE stock > 0
GROUP BY category;
更新数据
更新表中满足条件的记录:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
-- 更新多列
UPDATE orders
SET status = 'Shipped', ship_date = '2023-03-01'
WHERE order_id = 1001;
-- 使用表达式更新值
UPDATE products
SET price = price * 1.1
WHERE category = 'Electronics';
删除数据
DELETE 语句
删除表中满足条件的记录:
DELETE FROM table_name
WHERE condition;
-- 删除特定条件记录
DELETE FROM students
WHERE graduation_year = 2021;
-- 删除所有记录(保留表结构)
DELETE FROM orders;
MySQL 连接
INNER JOIN(内连接)
返回两个表中满足连接条件的匹配行,语法结构如下:
SELECT column1, column2, ...
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;
- 仅保留两表指定列值相同的记录
- 多表连接时通过链式JOIN实现关联
- 典型应用:查询订单关联的客户和产品信息
SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;
LEFT JOIN(左连接)
保留左表全部记录并匹配右表数据,语法结构:
SELECT column1, column2, ...
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;
- 右表无匹配时对应字段显示NULL
- 适用场景:统计学生成绩(含未考试学生)
SELECT students.name, scores.subject
FROM students
LEFT JOIN scores ON students.id = scores.student_id;
RIGHT JOIN(右连接)
保留右表全部记录并匹配左表数据,语法结构:
SELECT column1, column2, ...
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;
- 左表无匹配时对应字段显示NULL
- 适用场景:统计产品购买情况(含未售出产品)
SELECT products.name, orders.quantity
FROM orders
RIGHT JOIN products ON orders.product_id = products.id;
连接操作注意事项
- 多表连接时建议使用表别名提高可读性
- 连接条件应建立在外键或明确关联字段上
- 大表连接时需注意性能优化,可添加WHERE条件提前过滤
- 各连接类型性能差异:INNER JOIN > LEFT JOIN ≈ RIGHT JOIN

被折叠的 条评论
为什么被折叠?



