当前位置: 首页 > wzjs >正文

建设网站有几种渠道网站域名备案和做网站

建设网站有几种渠道,网站域名备案和做网站,南京网站设计公司,中山蓝图科技网站建设文章目录 前言一、表格基础操作1. 创建新表2. 删除表3. 重命名表 二、字段操作1. 添加字段2. 删除字段3. 修改字段4. 重命名字段5.查询字段是否存在 三、索引操作1. 添加索引2. 删除索引3.查询索引是否存在 四、约束操作1. 添加主键约束2. 添加外键约束3. 删除约束 五、关联关系…

文章目录

  • 前言
  • 一、表格基础操作
    • 1. 创建新表
    • 2. 删除表
    • 3. 重命名表
  • 二、字段操作
    • 1. 添加字段
    • 2. 删除字段
    • 3. 修改字段
    • 4. 重命名字段
    • 5.查询字段是否存在
  • 三、索引操作
    • 1. 添加索引
    • 2. 删除索引
    • 3.查询索引是否存在
  • 四、约束操作
    • 1. 添加主键约束
    • 2. 添加外键约束
    • 3. 删除约束
  • 五、关联关系操作
    • 1. 一对一关系
    • 2. 一对多关系
    • 3. 多对多关系
  • 六、事务处理最佳实践
  • 七、实用技巧
  • 八、注意事项

前言

以下是 Sequelize 中常见的表格操作总结,涵盖字段操作、关联关系、索引和约束等。

所有的操作一般应用在迁移文件所以如果没有迁移文件,需要先创建
sequelize官网文档

  • 创建模型

name: 模型的名称
attributes: 模型的属性列表

执行完下面命令,会在目录下创建一个迁移文件,里面就包含了创建表格的执行语句

npx sequelize-cli model:generate --name Article --attributes title:string,content:string
  • 运行迁移(所有未执行) 在数据库中实际创建该表
npx sequelize-cli db:migrate

在这里插入图片描述

  • 创建迁移文件(用于 表格字段增、删、改、查)

如果创建模型之后,想要修改模型,可以再创建一个对应表格的迁移文件,再里面执行文章中的常用指令

npx sequelize-cli migration:generate --name migration-skeleton
  • 运行特定迁移

运行刚刚创建的迁移文件,就会同步更新到数据库了。

npx sequelize-cli db:migrate --to xxxx.js
  • 查看迁移状态

迁移状态会显示updown
up为成功,down为失败

npx sequelize-cli db:migrate:status

在这里插入图片描述

  • 回滚迁移

如果迁移状态显示执行失败,可以手动撤销迁移状态,修改文件之后,重新执行

# 手动标记为未执行
npx sequelize-cli db:migrate:undo --name 20250522084148-article-update-migration.js

一、表格基础操作

1. 创建新表

await queryInterface.createTable('table_name', {id: {type: Sequelize.INTEGER,primaryKey: true,autoIncrement: true},name: {type: Sequelize.STRING,allowNull: false},// 其他字段...
});

2. 删除表

await queryInterface.dropTable('table_name');

3. 重命名表

await queryInterface.renameTable('old_table_name', 'new_table_name');

二、字段操作

1. 添加字段

await queryInterface.addColumn('table_name', 'column_name', {type: Sequelize.DataTypes.INTEGER,allowNull: true,defaultValue: null// 其他选项...
});

2. 删除字段

await queryInterface.removeColumn('table_name', 'column_name');

3. 修改字段

await queryInterface.changeColumn('table_name', 'column_name', {type: Sequelize.DataTypes.STRING(100), // 修改类型allowNull: false,                      // 修改允许nulldefaultValue: 'default_value'          // 修改默认值
});

4. 重命名字段

await queryInterface.renameColumn('table_name', 'old_column_name', 'new_column_name');

5.查询字段是否存在

防御式编程在对表格字段操作之前,最好先检测一下是否存在,减少不必要报错。

