Mysql 学习(1)

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值