# 1.mysql 启动
We've installed your MySQL database without a root password. To secure it run:
mysql_secure_installation
MySQL is configured to only allow connections from localhost by default
To connect run:
mysql -uroot
To have launchd start mysql now and restart at login:
brew services start mysql
Or, if you don't want/need a background service you can just run:
mysql.server start
# 2. mysql 终端连接
- 查看端口是否被使用
lsof -i tcp:3306
连接 mysql -uroot -p
选择要操作的数据库 use
<database>查看所有数据库 show databases
- 创建新的数据库 create database
<database> - 删除数据库 drop database
<database>
查看表 show tables;
查看表结构 desc tablename;
删除表 delete table name;
# 3. 使用 nodejs 连接 mysql
- 工具
npm install mysql2 - 使用
const mysql = require(mysql2/promise)
# 4. sequelize-cli 管理数据库及表结构
- 所有命令都是
npx sequelize开头,使用npx sequelize查看使用帮助 - 创建表及增删列
a. 创建 model,创建 model 的时候会自动创建迁移文件:
npx sequelize model:generate --name todo --attributes text:string(创建表后会自动添加 s 变成todos)
b. 添加列过程:直接执行以下命令会自动在migrations文件夹创建迁移文件,可以在同一个迁移文件里添加多列,然后修改migrations文件夹里对应的文件,示例代码为todos表增加isFinish列
npx sequelize migration:generate --name todoAddColumn
c. 执行迁移命令,会自动检查SequelizeMeta表然后执行合并状态为down的迁移文件,可封装成 npm 命令
"scripts": {
"status": "npx sequelize db:migrate:status",
"migrate": "npx sequelize db:migrate"
},
d. 删除列,执行命令会自动删除isFinish列
npx sequelize db:migrate:undo --name 20201119140351-todoAddColumn.js示例代码链接
e. 注意事项: migrations 文件夹中的都用复数,models文件夹中都用定义时的,
如// migrations 中 20201119145426-create-user.js
roleId: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: 'Roles',
key: 'id',
},
onUpdate: 'CASCADE',
onDelete: 'CASCADE',
},
// models 中 role.js
static associate(models) {
Role.hasMany(models.User)
}
# 5. sequelize 框架实现在服务端代码中对 mysql 代码增删改查
a. 安装依赖
npm install sequelize mysql2 -S
b. 创建 model,model 与数据库中的表对应,截图中左边为在服务端代码中定义 model,右边为通过sequelize-cli自动创建 model 代码。define在内部调用的是init方法。

c.往数据库中新增记录,先创建 model 实例再进行保存,直接使用create方法。
router.get('/addTodo', async function(ctx, next) {
const { text, userId } = ctx.query
await TodoModel.create({ text, userId })
ctx.body = {
code: 0,
message: '任务新增成功',
}
})
d. 修改数据库记录,查询出来后使用update,第一个参数为要修改的字段,第二个为条件,代码如下
router.get('/updateStatus', async function(ctx, next) {
let { id, isFinish } = ctx.query
let status = isFinish == 0 ? 1 : 0
await TodoModel.update({ isFinish: status }, { where: { id } })
ctx.body = {
code: 0,
message: '任务状态更改成功',
}
})
d. 删除数据库记录,直接使用destroy,传递删除条件进去,或者通过 id 查找到记录本身,记录本身调用destroy 方法
router.get('/deleteTask', async function(ctx, next) {
let { id } = ctx.query
await TodoModel.destroy({ where: { id } })
ctx.body = {
code: 0,
message: '任务删除成功',
}
})