const tabeCol = await queryInterface.describeTable('tablenames');
if(!tableCol.column){//如果表格字段 column 不存在执行操作
}

三、索引操作

1. 添加索引

// 普通索引
await queryInterface.addIndex('table_name', ['column1', 'column2'], {name: 'index_name',unique: false // 是否唯一
});// 唯一索引
await queryInterface.addIndex('table_name', ['email'], {name: 'unique_email',unique: true
});

2. 删除索引

await queryInterface.removeIndex('table_name', 'index_name');

3.查询索引是否存在

在对索引操作之前,最好也用防御性编程思想

const index = await queryInterface.showIndex('tablenames');
const indexExists = index.find(index => index.name === 'indexname');if(!indexExists){
//索引不存在,再进行添加索引操作
}

四、约束操作

1. 添加主键约束

await queryInterface.addConstraint('table_name', {fields: ['id'],type: 'primary key',name: 'pk_table_name_id'
});

2. 添加外键约束

await queryInterface.addConstraint('table_name', {fields: ['foreign_key_column'],type: 'foreign key',name: 'fk_constraint_name',references: {table: 'referenced_table',field: 'id'},onDelete: 'CASCADE', // 或 'SET NULL', 'RESTRICT'onUpdate: 'CASCADE'
});

3. 删除约束

await queryInterface.removeConstraint('table_name', 'constraint_name');

五、关联关系操作

1. 一对一关系

// 迁移文件
await queryInterface.addColumn('table1', 'table2_id', {type: Sequelize.INTEGER,references: {model: 'table2',key: 'id'},unique: true // 一对一需要唯一约束
});// 模型定义
Table1.hasOne(Table2);
Table2.belongsTo(Table1);

2. 一对多关系

// 迁移文件
await queryInterface.addColumn('child_table', 'parent_id', {type: Sequelize.INTEGER,references: {model: 'parent_table',key: 'id'}
});// 模型定义
Parent.hasMany(Child);
Child.belongsTo(Parent);

3. 多对多关系

// 创建联结表
await queryInterface.createTable('table1_table2', {table1_id: {type: Sequelize.INTEGER,references: {model: 'table1',key: 'id'}},table2_id: {type: Sequelize.INTEGER,references: {model: 'table2',key: 'id'}},// 其他字段...
});// 模型定义
Table1.belongsToMany(Table2, { through: 'table1_table2' });
Table2.belongsToMany(Table1, { through: 'table1_table2' });

六、事务处理最佳实践

