一、存储引擎、字符编码相关操作

命令 描述
$table->engine = 'InnoDB'; 指定表的存储引擎(MySQL)
$table->charset = 'utf8'; 指定数据表的默认字符集(MySQL)
$table->collation = 'utf8_unicode_ci'; 指定数据表的字符序(MySQL)
$table->temporary(); 创建临时表(除SQL Server)

二、可用的数据列类型

命令 描述
$table->bigIncrements('id');    等同于自增 UNSIGNED BIGINT(主键)
$table->bigInteger('votes');      等同于 BIGINT 类型列
$table->binary('data');        等同于 BLOB 类型列
$table->boolean('confirmed'); 等同于 BOOLEAN 类型列
$table->char('name', 4); 等同于 CHAR 类型列
$table->date('created_at'); 等同于 DATE 类型列
$table->dateTime('created_at'); 等同于 DATETIME 类型列
$table->dateTimeTz('created_at'); 等同于 DATETIME 类型(带时区)列
$table->decimal('amount', 5, 2); 等同于 DECIMAL 类型列,带精度和范围
$table->double('column', 15, 8); 等同于 DOUBLE 类型列,带精度, 总共15位数字,小数点后8位
$table->enum('level', ['easy', 'hard']); 等同于 ENUM 类型列
$table->float('amount', 8, 2); 等同于 FLOAT 类型列,带精度和总位数
$table->geometry('positions'); 等同于 GEOMETRY 类型列
$table->geometryCollection('positions'); 等同于 GEOMETRYCOLLECTION 类型列
$table->increments('id'); 等同于自增 UNSIGNED INTEGER (主键)类型列
$table->integer('votes'); 等同于 INTEGER 类型列
$table->ipAddress('visitor'); 等同于 IP 地址类型列
$table->json('options'); 等同于 JSON 类型列
$table->jsonb('options'); 等同于 JSONB 类型列
$table->lineString('positions'); 等同于 LINESTRING 类型列
$table->longText('description'); 等同于 LONGTEXT 类型列
$table->macAddress('device'); 等同于 MAC 地址类型列
$table->mediumIncrements('id'); 等同于自增 UNSIGNED MEDIUMINT 类型列(主键)
$table->mediumInteger('numbers'); 等同于 MEDIUMINT 类型列
$table->mediumText('description'); 等同于 MEDIUMTEXT 类型列
$table->morphs('taggable'); 添加一个 UNSIGNED INTEGER 类型的 taggable_id 列和一个 VARCHAR 类型的 taggable_type 列
$table->multiLineString('positions'); 等同于 MULTILINESTRING 类型列
$table->multiPoint('positions'); 等同于 MULTIPOINT 类型列
$table->multiPolygon('positions'); 等同于 MULTIPOLYGON 类型列
$table->nullableMorphs('taggable'); morphs() 列的 nullable 版本
$table->nullableTimestamps(); timestamps() 的别名
$table->point('position'); 等同于 POINT 类型列
$table->polygon('positions'); 等同于 POLYGON 类型列
$table->rememberToken(); 等同于添加一个允许为空的 remember_token VARCHAR(100)
$table->smallIncrements('id'); 等同于自增 UNSIGNED SMALLINT (主键)类型列
$table->smallInteger('votes'); 等同于 SMALLINT 类型列
$table->softDeletes(); 新增一个允许为空的 deleted_at TIMESTAMP 列用于软删除
$table->softDeletesTz(); 新增一个允许为空的 deleted_at TIMESTAMP (带时区)列用于软删除
$table->string('name', 100); 等同于 VARCHAR 类型列,带一个可选长度参数
$table->text('description'); 等同于 TEXT 类型列
$table->time('sunrise'); 等同于 TIME 类型列
$table->timeTz('sunrise'); 等同于 TIME 类型(带时区)
$table->timestamp('added_on'); 等同于 TIMESTAMP 类型列
$table->timestampTz('added_on'); 等同于 TIMESTAMP 类型(带时区)
$table->timestamps(); 添加允许为空的 created_at 和 updated_at TIMESTAMP 类型列
$table->timestampsTz(); 添加允许为空的 created_at 和 updated_at TIMESTAMP 类型列(带时区)
$table->tinyIncrements('numbers'); 等同于自增的 UNSIGNED TINYINT 类型列(主键)
$table->tinyInteger('numbers'); 等同于 TINYINT 类型列
$table->unsignedBigInteger('votes'); 等同于无符号的 BIGINT 类型列
$table->unsignedDecimal('amount', 8, 2); 等同于 UNSIGNED DECIMAL 类型列,带有总位数和精度
$table->unsignedInteger('votes'); 等同于无符号的 INTEGER 类型列
$table->unsignedMediumInteger('votes'); 等同于无符号的 MEDIUMINT 类型列
$table->unsignedSmallInteger('votes'); 等同于无符号的 SMALLINT 类型列
$table->unsignedTinyInteger('votes'); 等同于无符号的 TINYINT 类型列
$table->uuid('id'); 等同于 UUID 类型列
$table->year('birth_year'); 等同于 YEAR 类型列

