max13/laravel-sqfix

Laravel 包修复 SQLite Schema 语法

v1.3.0 2024-03-16 00:33 UTC

This package is auto-updated.

Last update: 2024-09-16 01:44:10 UTC


README

Latest Version on Packagist GitHub Tests Action Status Total Downloads

SQLite 有很多怪癖,其中一些是错误,由于遗留代码、错误变成了特性等原因而保留。在他们的网站上查看完整列表。

  • ROWID:每个表(除非显式创建 WITHOUT ROWID)都有一个名为 rowid 的 64 位有符号整数列。此列具有与 PRIMARY KEY 预期相同的属性(从 1 开始,是 INTEGER,在整个表中是唯一的,通常在每次插入时增加 1),并且在某些条件下可以重用先前删除的 rowid。只有完全相同的类型(不区分大小写)的 INTEGER PRIMARY KEY 才能使列成为 rowid 的别名。这在大多数情况下是推荐的。
  • AUTOINCREMENT:当使用此关键字时,它将为 rowid 使用不同的算法,简而言之,AUTOINCREMENT 将使 SQLite 创建一个用于跟踪递增的表(sqlite_sequence),rowid 保证递增且不会被重用。AUTOINCREMENT 关键字会带来额外的 CPU、内存、磁盘空间和磁盘 I/O 负担,如果非必要,则应避免使用。通常不需要。

此包替换了 SQLite 建议的默认优化行为,并且不会对其他驱动程序产生影响。Laravel 的 ids 会自动创建为 rowid 的别名,并且 ->trueSyntax() 修改器将使用“未固定的” SQL 语法。

安装

您可以通过 composer 安装此包

composer require max13/laravel-sqfix

就是这样!

使用方法

Schema::create('jobs', function (Blueprint $table) {
    $table->bigIncrements('id');
    // …
});

Laravel 的正常行为是使用以下语句定义 jobs

create table "jobs" ("id" integer not null primary key autoincrement)

这将创建一个名为 id 的列,与 rowid 区分开来,具有相同的属性。双倍工作量。

此包使 Laravel 生成以下表

create table "jobs" ("id" integer primary key)

优化最大

测试

composer test

贡献

请参阅 CONTRIBUTING 了解详细信息。

致谢

许可

MIT 许可证(MIT)。有关更多信息,请参阅 许可文件