playframework数据库管理工具 笔记(2)

来源:互联网 发布:mac淘宝不能对话 编辑:程序博客网 时间:2024/06/06 21:11

# --- !Ups 标记的sql 表示正常状态下会执行的脚本

# --- !Downs 标记的sql表示异常时会执行的脚本(这里一般写成和上面对应的回滚sql)

1.处理并发的evolution script

现在有两个程序员A和B,他们同时提交了2.sql:

# create table User# --- !UpsCREATE TABLE qic_db.User (    id bigint(20) NOT NULL AUTO_INCREMENT,    email varchar(255) NOT NULL,    password varchar(255) NOT NULL,    fullname varchar(255) NOT NULL,    isAdmin boolean NOT NULL,    PRIMARY KEY (id));# --- !DownsDROP TABLE qic_db.User;

# add anther column to User6# --- !UpsALTER TABLE User6 ADD company varchar(255);# --- !DownsALTER TABLE User6 drop company;
那么A在更新的时候就会要求merge it ,现在他只需要

# create table User# ADD anther column to User6# --- !UpsCREATE TABLE qic_db.User (    id bigint(20) NOT NULL AUTO_INCREMENT,    email varchar(255) NOT NULL,    password varchar(255) NOT NULL,    fullname varchar(255) NOT NULL,    isAdmin boolean NOT NULL,    PRIMARY KEY (id));ALTER TABLE User6 ADD company varchar(255);# --- !DownsDROP TABLE qic_db.User;ALTER TABLE User6 drop company;
实验表明:play先会回滚A的2.sql ,执行
DROP TABLE qic_db.User;

然后再执行合并后的2.sql。

2.处理错误的evolution script

当出现了一个错误的evolution script 3.sql:

# Add another column to User  # --- !UpsALTER TABLE User ADD company varchar(255); # --- !DownsALTER TABLE User DROP company;
Play 会提示你

你需要修改3.sql,点击”make it resolved“然后执行你修改过的sql。


3.在prod(生产模式)下的evolution commands

在prod环境中 如果目录下有evolution script 没有被执行过,运行run命令时play会提示 

~        _            _ ~  _ __ | | __ _ _  _| |~ | '_ \| |/ _' | || |_|~ |  __/|_|\____|\__ (_)~ |_|            |__/   ~~ play! master-localbuild, http://www.playframework.org~ framework ID is prod~~ Ctrl+C to stop~ 13:33:22 INFO  ~ Starting ~/test13:33:22 INFO  ~ Precompiling ...13:33:24 INFO  ~ Connected to jdbc:mysql://localhost13:33:24 WARN  ~ 13:33:24 WARN  ~ Your database is not up to date.13:33:24 WARN  ~ Use `play evolutions` command to manage database evolutions.13:33:24 ERROR ~  @662c6n234Can't start in PROD mode with errors Your database needs evolution!An SQL script will be run on your database. play.db.Evolutions$InvalidDatabaseRevisionat play.db.Evolutions.checkEvolutionsState(Evolutions.java:323)at play.db.Evolutions.onApplicationStart(Evolutions.java:197)at play.Play.start(Play.java:452)at play.Play.init(Play.java:298)at play.server.Server.main(Server.java:141)Exception in thread "main" play.db.Evolutions$InvalidDatabaseRevisionat play.db.Evolutions.checkEvolutionsState(Evolutions.java:323)at play.db.Evolutions.onApplicationStart(Evolutions.java:197)at play.Play.start(Play.java:452)at play.Play.init(Play.java:298)at play.server.Server.main(Server.java:141)

要求你先执行 play evolutions

$ play evolutions~        _            _ ~  _ __ | | __ _ _  _| |~ | '_ \| |/ _' | || |_|~ |  __/|_|\____|\__ (_)~ |_|            |__/   ~~ play! master-localbuild, http://www.playframework.org~ framework ID is gbo~~ Connected to jdbc:mysql://localhost~ Application revision is 3 [15ed3f5] and Database revision is 0 [da39a3e]~~ Your database needs evolutions! # ---------------------------------------------------------------------------- # --- Rev:1,Ups - 6b21167 CREATE TABLE User (    id bigint(20) NOT NULL AUTO_INCREMENT,    email varchar(255) NOT NULL,    password varchar(255) NOT NULL,    fullname varchar(255) NOT NULL,    isAdmin boolean NOT NULL,    PRIMARY KEY (id)); # --- Rev:2,Ups - 9cf7e12  ALTER TABLE User ADD age INT;CREATE TABLE Post (    id bigint(20) NOT NULL AUTO_INCREMENT,    title varchar(255) NOT NULL,    content text NOT NULL,    postedAt date NOT NULL,    author_id bigint(20) NOT NULL,    FOREIGN KEY (author_id) REFERENCES User(id),    PRIMARY KEY (id)); # --- Rev:3,Ups - 15ed3f5 ALTER TABLE User ADD company varchar(255); # ---------------------------------------------------------------------------- ~ Run `play evolutions:apply` to automatically apply this script to the db~ or apply it yourself and mark it done using `play evolutions:markApplied`~

如果你想让play执行你的sql脚本请输入:play evolutions:apply

如果你想手动执行,play会自动忽略没有执行过sql脚本,你需要输入:play evolutions:markApplied

如果有任何错误需要回滚到以前的状态 你需要输入:play evolutions: resolve


值得一提的是:如果你删除了之前执行过的 evolution script,再次执行脚本命令时,play会自动执行被删除的sql #---! Downs下的命令



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 京东金融不小心卸载了怎么办 如果京东快递不小心完成订单怎么办 订机票时没有用常旅客卡怎么办 京东退货退款卖家已签收了怎么办 京东账号手机号换了密码忘了怎么办 qq飞车手游录像下载失败怎么办 手机知道qq号怎么破解密码怎么办 网上购物已付钱迟迟不发货怎么办 有人冒充微信头像和熟人借钱怎么办 微信红包输了50多万怎么办 脖子里的绳结接口磨脖子怎么办 母比格犬生了小狗毛色变了怎么办 母比格犬生了小狗毛色很差怎么办 貂皮大衣上的暗扣掉了怎么办 呢子夹克袖子长但又不想改短怎么办 黑色的衣服熨的有点发亮怎么办 宿管阿姨工作中与学生起冲突怎么办 中通快递发的衣服不合适怎么办 加盟母婴店如果不干了货怎么办 双十一搞活动买的东西退货怎么办 天猫预售30天不发货怎么办 天猫搞活动的商品总不发货怎么办 淘宝买的东西物流把货物损坏怎么办 苹果手机5s每部存满怎么办 天猫退货分开发货退的话怎么办 淘宝优惠券电脑端显示不出来怎么办 天猫退货退款寄错了怎么办 天猫已退款货又发过来了怎么办 小米商城预售订单点错退款了怎么办 淘宝发布宝贝类目价格受限制怎么办 2019天猫续签评分不达标怎么办 天猫店铺动态不达标不能续签怎么办 京东自提发现货有问题怎么办 京东试用成功商家不发货怎么办 在淘宝主页搜不到我的店铺名怎么办 淘宝发货单号填到别人那去了怎么办 买家申请淘宝介入后同意退款怎么办 淘宝卖家手机版购买装修模块怎么办 天猫店铺和淘宝店铺想要装修怎么办 支付宝转账银行卡卡号错误怎么办 淘宝图片空间照片全部删除了怎么办