精华内容
下载资源
问答
  • Migration

    2016-12-13 11:00:26
    删除字段或者添加字段php artisan make:migration add_要添加字段column_to表名 –table=表名 composer require doctrine/dbal 如果要删除字段或者是改名字的话要映入这个包

    删除字段或者添加字段

    php artisan make:migration add_要添加字段column_to表名 –(是两个-)table=表名
    composer require doctrine/dbal 如果要删除字段或者是改名字的话要映入这个包

    public function up()
    {
        Schema::table('account_bank_detail', function (Blueprint $table) {
            $table->addColumn('id_card_type');
            //要添加的字段
        });
    }
    
    public function down()
    {
        Schema::table('account_bank_detail', function (Blueprint $table) {
            $table->dropColumn('id_card_type');
            $table->dropColumn('id_card_no');
            //要删除的字段
        });
    }
    展开全文
  • migration

    2012-09-20 16:55:00
    ===========================如何写migration=========================1.migration的结构 每一个migrate的类都是 ActiveRecord::Migration 的子类,每一个migrate都要重写两个方法 up 和 down: Ruby代码...

    =========================== 如何写migration ========================= 


    1.migration的结构

      •  



    每一个migrate的类都是 ActiveRecord::Migration 的子类,每一个migrate都要重写两个方法 up 和 down: 

    Ruby代码 
    1. class CreateProducts < ActiveRecord::Migration   
    2.   def self.up   
    3.      #想干嘛,就干嘛  
    4.    end    
    5.    def self.down   
    6.       #你后悔的时候,你会怎么做?   
    7.     end   
    8. end   


    简单的说 up 方法就是操作数据库时用的,down就是你后悔了,用来回滚用的. 


    2.migration提供调用的方法

      •  



    Migrations提供了一系列的方法来操作数据库: 

    Ruby代码 
    1. create_table  #建表  
    2. change_table  #修改表结构  
    3. drop_table    #删除表  
    4. add_column    #增加字段  
    5. change_column #修改字段定义  
    6. rename_column #修改字段名  
    7. remove_column #删除字段  
    8. add_index     #创建索引  
    9. remove_index  #删除索引  


    具体各个方法的详细定义,可以查看Rails的API http://api.rubyonrails.org/classes/ActiveRecord/Migration.html 
    这些方法替代使用SQL来操作数据库,当然也可以使用 execute 方法直接使用 SQL 来操作数据库,个人不推荐这种方式,但是在某些情况下,提供直接使用SQL也是很方便的: 

    Ruby代码 
    1. execute <<-SQL   
    2. ALTER TABLE products ADD CONSTRAINT fk_products_categories FOREIGN KEY (category_id)  REFERENCES categories(id)    
    3. SQL   




    3.字段

      •  



    定义字段有两种方法: 

    Ruby代码 
    1. #这个是传统的方法  
    2. create_table :products do |t|   
    3. t.column :name:string:null => false   
    4. end   
    5.   
    6. #这个刚出来的时候,大家都说很性感,其实不外乎就是定义一系列的快捷方法: string,  
    7. # text, integer, float, decimal, datetime, timestamp, time, date,  
    8. # binary, boolean . 这一系列的方法对应各种数据类型,  
    9. # 还有 primary_key 方法是用来定义主键的.  
    10. create_table :products do |t|   
    11. t.string :name   
    12. end   


    除了这几个经典的定义字段方法外,还有两个特别的Helper方法: 

    Ruby代码 
    1. #以下这个方法会自动在表中增加 created_at,updated_at这两个类型为timestamp的字段  
    2. change_table :products do |t|   
    3. t.timestamps   
    4. end   
    5.   
    6. #这个方法是定义关于关系的,但是不会为你的表加上外键约束,如果你加上约束,请另外手动添加,切记!  
    7. create_table :products do |t|   
    8. t.references :category # 生成 category_id  
    9.   
    10. #这个是关联关系中多态的定义,生成两个字段 attachment_id 和 attachment_type ,并且attachment_type的默认值为 'Photo'  
    11. t.references :attachment:polymorphic => {:default => 'Photo'}   
    12. end   


    以上两个方法是锦上添花之作,相当的实用. 


    4.在migration中使用 Model

      •  



    除了使用以上方法操作数据库外,其实还可以直接在migration中使用 Model 的.比如: 

    Ruby代码 
    1. def self.up  
    2. #直接就用model来更新数据库,  
    3. #你可以看到 migration 一直在提供便利让你避免使用SQL,当然不是说SQL不好,只是想让你更加的统一,只要ruby就好了.    
    4. User.update_all ["receive_newsletter = ?"true]   
    5. end   



    使用model的另外一种情况是:当前migration要删除表中的一个字段 first_name,但是你的model中的某个方法使用了这个字段作为验证,比如: 

    Ruby代码 
    1. class User < ActiveRecord::Base  
    2.     validates_presence_of :first_name  
    3. end  


    那么当你要在migration中增加一条记录时,这个验证便不能通过,如: 

    Ruby代码 
    1. def self.up   
    2. User.create({:name => 'name'}).save   
    3. end   


    在这种情况下,你可以在migration中重新定义一个model: 

    Ruby代码 
    1. class XXXMigration < ActiveRecord::Migration   
    2. class User < ActiveRecord::Base   
    3. end  
    4. def self.up  
    5. remove_column :first_name  
    6. end  
    7.   
    8. #这个方法的作用就是取得最新的表定义  
    9. User.reset_column_information   
    10. #放心吧,这个User不会有 validates_presence_of :first_name 的验证  
    11. User.create({:name => 'name'}).save  



    =========================== migration文件的命名 ======================= 

    按照Migration的约定去命名你的migration文件,会令你省不少功夫的,请千万要相信这一点. 
    如果migration文件名是这样的格式: AddXXXToYYY” or “RemoveXXXFromYYY 
    XXX => 字段名, YYY => 表名. 
    那么migration生成的时候,Rails会自动为你加上 add_column or remove_column 
    比如: 

    Ruby代码 
    1. #留意类名  
    2. class AddPartNumberToProducts < ActiveRecord::Migration   
    3. def self.up   
    4. add_column :products:part_number:string    
    5. end    
    6. def self.down   
    7. remove_column :products:part_number    
    8. end   
    9. end   
    10.   
    11. class RemovePartNumberFromProducts < ActiveRecord::Migration   
    12. def self.up   
    13. remove_column :products:part_number    
    14. end    
    15. def self.down   
    16. add_column :products:part_number:string    
    17. end   
    18. end   


    cool吧?? 

    =========================== 如何执行migration ========================= 

    执行migration的经典方法: 

    Ruby代码 
    1. rake db:migrate  
    2.   
    3. #执行特定版本  
    4. rake db:migrate VERSION=20080906120000   

    1、创建数据库表格

      在创建Model后,Rails 自动的在/db/migrate文件夹中生成了 迁移编号_create_Model名.rb 格式的文件,如006_create_users.rb

    打开该文件,做如下修改

    	class CreateUsers < ActiveRecord::Migration
    	  def self.up
               #此处加入要创建的表格
               create_table "users"  do |t|
    	      t.column :login,                     :string,  :null => false
    	      t.column :email,                     :string
    	      t.column :crypted_password,          :string, :limit => 40                                   # 字符长度限制
    	      t.column :salt,                      :string, :limit => 40
    	      t.column :created_at,                :datetime
    	      t.column :updated_at,                :datetime
    	      t.column :remember_token,            :string
    	      t.column :remember_token_expires_at, :datetime
                 t.column :flag,                      :boolean,   :null => false, :default => false            #设置默认值
               end
    	  end
    	  def self.down
    	    drop_table "users"
    	  end
    	end
      保存后,运行rake db:migration
      这样就可以在config/database.yml 文件里配置的数据库中创建一个名为:users的数据库表,并且拥有相应的表字段。

    2、修改数据库表格

       如果需要修改之前已经创建好的数据库表,很多人习惯知道用GUI工具到数据库中直接做删除数据表、增加数据表字段、删除数据表字段以及修改一些字段的属性设置。
    当然这样做的效果是一样的,但是假如有那么一天我们所编写的程序因为之前对数据库进行了修改而产生了严重的BUG,我们必须将它修改回来,但是我们现在又忘记了原来的数据表的设置,那么这样就麻烦了。但是如果我们能够记录我们对数据库的每个操作,那么我们想回到哪个数据库版本都可以做到。
    这里做一个例子了说明:
      (1)、删除数据库表,并重建一个新的数据库表
    	class ChangeAttachment < ActiveRecord::Migration
    	  def self.up
    	    drop_table :attachments                   # 删除数据库表
    	    create_table :attachments do |t|
    	      t.column "owner_id", :integer, :null => false
    	      t.column "owner_model", :string, :default => "", :null => false
    	      t.column "type", :string, :default => "", :null => false
    	      t.column "filepath", :string, :default => "", :null => false
    	      t.column "filename", :string, :default => "", :null => false
    	      t.column "type_flag", :string
    	      t.column "enable", :boolean, :default => true, :null => false
    	    end
    	  end
    	  def self.down
    	  end
    	end
      (2)、增加索引
         class AddColumnAndIndex < ActiveRecord::Migration
    	  def self.up
    	    add_index :systems,:client_id
    	    add_index :systems,:scale_length
    	    add_index :systems,:development_start_on
    	  end
    	  def self.down
    	    remove_index :systems,:client_id
    	    remove_index :systems,:scale_length
    	    remove_index :systems,:development_start_on
    	  end
    	end
        (3)、增加数据表字段
           class AddColumnToHolidayrecord < ActiveRecord::Migration
    	  def self.up
    	    add_column :holiday_records, :revert_flag, :boolean, :null => false, :default => false
    	  end
    	  def self.down
    	    remove_column :holiday_records, :revert_flag
    	  end
           end
         (4)、修改字段属性
    	class ChangeUserColumns < ActiveRecord::Migration
    	  def self.up
    	    change_column :users, :birthday,              :date
    	    change_column :users, :graduated_at,          :date
    	    change_column :users, :dimission_at,          :date
    	  end
    	  def self.down
    	    change_column :users, :birthday,              :datetime
    	    change_column :users, :graduated_at,          :datetime
    	    change_column :users, :dimission_at,          :datetime
    	  end
    	end
      注意在上面例子中的关键字如:create_table,drop_table,add_index等等,这些方法决定了数据迁移将进行何种操作。

    3、数据预先导入数据库

     有些数据在项目移交后需要在数据库中生成基本一些数据,比如说一些地名,一些不变的数据,还有一些项目的初始数据。
    因为作为开发人员项目移交后我们不能把自己的数据库给用户,只能是用户创建好数据库后用数据迁移创建所需的数据表。
    但是那时数据库中没有任何数据,所以可以用数据迁移将我们所要的数据加入到数据库当中。比如下面的例子。
    	#初始数据
           class CreateStateDatas < ActiveRecord::Migration
    	  def self.up
    	    State.create(:name=>'北海道')
    	    State.create(:name=>'青森県')
    	    State.create(:name=>'岩手県')
    	    State.create(:name=>'宮城県')
    	    State.create(:name=>'秋田県')
    	    State.create(:name=>'山形県')
    	    State.create(:name=>'福島県')
    	    State.create(:name=>'茨城県')
    	    State.create(:name=>'栃木県')
    	  end
    	  def self.down
    	  end
    	end
           #批量修改数据
    	class ChangeUserNameFulltext < ActiveRecord::Migration
    	  def self.up
    	    users = User.find(:all)
    	    for user in users
    	      unless user.valid?
    	        user.name = "ユーザ名全角文字"
    	        user.save!
    	      end
    	    end
    	  end
    	  def self.down
    	  end
    	end

    4、处理一些与数据库无关的操作

      migration不仅仅可以做与数据库有关的各种操作,同样可以做些其他的操作,只是我们习惯用数据迁移来对数据库版本进行控制。
    这个方法我们不常用,如果需要用到我们可以写到self.up当中,而在self.down中写一个相反的操作代码。

    5、migration的工作原理

    有些人可能对migration的工作原理不了解。这里我简单的说明一下。
    每个迁移任务都有自己的编号,编号从1开始,后续的每个新的任务都会得到在原基础上加1的编号。Rails会记住最近一次作于数据库的 迁移任务编号,登记到/db/schema.rb中
    当你要求使用新的迁移任务来更新数据库结构,它会将所有可用的迁移编号与当前的数据库结构编号进行比较。只要找到编号比Rails所登记的最大编号还大的迁移任务,
    rake将运行该任务。这里要注意的是Rails只关注编号,而不关注你给迁移任务所取的任务名。

    (1)、创建和运行迁移任务

      命令:rake db:migration

    (2)、回退到某个迁移任务版本

      命令:rake db:migration version=10          这里是将迁移任务的版本回到10,注意version、= 、数字之间没有空格

    (3)、解析迁移任务

      每个迁移任务中都有up方法和down方法,如下
    	class ChangeUserNameFulltext < ActiveRecord::Migration
    	  def self.up
    	  end
    	  def self.down
    	  end
    	end
      其中up()方法负责修改数据库,down()负责撤销这些修改,对应的编号管理中up()方法是从小到大的顺序执行,而down()则是由大到小的顺序执行。

    转载于:https://www.cnblogs.com/mingforyou/archive/2012/09/20/2695488.html

    展开全文
  • migration example

    2020-12-09 10:39:11
    <div><p>Please add migration example. And please synchronize github code and downloadable 0.3.3 version <p>thanks</p><p>该提问来源于开源项目:androrm/androrm</p></div>
  • Page migration

    2021-05-24 20:40:36
    Page migration allows moving the physical location of pages between nodes in a NUMA system while the process is running. This means that the virtual addresses that the process sees do not cha

    网址:https://www.kernel.org/doc/html/latest/vm/page_migration.html

    Page migration allows moving the physical location of pages between nodes in a NUMA system while the process is running. This means that the virtual addresses that the process sees do not change. However, the system rearranges the physical location of those pages.

    The main intent of page migration is to reduce the latency of memory accesses by moving pages near to the processor where the process accessing that memory is running.

    How migrate_pages() works
    migrate_pages() does several passes over its list of pages. A page is moved if all references to a page are removable at the time. The page has already been removed from the LRU via isolate_lru_page() and the refcount is increased so that the page cannot be freed while page migration occurs.
    Steps:
    1. Lock the page to be migrated.
    2. Ensure that writeback is complete.
    3. Lock the new page that we want to move to. It is locked so that accesses to this (not yet up-to-date) page immediately block while the move is in progress.
    4. All the page table references to the page are converted to migration entries. This decreases the mapcount of a page. If the resulting mapcount is not zero then we do not migrate the page. All user space processes that attempt to access the page will now wait on the page lock or wait for the migration page table entry to be removed.
    5. The i_pages lock is taken. This will cause all processes trying to access the page via the mapping to block on the spinlock.
    6. The refcount of the page is examined and we back out if references remain. Otherwise, we know that we are the only one referencing this page.
    7. The radix tree is checked and if it does not contain the pointer to this page then we back out because someone else modified the radix tree.
    8. The new page is prepped with some settings from the old page so that accesses to the new page will discover a page with the correct settings.
    9. The radix tree is changed to point to the new page.
    10. The reference count of the old page is dropped because the address space reference is gone. A reference to the new page is established because the new page is referenced by the address space.
    11. The i_pages lock is dropped. With that lookups in the mapping become possible again. Processes will move from spinning on the lock to sleeping on the locked new page.
    12. The page contents are copied to the new page.
    13. The remaining page flags are copied to the new page.
    14. The old page flags are cleared to indicate that the page does not provide any information anymore.
    15. Queued up writeback on the new page is triggered.
    16. If migration entries were inserted into the page table, then replace them with real ptes. Doing so will enable access for user space processes not already waiting for the page lock.
    17. The page locks are dropped from the old and new page. Processes waiting on the page lock will redo their page faults and will reach the new page.
    18. The new page is moved to the LRU and can be scanned by the swapper, etc. again.
    
    展开全文
  • 02 Working on a migration object with the migration object modeler.pdf LTMC
  • <div><p>I have previously run <code>rails g migration AddMissingIndexes</code></p> <p>I wanted to run it again but there is a name clash with the previous migration. Would be helpful it it ...
  • Migration_Demo-源码

    2021-03-20 17:14:17
    Migration_Demo
  • MySQL Migration Toolkit

    2016-01-07 10:31:21
    使用MySQL Migration Toolkit快速将Oracle数据,SQL Server中的数据等各种数据源导入MySQL数据库
  • <div><p>Include the migration itself as an argument to migration callbacks. <p>Fixes #34. <p>More subtle effects: - The migration objects are now frozen immediately after being added. - The <code>this...
  • ORACLE MIGRATION

    2011-11-19 15:31:58
    ORACLE MIGRATION FROM WINDOWS TO LINUX
  • Migration 使用

    2019-03-07 22:11:00
    ### 多个DbContext 迁移 Add-Migration -context CostCenterContext ### 多个DbContext 更新 update-database -context CostCenterContext ### 生成DbContext脚本 Script-Migration -context CostCenterContext ...

    ### 多个DbContext 迁移 Add-Migration -context CostCenterContext ### 多个DbContext 更新 update-database -context CostCenterContext ### 生成DbContext脚本 Script-Migration -context CostCenterContext script-migration -f 20181210031218_v1.8-upgrade -t 20181218095741_v1.9-upgrade -c costcentercontext

    迁移命令描述 CLI命令PMC命令
    创建迁移:migrationname为迁移名称 dotnet ef migrations add migrationName add-migration migrationName
    移除迁移(删除最近的一次迁移) dotnet ef migrations remove remove-migration
    应用所有的迁移(使迁移文件应用到数据库) dotnet ef database update update-database
    指定版本进行迁移 dotnet ef database update migrationName update-database migrationName
    生成对应版本的脚本 dotnet ef migrations script Script-Migration
    查看迁移列表 dotnet ef migrations list  
    查看数据库上下文信息 dotnet ef dbcontext info  


    转载于:https://www.cnblogs.com/weshow/p/10492826.html

    展开全文
  • php-migration 数据库更新维护管理库 如果有以下几种问题,那么你就来对地方了 每次部署程序,都要手动导入数据? 每次数据库字段更新,都要手动去执行一遍? 服务器辣么多,更新数据库要一个一个的手动去执行? ...
  • ogrinfo2migration-源码

    2021-05-19 15:08:35
    ogrinfo2migration 要求 Rails 4+ activerecord-postgis-adapter 3+ 安装 gem install ogrinfo2migration 用法 ogrinfo2migration <shapefile> 例子 在上使用ogrinfo2migration将导致如下迁移: class AddCb...
  • Rails——migration

    2019-07-02 15:16:15
    Rails——migration
  • laravel migration

    2018-12-16 11:21:00
    php artisan make:migration 文件描述 --create=表名 example: php artisan make:migration create_table_notes --create=notes you can config table filed : public function up() { Sche...
  • db2 migration practice

    2012-08-18 18:13:07
    db2 migration practice
  • migration_script-源码

    2021-04-02 22:24:03
    migration_script >简介
  • migration without extension

    2021-01-07 09:24:04
    <div><p>when i use rails g public_activity:migration it creates a migration file without a .rb extension</p><p>该提问来源于开源项目:chaps-io/public_activity</p></div>
  • mybatis migration

    千次阅读 2017-03-07 17:53:25
    第一步:去github上下载migration https://github.com/mybatis/migrations/releases 第二歩:配置migration环境变量(与配置java_home类似) 第三歩:建立一个空目录(如:migration_demo),进入后,...
  • MySQL Migration Toolkit 1.0

    2015-09-07 14:53:57
    MySQL Migration Toolkit 1.0
  • MySQLMigrationTool

    2013-12-05 10:11:21
    MySQLMigrationTool
  • SSMA DB migration tools

    2019-04-29 18:49:31
    DB migration for sybase to Sql Server , version 8.1
  • test-migration2-源码

    2021-03-16 17:41:24
    test-migration2
  • Django开发—如何重置migration

    万次阅读 多人点赞 2016-08-10 01:33:24
    Django开发—如何重置migration@(Django)[migration]情景一:不需要原有的数据库数据 删除数据库所有的表 删除项目的migration模块中的所有 文件,除了init.py 文件 执行脚本 python manage.py makemigrations ...
  • Database Migration

    2018-07-16 18:49:22
    1. Database Migration. 1.1 New DB Creation. We create the new database MAP7APP, MAP7POS via Automation scripts 1. Create database MAP7APP, run automation scripts (The Script i...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,539
精华内容 23,815
关键字:

migration