Skip to content

MySql

十五、MySQL(关系型数据库)

1、下载

官网下载 mysql 客户端并安装,可使用 Navicat 可视化操作数据内容。

2、npm 包

使用 npm 安装 mysql2 模块,可以在 Node.js 中使用 mysql。

bash
npm install mysql2

3、 连接

javascript
//导入mysql2模块
const mysql = require('mysql2');

//连接MySQL数据库
const promisePool = mysql.createPool({
  connectionLimit: 10, // 连接池最大连接数
  host: '127.0.0.1',  //数据库地址
  port:3306,  //数据库端口号
  user: 'root',  //数据库账号
  password: 'admin888',  //数据库密码
  database: 'my_db_01'   //数据库名称
}).promise();

// 查询数据
promisePool.query('SELECT * FROM mytable');

// 插入数据
promisePool.query('INSERT INTO mytable (name, age) VALUES (?, ?)', ['Tom', 20]);

// 更新数据
promisePool.query('UPDATE mytable SET age = ? WHERE name = ?', [30, 'Tom']);

// 删除数据
promisePool.query('DELETE FROM mytable WHERE name = ?', ['Tom']);

// 释放连接
promisePool.release();

4、新增

sql
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

-- 假设有一个名为 users 的表,包含 id、username 和 password 列

-- 插入单行数据
INSERT INTO users (username, password)
VALUES ('user1', 'password1');

-- 插入多行数据
INSERT INTO users (username, password)
VALUES ('user2', 'password2'), ('user3', 'password3');

5、更新

sql
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

-- 假设有一个名为 users 的表,包含 id、username 和 password 列

-- 更新单行数据
UPDATE users
SET password = 'newpassword'
WHERE id = 1;

-- 更新多行数据
UPDATE users
SET password = 'newpassword'
WHERE username IN ('user1', 'user2');

6、删除

sql
DELETE FROM table_name
WHERE condition;

-- 假设有一个名为 users 的表,包含 id、username 和 password 列

-- 删除所有数据
DELETE FROM users;

-- 删除满足条件的数据
DELETE FROM users
WHERE id = 1;

-- 删除满足多个条件的数据
DELETE FROM users
WHERE username = 'user1' AND password = 'password1';

7、查询

sql
SELECT column1, column2, ...
FROM table_name
WHERE condition;

-- 假设有一个名为 users 的表,包含 id、username 和 email 列

-- 查询所有列的数据
SELECT *
FROM users;

-- 查询指定列的数据
SELECT username, email
FROM users;

-- 查询满足条件的数据
SELECT *
FROM users
WHERE id = 1;

-- 查询满足多个条件的数据
SELECT *
FROM users
WHERE username = 'user1' AND email LIKE '%example.com%';

-- 查询结果按照指定列的顺序排序
SELECT *
FROM users
ORDER BY username DESC;

-- 统计表中的所有记录数量
SELECT COUNT(*)
FROM users;

-- 统计用户名以 "user" 开头的记录数量
SELECT COUNT(*)
FROM users
WHERE username LIKE 'user%';

-- 统计邮箱中包含 "example" 的记录数量
SELECT COUNT(*)
FROM users
WHERE email LIKE '%example%';

-- 查询用户名和邮箱,并为列设置别名
SELECT username AS '用户名', email AS '邮箱'
FROM users;

-- 使用别名进行计算
SELECT COUNT(*) AS '用户数量'
FROM users;

-- 将表名设置为别名,简化查询语句
SELECT u.username, u.email
FROM users AS u;

-- 查询前10条记录
SELECT * FROM users LIMIT 10;

-- 查询第11到第20条记录
SELECT * FROM users LIMIT 10 OFFSET 10;

-- 使用页码和每页记录数进行分页查询
SELECT * FROM users LIMIT 10 OFFSET 20; -- 查询第3页,每页10条记录

8、关联

sql
-- 内连接查询,获取用户及其订单信息
SELECT users.username, orders.order_date
FROM users
INNER JOIN orders ON users.id = orders.user_id;

-- 左连接查询,获取所有用户及其订单信息,如果用户没有订单则显示为 NULL
SELECT users.username, orders.order_date
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

-- 右连接查询,获取所有订单及其对应的用户信息,如果订单没有对应的用户则显示为 NULL
SELECT users.username, orders.order_date
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;

TIP

外键约束

  • CASCADE:在父表上 UPDATE/DELETE 记录时,同步 UPDATE/DELETE 掉子表的匹配记录
  • SET NULL:在父表上 UPDATE/DELETE 记录时,将子表上匹配记录的列设为 null(注意:子表的外键列不能为 not null)
  • NO ACTION:如果子表中有匹配的记录,则不允许对父表对应侯选键进行 UPDATE/DELETE 操作
  • RESTRICT:同 NO ACTION,,都是立即检查外键约束

编程、设计、剪辑、摄影、画画、弹琴、读书