三、列修改器(不包含索引修改器)

修改器 描述
->after('column') 将该列置于另一个列之后 (MySQL)
->autoIncrement() 设置 INTEGER 列为自增主键
->charset('utf8') 指定数据列字符集(MySQL)
->collation('utf8_unicode_ci') 指定数据列字符序(MySQL/SQL Server)
->comment('my comment') 添加注释信息
->default($value) 指定列的默认值
->first() 将该列置为表中第一个列 (MySQL)
->nullable($value = true) 允许该列的值为 NULL
->storedAs($expression) 创建一个存储生成列(MySQL)
->unsigned() 设置 INTEGER 列为 UNSIGNED(MySQL)
->useCurrent() 设置 TIMESTAMP 列使用 CURRENT_TIMESTAMP 作为默认值
->virtualAs($expression) 创建一个虚拟生成列(MySQL)

四、可用索引类型

命令 描述
$table->primary('id'); 添加主键索引
$table->primary(['id', 'parent_id']); 添加组合索引
$table->unique('email'); 添加唯一索引
$table->index('state'); 添加普通索引
$table->spatialIndex('location'); 添加空间索引(不支持SQLite)

五、修改数据列

先决条件

在修改列之前,确保已经将 doctrine/dbal 依赖添加到 composer.json 文件,Doctrine DBAL 库用于判断列的当前状态并创建对列进行指定调整所需的 SQL 语句:

composer require doctrine/dbal

更新列属性

change 方法允许你修改已存在的列为新的类型,或者修改列的属性。例如,你可能想要增加 字符串类型列的尺寸,下面让我们将 name 列的尺寸从 25 增加到 50:

Schema::table('users', function (Blueprint $table) {
$table->string('name', 50)->change();
});

我们还可以修改该列允许 NULL 值:

Schema::table('users', function (Blueprint $table) {
$table->string('name', 50)->nullable()->change();
});

注:只有以下数据列类型能修改:bigIntegerbinarybooleandatedateTimedateTimeTzdecimalintegerjsonlongTextmediumTextsmallIntegerstringtexttimeunsignedBigIntegerunsignedInteger 和 unsignedSmallInteger

重命名列

要重命名一个列,可以使用表结构构建器上的 renameColumn 方法,在重命名一个列之前,确保 doctrine/dbal 依赖已经添加到 composer.json 文件并且已经运行了 composer update 命令:

Schema::table('users', function (Blueprint $table) {
$table->renameColumn('from', 'to');
});

注:暂不支持 enum 类型的列的修改和重命名。

删除数据列 

要删除一个列,使用 Schema 构建器上的 dropColumn 方法,同样,在此之前,确保已经安装了 doctrine/dbal 依赖:

Schema::table('users', function (Blueprint $table) {
$table->dropColumn('votes');
});

你可以通过传递列名数组到 dropColumn 方法以便可以一次从数据表中删除多个列:

Schema::table('users', function (Blueprint $table) {
$table->dropColumn(['votes', 'avatar', 'location']);
});

注:SQLite 数据库暂不支持在单个迁移中删除或修改多个列。

有效的命令别名

命令 描述
$table->dropRememberToken(); 删除 remember_token 
$table->dropSoftDeletes(); 删除 deleted_at 
$table->dropSoftDeletesTz(); dropSoftDeletes() 方法别名
$table->dropTimestamps(); 删除 created_at 和 updated_at 
$table->dropTimestampsTz(); dropTimestamps() 方法别名

重命名索引

要重命名一个索引,可以使用 renameIndex 方法,这个方法接收当前索引名作为第一个参数以及修改后的索引名作为第二个参数:

$table->renameIndex('from', 'to');

删除索引

要删除索引,必须指定索引名。默认情况下,Laravel 自动分配适当的名称给索引 —— 连接表名、列名和索引类型。

命令 描述
$table->dropPrimary('users_id_primary'); 从 “users” 表中删除主键索引
$table->dropUnique('users_email_unique'); 从 “users” 表中删除唯一索引
$table->dropIndex('geo_state_index'); 从 “geo” 表中删除普通索引
$table->dropSpatialIndex('geo_location_spatialindex'); 从 “geo” 表中删除空间索引(不支持SQLite)

如果要传递数据列数组到删除索引方法,那么相应的索引名称将会通过数据表名、列和键类型来自动生成:

Schema::table('geo', function (Blueprint $table) {
$table->dropIndex(['state']); // Drops index 'geo_state_index'
});

六、其他操作

检查表/列是否存在

使用 hasTable 和 hasColumn 方法检查表或列是否存在:

if (Schema::hasTable('users')) {
//
} if (Schema::hasColumn('users', 'email')) {
//
}

数据库连接 & 表选项

想要在一个数据库连接上执行表结构操作,而该数据库连接并不是默认数据库连接,可以使用 connection 方法:

