mysql支持UUID做外键_多表外键下将普通的id主键更新为uuid主键
多表外键下将普通的id主键更新为uuid主键
2019-05-20 02:45:37 来源: 晴天小雨
0
摘要:在多表外键影响和保证数据不删除的前提下,借助Flask-sqlalchemy插件及SQL语句,将MySQL中的普通id自增主键更新为uuid主键。
MySQL相关操作
查看指定表相关的外键和表格
mysql>select table_name, constraint_name, referenced_table_name
->from information_schema.key_column_usage where referenced_table_name="article";
根据查询到的外键名constraint_name以及table_name,依次删除所有关联表的外键
mysql>alter table table_name drop foreign key constraint_name;
将所有关联表的自增id主键设置uuid为主键
注意:必须保证每张表的自增id的修改均为以下同一语句,否则有可能因为字段类型不一致导致1215错误
mysql>alter table table_name modify id varchar(36) character set utf8mb4 not null default "0";
将已有的id数据更新为去掉"-"符号的uuid数据
mysql>update table_name set id = REPLACE(UUID(),"-","");
Flask相关操作
修改Flask模型中各类属性id以及外键的字段类型
注意:所有关联的主键id及外键都需进行更改
import uuiddef get_uuid():
return uuid.uuid4().hex
class Article(db.Model):
....
id = db.Column(db.String(36), default=get_uuid, primary_key=True)
category_id = db.Column(db.String(36), db.ForeignKey("category.id"))
...
Linux相关操作
进入到Flask项目manage.py文件所在的目录
blogs@master:~$ cd blogs/
进行数据库迁移即可
# 检查模型字段是否修改,如果改变,就产生新的迁移文件
blogs@master:~/blogs$ python manage.py db migrate
# 对迁移文件进行迁移
blogs@master:~/blogs$ python manage.py db upgrade
迁移过程中出现CommandError: Target database is not up to date问题的解决
暴力解决方式(数据可删除时)
删除Flask项目中的migration文件夹
再执行数据库迁移三步曲:
# 初始化迁移文件,系统默认生成migrate文件夹
blogs@master:~/blogs$ python manage.py db init
# 检查模型字段是否修改,如果改变,就产生新的迁移文件
blogs@master:~/blogs$ python manage.py db migrate
# 对迁移文件进行迁移
blogs@master:~/blogs$ python manage.py db upgrade
含蓄解决方式(数据不可删除时)
找到最新创建的版本文件(命名格式:版本号_.py),复制版本号信息
blogs@master:~/blogs$ ls -lah migrations/versions/
切换到MySQL数据库,选择Flask模型所在的数据库
# 进入Flask项目所在的数据库
mysql>use article;
# 查看所有的表
mysql>show tables;
# 找到alembic_version表,然后更新其version_num字段的值为最新版本号
mysql> update alembic_version set version_num ="最新的版本号";
退出数据库,执行数据库迁移命令,即可。
# 检查模型字段是否修改,如果改变,就产生新的迁移文件
blogs@master:~/blogs$ python manage.py db migrate
# 对迁移文件进行迁移
blogs@master:~/blogs$ python manage.py db upgrade
数据回滚
如果发现对数据库的更新不满意,可进行数据回滚,前提是未删除过migration文件夹。
# 获取历史版本号
blogs@master:~/blogs$ python manager.py db history
# 回滚到指定版本
blogs@master:~/blogs$ python manager.py db downgrade
收藏
已收藏取消收藏
登录发表你的评论
0条评论
mysql支持UUID做外键_多表外键下将普通的id主键更新为uuid主键相关推荐
- mysql建表 外键_mysql建表外键怎么设
mysql建表外键怎么设 mysql建表时设置外键的方法:在"CREATE TABLE"语句中,通过"[CONSTRAINT ] FOREIGN KEY 字段名 [,字段 ...
- mysql建表外键_mysql建表外键怎么设?
mysql建表时设置外键的方法:在"CREATE TABLE"语句中,通过"[CONSTRAINT ] FOREIGN KEY 字段名 [,字段名2,-] REFEREN ...
- MySQL笔记:第06章_多表查询
第06章_多表查询 多表查询概述 1.一个案例引发的多表连接 1.1 案例说明 1.2 笛卡尔积(或交叉连接)的理解 演示代码 2. 多表查询分类讲解 分类1:等值连接 vs 非等值连接 等值连接 非 ...
- sql删除主键_产品经理的第一节SQL课——ID到底是干什么的?!
来这里找志同道合的小伙伴! "头脑风暴" 同大家一起学SQL之前,先简单头脑风暴一个问题:一个企业里有1000个员工,假如这1000个员工中有300个全叫张伟,如何进行区别管理呢? ...
- 使用阿里云Mysql集群做读写分离_以及使用阿里云服务器自己搭建MyCat集群_费用核算---Linux工作笔记046
咨询了一下阿里云,如果买阿里云的MySQL服务器的话,一台是5500一年,4GHz频率的CPU, 50G的硬盘,如果你也跟我一样,一个单表的数据就达到了20GB的话,那么,只买一台阿里的MySql 服 ...
- mysql 联结主键_联结表中的复合主键 - Sequelize
使用Sequelize和MySQL数据库,我试图在联结表中实现复合主键组合,但遗憾的是没有结果 . 我有 table : 它们与许多人有很多关系 . 在联结表user_has_project中,我想要 ...
- mysql支持事务的储存引擎_「mysql事务与mysql储存引擎」- 海风纷飞Blog
事务概念及存储引擎 1.0 为何要事务? 先来看一个场景,银行转账汇款: 李彦宏和周鸿祎天天打架,现在让李彦宏给周鸿祎转款1000 元 设计如下表 account表 编号(id)用户名(user)金额 ...
- win7插了耳机还是外放_地铁禁止外放10天后,我的耳朵还是阵亡了
酷玩实验室作品首发于微信号 酷玩实验室微信ID:coollabs 乡亲们呐,我是快爷. 最近大家有没有一个感觉:自己这两个月什么也没干, 光用来见证历史了. 然而,就在我以为自己见识过了足够的世面,已 ...
- mysql环境搭载后老出错_使用Docker在window10下搭建SWOFT开发环境,mysql连接错误
使用Docker在window10下搭建SWOFT开发环境,mysql连接错误 { "code": 0, "error": "(Swoft\\Db\\ ...
最新文章
- DCNv2 windows编译 2021ok
- html百度地图标记图标,百度地图开发之点击地图给该位置添加标注(图标)并弹出对应的位置...
- linux打开sqlite3数据库,Centos6.5中如何用sqlite3命令打开’.db’后缀的数据库执行sql...
- windows系统SSH证书设置
- MongoDB启动失败: 此应用无法在你的电脑上运行
- python--简易员工信息系统编写
- ps色板文件怎么导入?
- CMSIS-RTOS
- new_picview_PicView图片浏览器
- python爬虫——爬取taptap游戏的评论信息(通过fiddler抓包)
- Node.js Websocket 井字棋游戏
- 手机免费使用PDF编辑器一键支持PDF转Word,随时随地处理文档
- redisson + CacheManager缓存管理
- adb脚本选择语句_常用adb命令汇总(绝对干货)
- PHP 阿里云视频点播HLS加密(简单流程)
- 新人该如何学习做产品经理
- 期刊论文发表引用部分会算重复率吗
- 基于北斗GPS模块,利用ESP32 S3蓝牙通讯的GPS系统
- ITEXT-定位PDF中图片的坐标与页码
- 接口设计,这36个核心知识点一定要注意
热门文章
- Storm 01之 Storm基本概念及第一个demo
- AM消息中间件OA、ERP消息提醒的必要工具
- 机会是怎么变成陷阱的?
- c语言 swap交换函数_C语言经典100题(14)
- oracle ddl会被什么阻塞,MySQL Online DDL与DML并发阻塞关系总结
- linux备份一个脚本,发个备份脚本 - Linux系统与应用 - LinuxApp - 水木社区
- java自己实现读写锁_关于读写锁算法的Java实现及思考
- linux 日志 停止滚动,linux – syslog在日志轮换后停止记录
- linux mysql 1045 错误_Linux 下,mysql数据库报无法登陆错误:ERROR 1045 (28000): Access denied for use...
- 从网上下载的jar包导入到本地maven库