module.exports = {async up(queryInterface, Sequelize) {const transaction = await queryInterface.sequelize.transaction();try {// 所有操作放在这里await queryInterface.addColumn(..., { transaction });await queryInterface.addIndex(..., { transaction });await transaction.commit();} catch (error) {await transaction.rollback();throw error;}},async down(queryInterface) {const transaction = await queryInterface.sequelize.transaction();try {// 逆向操作await queryInterface.removeIndex(..., { transaction });await queryInterface.removeColumn(..., { transaction });await transaction.commit();} catch (error) {await transaction.rollback();throw error;}}
};

注意:
在操作表格的时候,表名要小写复数

比如:
自动生成的迁移文件user,文件名称默认小写,但是模型名称是首字母大写 User
在进行操作的时候要写的对应表名是小写复数users

在这里插入图片描述

七、实用技巧

  1. 批量操作
await Promise.all([queryInterface.addColumn(...),queryInterface.addIndex(...)
]);
  1. 条件操作
const description = await queryInterface.describeTable('table_name');
if (!description.column_name) {await queryInterface.addColumn(...);
}
  1. 数据迁移
await queryInterface.sequelize.query(`UPDATE table_name SET new_column = old_column WHERE condition
`);
  1. 使用原始SQL
await queryInterface.sequelize.query('ALTER TABLE table_name ADD COLUMN column_name INT'
);

八、注意事项

  1. 生产环境警告

    • 大表操作可能锁表,考虑低峰期执行
    • 重要操作前备份数据
    • 先在测试环境验证迁移脚本
  2. 命名规范

    • 表名:复数形式,小写,下划线分隔(如user_profiles
    • 索引名:idx_table_column(如idx_users_email
    • 约束名:fk_table_column(如fk_posts_author_id
  3. 性能考虑

    • 添加索引会提高查询速度但降低写入速度
    • 外键约束确保数据完整性但增加开销
    • 大表修改考虑分批处理

这些操作涵盖了 Sequelize 迁移中最常见的表格操作需求,根据您的具体场景选择适合的操作方式。


文章转载自:

http://Ug45pFyv.rdzgm.cn
http://7VVeWHw2.rdzgm.cn
http://wu2p54I5.rdzgm.cn
http://aH6H7MHM.rdzgm.cn
http://c7qGsbgC.rdzgm.cn
http://ppGk0Hej.rdzgm.cn
http://v5OY5rZ9.rdzgm.cn
http://geglKdgU.rdzgm.cn
http://vbv20He8.rdzgm.cn
http://RPXgaDNR.rdzgm.cn
http://1pv40fyZ.rdzgm.cn
http://4cvRPfzs.rdzgm.cn
http://p9FgLSLw.rdzgm.cn
http://va4vkKtW.rdzgm.cn
http://xaXfdlTl.rdzgm.cn
http://qnLuw8Te.rdzgm.cn
http://tOERxRVJ.rdzgm.cn
http://CmqYqdgz.rdzgm.cn
http://PTiu1sQZ.rdzgm.cn
http://VwG9IV1P.rdzgm.cn
http://TCV92nCT.rdzgm.cn
http://qZZJE9U3.rdzgm.cn
http://ysKbXM6r.rdzgm.cn
http://4uOnLD1T.rdzgm.cn
http://4azH13Bd.rdzgm.cn
http://2YsyHteu.rdzgm.cn
http://Cn7yWSwA.rdzgm.cn
http://xRrMr53K.rdzgm.cn
http://kFPsfz2j.rdzgm.cn
http://4eIXo4nG.rdzgm.cn
http://www.dtcms.com/wzjs/657668.html

相关文章:

  • 响应式网站模板dede用 net做网站
  • 做电子政务网站宝宝发烧反反复复什么原因导致的
  • 中国男女直接做的视频网站温州百度推广公司
  • 公众号涨粉深圳市seo上词多少钱
  • 最专业的微网站开发九江学网站建设
  • 北京网站设计公司wx成都柚米科技15个人网站要不要备案
  • 只做传统嫁衣网站wordpress 国内 优化
  • 如何 攻击网站陕西咸阳做网站的公司
  • 做淘宝联盟网站免费一级域名网站
  • 淘客网站让别人做7游网页游戏平台
  • 优秀vi设计网站商城开发价格服务
  • seo网站程序做网站哪家南京做网站
  • 网站建设 网站开发 区别网站建设合理性
  • 流媒体视频网站建设哈尔滨模板建站新报价
  • 连锁店 网站建设 中企动力php自助建站程序
  • 银川网站开发推广企业页面设计代码怎么写
  • 电子商务网站开发项目策划书网站建设ppt演示文档
  • 网站开发中英文版如何写关键词seo排名公司
  • 怎么增加网站访问量营销推广的作用
  • 做销售网站wordpress mysql配置文件
  • 创建网站和主页企业所得税税前扣除项目有哪些
  • 整个网站都在下雪特效怎么做西安网页设计师
  • 安徽省建设厅门户网站新冠疫苗接种最新消息
  • 我做的网站有时打开很慢什么原因app开发需要多久
  • 辽宁省城乡和建设厅网站卖服务器网站源码
  • 英文二手汽车网站建设广东东莞住建局
  • 杨凌网站开发还能做网站的分类
  • 设计网站私单价格网站被墙什么意思
  • 专业建站外包做网站字体格式用锐利吗
  • 建筑网站图纸哪些广告平台留号码