4. mysql 学习笔记 - 创建数据库/表/字段 增删改查操作

27 阅读4分钟

1. 项目目录结构

my-project/
│
├── node_modules/          # Node.js 的依赖包
├── src/                   # 源代码目录
│   ├── db.ts              # 数据库连接配置文件
│   ├── createDb.ts        # 创建数据库、表、字段的逻辑
│   ├── index.ts           # 主程序,启动 Express 服务并初始化数据库
│
├── tsconfig.json          # TypeScript 配置文件
├── package.json           # 项目配置文件
├── package-lock.json      # 锁定依赖版本
└── .gitignore             # Git 忽略文件

2. 安装依赖

在项目根目录下,执行以下命令安装必需的依赖:

npm init -y
npm install express mysql2
npm install typescript @types/node @types/express --save-dev

3. 配置文件

在根目录新建 tsconfig.json,并且复制粘贴保存:

{
  "compilerOptions": {
    "target": "ES6",                              // 编译目标为 ES6
    "module": "commonjs",                         // 使用 commonjs 模块
    "strict": true,                               // 启用所有严格类型检查选项
    "esModuleInterop": true,                      // 启用 esModule 兼容
    "skipLibCheck": true,                         // 跳过库文件检查
    "outDir": "./dist",                           // 输出目录为 dist
    "rootDir": "./src"                            // 源代码目录为 src
  },
  "include": ["src/**/*.ts"],                      // 只编译 src 文件夹中的文件
  "exclude": ["node_modules"]                      // 排除 node_modules 目录
}

在根目录新建 .gitignore,并且复制粘贴保存:

node_modules/
dist/
.env

4. 代码文件

src/db.ts:

import mysql from 'mysql2';

// 创建连接池
const pool = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: '',
    waitForConnections: true,
    connectionLimit: 10,
    queueLimit: 0
});

const promisePool = pool.promise();

export default promisePool;

src/createDb.ts:

import promisePool from "./db";

// 创建数据库
export const createDatabase = async () => {
    const createDBQuery = 'CREATE DATABASE IF NOT EXISTS kylin_admin';
    try {
        await promisePool.query(createDBQuery);
        console.log('数据库创建成功: ');
    } catch (error) {
        console.log('数据库创建失败: ', error);
    }
};

// 创建表
export const createTable = async () => {
    const createTableQuery = `
        CREATE TABLE IF NOT EXISTS kylin_admin.userTable (
            id INT AUTO_INCREMENT PRIMARY KEY,
            name VARCHAR(100) NOT NULL,
            sex ENUM('Male', 'Female') NOT NULL,
            age INT NOT NULL,
            phone VARCHAR(15) NOT NULL,
            email VARCHAR(100) NOT NULL UNIQUE,
            birthday DATE NOT NULL,
            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        )
    `;
    try {
        await promisePool.query(createTableQuery);
        console.log('数据表创建成功: ');
    } catch(error) {
        console.log('数据表创建失败: ', error);
    }
};

src/index.ts:

import express from 'express';
import { createDatabase, createTable } from './createDB';

const app = express();
const port = 3000;

const initDatabase = async () => {
    await createDatabase();
    await createTable();
};

// 初始化数据库和表
initDatabase().then(() => {
    console.log('数据库和表创建完成');
}).catch((err) => {
    console.log('数据库和表创建失败', err);
});

// 启动服务
app.listen(port, () => {
    console.log(`Server running at http://localhost:${port}`);
});

5. 启动应用

1. 编译 TypeScript 代码

执行以下命令将 TypeScript 代码编译成 JavaScript:

npx tsc

这会将 TypeScript 代码编译到 dist 文件夹中(由 tsconfig.json 配置)。

2. 运行编译后的 JavaScript 文件

编译后,运行编译后的 JavaScript 文件:

node dist/index.js

3. 查看输出

Server running at http://localhost:3000

数据库创建成功:

数据表创建成功:

数据库和表创建完成

6. 查看当前数据库,表,字段

1. 查看所有数据库

如果你想查看 MySQL 服务器中存在的所有数据库,可以使用以下命令:

SHOW DATABASES;

image.png

2. 查看当前数据库

如果你想查看当前选中的数据库(即你正在使用的数据库),可以执行:

SELECT DATABASE();

image.png

3. 查看某个数据库中的所有表

要查看某个数据库中的所有表,可以使用以下命令:

SHOW TABLES;

image.png

4. 查看表的结构(列定义)

要查看某个表的结构(即列的定义、数据类型等),可以使用以下命令:

DESCRIBE table_name;

或者

SHOW COLUMNS FROM table_name;

image.png

5. 在表中插入数据

INSERT INTO userTable(name, sex, age, phone, email, birthday)
VALUES
    ('alice', 'Female', 22, '123456000', 'alice@163.com', '2002-12-24'),
    ('kim', 'Male', 24, '123456000', 'kim@163.com', '2000-06-18'),
    ('charlie', 'Female', 23, '123456000', 'charlie@163.com', '2001-01-16');

语句结束必须以分号结尾,否则 mysql 不执行!!!

6. 查看表中的数据

要查看某个表中的数据,可以使用 SELECT 命令。例如,查看 userTable 表中的所有记录:

SELECT * FROM table_name;

image.png

7. 数据根据条件排序

升序:

SELECT * FROM userTable ORDER BY age;

降序:

SELECT * FROM userTable ORDER BY age DESC;

image.png

8. 修改数据

1. 修改单条记录

如果你想修改某一条记录的 phoneemail 字段的值,你可以使用以下 SQL 语句:

UPDATE userTable SET phone = '13610123846', email = 'kim1001@163.com' WHERE id = 5;

2. 修改多条记录

UPDATE userTable SET name = 'Updated Name', phone = '5551239876' WHERE id IN (5, 6);

这个语句会将 id 为 2 和 3 的记录的 namephone 更新为新的值。

3. 不使用 WHERE 子句

UPDATE userTable SET name = 'Default Name', phone = '0000000000';

注意: 这种方式会将 userTable 表中 所有用户的名字和电话 改为 'Default Name''0000000000',所以请小心使用!

9. 查看数据库的索引

如果你想查看数据库中某个表的索引,可以使用以下命令:

SHOW INDEX FROM table_name;

image.png

10. 查看当前数据库的用户权限

要查看当前数据库中的用户权限,可以使用以下命令:

SHOW GRANTS FOR 'username'@'hostname';