Schema::connection('foo')->create('users', function (Blueprint $table) {
$table->increments('id');
});

重命名/删除表

要重命名一个已存在的数据表,使用 rename 方法:

Schema::rename($from, $to);

要删除一个已存在的数据表,可以使用 drop 或 dropIfExists 方法:

Schema::drop('users');
Schema::dropIfExists('users');

【Laravel 】数据迁移文件常用方法速查表的更多相关文章

  1. GNU Emacs命令速查表

    GNU Emacs命令速查表 第一章  Emacs的基本概念 表1-1:Emacs编辑器的主模式 模式 功能 基本模式(fundamental mode) 默认模式,无特殊行为 文本模式(text m ...

  2. Github标星3K+,热榜第三,一网打尽数据科学速查表

    这几天,Github上的趋势榜一天一换. 这次一个名为 Data-Science--Cheat-Sheet 的项目突然蹿到了第三名. 仔细一看,确实干货满满.来,让文摘菌推荐一下~ 这个项目本质上是备 ...

  3. 这可能是AI、机器学习和大数据领域覆盖最全的一份速查表

    https://mp.weixin.qq.com/s?__biz=MjM5ODE1NDYyMA==&mid=2653390110&idx=1&sn=b3e5d6e946b719 ...

  4. Git 命令速查表

    Git 命令速查表 1.常用的Git命令 命令 简要说明 git add 添加至暂存区 git add-interactive 交互式添加 git apply 应用补丁 git am 应用邮件格式补丁 ...

  5. Git 常用命令速查表(图文+表格)

    一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r ...

  6. Git命令速查表【转】

    本文转载自:http://www.cnblogs.com/kenshinobiy/p/4543976.html 一. Git 常用命令速查 git branch 查看本地所有分支git status ...

  7. Git 常用命令速查表(图文+表格)【转】

    转自:http://www.jb51.net/article/55442.htm 一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git comm ...

  8. OpenStack 命令行速查表

    OpenStack 命令行速查表   updated: 2017-07-18 08:53 Contents 认证 (keystone) 镜像(glance) 计算 (nova) 实例的暂停.挂起.停止 ...

  9. ABP问题速查表

    如果你领导要让你一夜之间掌握ABP,并且用ABP撸一个项目出来,你很可能很快速的过了一遍ABP文档就马上动手干活了.那么这篇文章就很适合你. 这篇文章列出了很多ABP新手问的问题和解答.注:有些同学问 ...

随机推荐

  1. DOM-BOM-EVENT(4)

    4.dom操作 createElement 创建一个元素 <button id="btn">点击</button> <ul id="ul1& ...

  2. python编程从入门到实践笔记

    我的第一个hello world 程序 print("hello python world") print("hello python world"*3) 打印 ...

  3. Java基础笔记01-02-03-04

    一.今日内容介绍 1.Java开发环境搭建 2.HelloWorld案例 3.注释.关键字.标识符 4.数据(数据类型.常量) 01java语言概述 * A: java语言概述 * a: Java是s ...

  4. 代码文件编码unicode 无标签, 导入vs项目编译不过的问题

    很多人经常需要把代码分别在linux.windows上编译.在linux中gcc编译的时候,文件格式为utf-8无bom格式,可是如果将文件拿到windows上,用vs编译的时候,发现各种报错,且都是 ...

  5. 发布.net core Web到CentOS7

    1.发布一个.net core(只安装了.Net Core运行时,而没有安装ASP.NET Core运行时,需要添加以下节点再发布).  <PublishWithAspNetCoreTarget ...

  6. Tomcat双击startup.bat闪退的原因及解决方式

    很久不碰Tomcat了,最近因为种种原因需要重新投入到Java Web的怀抱,所以又重新接触了Tomcat 我下载了tomcat的压缩包将其解压缩到某个位置,我这里是D盘下的tomcat文件夹中,但是 ...

  7. C#学习与个人总结

    本学期的C#相对来说,自我学习方法大有收获.但自律性.自我约束能力,我是否达到预期的最好效果,这个很难说出口.本学期在图书馆借了一本MySql.微机原理的书看了看,记了一些笔记.感觉知识有一些相同,有 ...

  8. Azure Web App (三)切换你的Net Core Web 项目的数据库连接字符串

    一,引言 上一篇文章讲到今天我们演示了一下,如何在Web App中创建 “Deployment Slot”进行快速无停机部署新功能代码,也使用VS进行发布到创建的Web App中创建的新的部署槽位中, ...

  9. 【运维--安全相关】cerbot证书自动化续期

    前言 Certbot可以配置为在证书过期之前自动更新证书.由于Let’s Encrypt SSL证书有效期时间为90天,所以建议您利用此功能.您可以通过运行以下命令来测试证书的自动续订: 安装 yum ...

  10. Oracle数据库服务器更改计算机名称,导致监听服务打不开解决办法

    1.修改listener.ora和tnsnames.ora文件 文件路径为:C:\Oracle\Instanclient_11_2\network\admin # listener.ora Netwo ...