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;
2. 查看当前数据库
如果你想查看当前选中的数据库(即你正在使用的数据库),可以执行:
SELECT DATABASE();
3. 查看某个数据库中的所有表
要查看某个数据库中的所有表,可以使用以下命令:
SHOW TABLES;
4. 查看表的结构(列定义)
要查看某个表的结构(即列的定义、数据类型等),可以使用以下命令:
DESCRIBE table_name;
或者
SHOW COLUMNS FROM table_name;
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;
7. 数据根据条件排序
升序:
SELECT * FROM userTable ORDER BY age;
降序:
SELECT * FROM userTable ORDER BY age DESC;
8. 修改数据
1. 修改单条记录
如果你想修改某一条记录的 phone
和 email
字段的值,你可以使用以下 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 的记录的 name
和 phone
更新为新的值。
3. 不使用 WHERE
子句
UPDATE userTable SET name = 'Default Name', phone = '0000000000';
注意: 这种方式会将 userTable
表中 所有用户的名字和电话 改为 'Default Name'
和 '0000000000'
,所以请小心使用!
9. 查看数据库的索引
如果你想查看数据库中某个表的索引,可以使用以下命令:
SHOW INDEX FROM table_name;
10. 查看当前数据库的用户权限
要查看当前数据库中的用户权限,可以使用以下命令:
SHOW GRANTS FOR 'username'@'hostname';