本文为作者翻译文章,原文链接:Dealing with MySQL Error Code 1215: “Cannot add foreign key constraint” 在给一个表创建外键时,MySQL...mysql> SHOW TABLES LIKE 'par%'; Empty set (0.00 sec) 解决方法: 先创建父表,再创建子表; SET FOREIGN_KEY_CHECKS=0;后,...INNODB; 父表不是innodbCREATE TABLE `parent` ( `id` int(10) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM...DEFAULT CHARSET=utf8; #修改parent表为innodb ALTER TABLE parent ENGINE=INNODB; reference 后只有父表表名,没有列信息#错误...INNODB; 创建外键失败的更多提示信息:show engine innodb status CREATE TABLE `user` ( `id` int(11) NOT NULL, `name
() } 数据库结构生成器常用命令 $table->engine = 'InnoDB' 指定表引擎 ->charset = 'utf8' 指定数据表默认字符集 ->collation = 'utf8_general_ci...('字段名') dropCloumn(['字段名','字段2']) 外键约束 $table->foreign('当前表从表字段')->references('参考表主表字段')->on('主表')...->onDelete('cascade')//级联删除 ->update('cascade')//级联更新 默认的外键名 数据表名称_外键字段_foreign 删除外键 dropForeign...('外键名') 开启/关闭外键约束 Schema::enableForeignKeyConstraints() Schema::disableForeignKeyConstraints() 创建索引...$table->string('name')->unique();//唯一索引 定义字段完成后创建索引 $table->unique('name'); 传递数组创建复合/合成索引 $table->index
比如我们创建的 events 表, 如果在迁移文件内添加字段,代码如下: [pic] 我们在数据库表中间的位置添加了一个 venue 字段。...我们需要空与非空约束,默认值约束,主键约束,外键约束等等数据库所具有的特性, 这才是关系型数据库的魅力。...比如声明一个布尔类型的值,并声明默认为false: $table->boolean('confirmed')->default(false); 比如设定一个字符串类型的字段,允许为null: $table...指定迁移开始和回滚所要执行的动作, 我们仅仅是添加一个字段,或者在回滚的时候,删除一个字段,代码如下图: [pic] 完成后在命令行执行迁移指令: php artisan migrate 输出结果如下:...,所以laravel所组装的SQL就默认是最后一个字段之后。
Blueprint 类为我们提供了丰富的数据表字段定义方法,通过这些方法我们完成所有与数据表字段相关的操作,包括新增字段、删除字段、修改字段、添加索引和外键等等。...: $table->dropIndex('name'); $table->dropUnique('email'); $table->dropPrimary('id'); 添加、移除外键 所谓外键指的是一张表的字段...A 引用另一张表的字段 B,那么字段 A 就是外键,通过外键可以建立起两张表之间的关联关系,这样,数据表之间就是有关联的了,而不是一个个孤立的数据集。...('id')->on('users'); 如果你还想进一步指定外键约束(级联删除和更新,比如我们删除了 users 表中的某个 id 对应记录,那么其在文章表中对应 user_id 的所有文章会被删除...'); 注:不推荐使用外键,更不要使用外键约束功能,因为影响数据库性能,而且级联删除有可能造成非常严重的无法挽回的后果。
->increments('id'); $table->integer('category_id')->unsigned()->comment('外键');...* * @return void */ public function down() { //删除表时要删除外键约束,参数为外键名称...->increments('id'); $table->integer('post_id')->unsigned()->comment('外键'); $table...* * @return void */ public function down() { //删除表时要删除外键约束,参数为外键名称...tag_id')->unsigned(); $table->timestamps(); //post_id字段作为外键 $table
查询全局作用域 app\Scope 全局范围能为给定模型的所有查询添加约束。...Laravel 自带的 软删除功能 就利用全局作用域从数据库中提取「未删除」的模型。编写自定义的全局作用域可以提供一个方便、简单的方法来确保给定模型的每个查询都受到一定的约束。...如: hasOne(class,foreignkey,primarykey); class:关联模型的类名 foreignkey:关联模型的外键,如果不指定默认外键在这里默认为 muser_id...->engine = 'innoDB'; $table->charset = 'utf8'; $table->collation = 'utf8_general_ci...->engine = 'innoDB'; $table->charset = 'utf8'; $table->collation = 'utf8_general_ci
AppServiceProvider 内注册某模型的观察者: public function boot() { User::observe(UserObserver::class); } 然后添加观察者类...不推荐的方法 还有一种方法,我们本不打算推荐,但是考虑到有的初学者容易犯此类错误,就拿出来最为参照。 程序功能应该单一。比如,尽量避免把数据关联操作放到数据库执行。...MySQL提供了外键约束,并且可以定义触发器用于批次动作处理。...那么使用 Laravel migrations 时,创建photo表的外键关联事件: $table->foreign('user_id')->references('id')->on('users')-...写在最后 本文通过3种方式,实现了Laravel中关联删除表记录的功能。
id,还有用于记录创建时间 created_at 和 更新时间 updated_at,一个 timestamps() 方法就包含了, 只不过默认使用的是不直观的整型时间戳,如果要使用 datetime 格式用于直观地读取...所以,可以完善性地添加一个存在条件判断: Schema::dropIfExists('users'); 这样生成的就是类似下面的额 SQL 语句: DROP TABLE IF EXISTS databse_name.users...而在 laravel 里对一个空表修改字段,完全可以通过,我们创建新的迁移文件,然后在 up 方法内这样调用: $table->string('name', 100)->change(); 看,只用调用一个...: $table->dropColumn('votes'); 常用的约束比如主键约束,联合主键约束,唯一性约束,和索引约束。...']); // 联合主键 还有唯一性约束,为存在的字段创建: $table->unique('email'); // 唯一性 $table->unique('email', 'optional_custom_index_name
嵌套集合模型 安装要求 PHP>=5.4 laravel>=4.1 v4.3版本以后支持Laravel-5.5 v4版本支持Laravel-5.2、5.3、5.4 v3版本支持Laravel-5.1 v2...$table->unsignedInteger(self::PARENT_ID)->nullable(); $table->index(static::getDefaultColumns...: $table->unsignedInteger('_lft'); $table->unsignedInteger('_rgt'); 设置好你的模型后你只需要修复你的结构树来填充_lft和_rgt字段...如果你想添加子节点,你可以添加为父节点的第一个子节点或者最后一个子节点。...: $data = Category::countErrors(); 它将返回含有一下键的数组 oddness -- lft 和 rgt 值错误的节点的数量 duplicates -- lft 或者 rgt
外键约束 MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候,也会自动的创建对应的索引。...SET NULL则表示父表在更新或删除时,子表对应字段值被设置为NULL(不过要求该外键允许为空) 不写ON DELETE ON UPDATE 默认为RESTRICT级别。...1.2 MyISAM MyISAM 不支持事务、也不支持外键,优势就是访问的速度快,以 SELECT、INSERT为主的应用基本上都可以使用这个引擎来创建表。 ...null )engine=myisam charset=utf8; 经测试,MyISAM存储引擎,是没有事务控制的。...在8.0版本后.frm文件就没有了,由.sdi文件存储元数据,并且是以JSON格式存储的,可以格式化一下,就可以方便的看到数据库名、表名以及各个字段。
在您遵循下载说明(并添加到您的路径环境变量)后,使用以下命令安装Laravel: $ composer global require laravel/installer 安装完成后,您可以像这样创建(手脚架...后,您应该可以启动服务器并测试一切正常工作: $ php artisan serve Laravel development server started: Laravel带有Faker,一个伟大的为我们生成正确的虚拟数据格式的库。...当没有找到资源时,这将由Laravel自动返回。 500: 内部服务器错误。理想情况下,你不会明确地返回这个,但如果有意外的中断,这是你的用户将要收到的。 503: 暂停服务。...使用它将使我们的测试快速运行,但是权衡是一些迁移(migration )命令(例如约束)在该特定设置中将无法正常工作。
(一)MyISAM 它不支持事务,也不支持外键,优点是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。...同时需要注意:在某些情况下可能需要返回字段后的空格,而使用这种格式时后面到空格会被自动处理掉。 ...2)外键约束: MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。 ...当某个表被其它表创建了外键参照,那么该表对应的索引或主键被禁止删除。 ...可以使用set foreign_key_checks=0;临时关闭外键约束,set foreign_key_checks=1;打开约束。
B、域完整性:限制类型(数据类型),格式(通过检查约束和规则),可能值范围(通过外键约束,检查约束,默认值定义,非空约束和规则)。...uc_id UNIQUE(studentID, id) )ENGINE=MyISAM default CHARSET=utf8; D、删除列的唯一性约束 alter table score drop...Restrict动作同no action,都是立即检查外键约束。...删除score表的外键约束 ALTER TABLEscoreDROP FOREIGN KEYscore_fk; 增加score表的sid列外键约束 ALTER TABLE `score` ADD CONSTRAINT...删除成绩表的外键约束 ALTER TABLEscoreDROP FOREIGN KEYscore_fk; 增加成绩表的sid列外键约束,参照动作为set null ALTER TABLEscoreADD
何不用Redis来做缓存,等到该post达到一定浏览页面后再刷新下MySQL,效率也很高。...推荐Laravel开发插件三件套,提高开发效率,可以参考之前写的Laravel5.2之Seeder填充数据小技巧: composer require barryvdh/laravel-debugbar...->increments('id'); $table->integer('category_id')->unsigned()->comment('外键');...', [$ipPostViewKey, $ip]); //并给该键设置生命时间,这里设置300秒,300秒后同一IP访问就当做是新的浏览量了 Redis:...//同时,抹掉post内容的缓存键,这样就不用等10分钟后再更新view_count了, //如该篇post在100秒内就达到了30访问量,就在3分钟时更新下MySQL,
key 表示该字段是否是主键、外键、唯一键还是索引。 default value 表示该字段在未显示赋值时的默认值。 extra 表示其它的一些修饰,比如自增 auto_increment。...engine 表示数据库存储引擎,MySQL 支持的常用引擎有 MyISAM、InnoDB、MEMORY 和 ARCHIVE 等,不显示指明默认使用 MyISAM。...主键(Primary Key)与唯一键(Unique Key)有什么区别? 主键的一个或多个列必须为 NOT NULL,而唯一键可以为 NULL。 一个表只能有一个主键,但可以有多个唯一键。...# 删除主键约束 ALTER TABLE tbl_name DROP PRIMARY KEY; # 删除外键约束 ALTER TABLE tbl_name DROP FOREIGN KEY constraint_name...=(log_2015,log_2016,log_2017) INSERT_METHOD=LAST; (1)ENGINE 选项的值必须是 MERGE 或 MRG_MYISAM。
首先有一个安装完成可以运行的laravel框架。 配置database.php 进入laravel根目录。 在config目录下找到database.php文件。...' => null, ], 修改.env 配置完database.php后,进行.env的配置。....env文件在laravel根目录下。 只需要对文件的数据库部分进行修改。...* @return void */ public function down() { //这里删除信息的位置 } } 我们在up()方法中添加如下信息...列唯一 $table->string('password'); //'password' $table->string('email
[img] 所以,laravel模型提供了关联关系,本文就来梳理梳理那些用法。 代码时间 我们不要PPT似的念稿子,罗列出所有的关系模型,那样不直观也不是高效学习的方式。...一个user对应一个profile,所以这是一对一的关系, 在User模型里添加如下声明: class User extends Model { public function profile(...除了在程序上下文的一致性保证外,还可以使用数据库的外键,在删除user时将profile关联删除。...那么只要修改迁移文件, 并添加如下内容: $table->integer('user_id')->unsigned(); $table->foreign('user_id')->references('...id')->on('users')->onDelete('cascade'); 写在最后 本文介绍了laravel模型关联的最简单的“一对一”,我们从程序角度和数据库角度讲解了 如何在删除资源时的一致性删除
引言 上一章我们介绍了比较简单的laravel模型关联关系中的一对一,介绍了关联操作方法。...在模型Profile中添加对应到User模型的关系: class Profile extends Model { public function user() { return...我们说关联关系需要外键,所以需要手动在events表内追加一个字段 state_id,用于指向刚才创建的表states的id字段。...比如创建事件时,手动为其指定状态: $event = new Event; $event->name = "Laravel Hacking and Pizza"; $event->state_id =...而效率也就是根据外键多查询一次SQL的消耗而已。但是明白其中原理之后, 在代码内耗时的操作里,也绝不可滥用关联关系,否则会严重消耗性能。
(2)在对选课表的设计时,我们添加外键约束,可以使得两张表关联,保证数据的一致性和实现一些级联操作。...在MySQL具体实现上,索引需要建立数据结构,需要额外的磁盘空间来存储索引,而键(主键,外键和唯一键)都是逻辑层面的实现和约束,二者还是有着本质的区别。...唯一键可以起到唯一约束的作用,当然主键也可以起到唯一约束的作用。当然我们可以不建立唯一键和主键,直接为指定的数据表的列添加唯一约束。唯一约束保证指定列的值不能重复。...(b)还要注意一点是,使用engine可指明引擎,如果省略了engine语句,则使用默认的引擎(MYISAM)。MYSQL支持三个引擎:ISAM、MYISAM和HEAP。...搜索 [4]MySQL引擎 [5]MySQL中的四种Key [6]SQL的主键和外键约束 [7]唯一索引和唯一约束有什么区别