Skip to content

Sequences

The Sequence class in Weasel.MySql provides sequence-like behavior using a table-based implementation for broad MySQL version compatibility.

How It Works

Since native CREATE SEQUENCE support was only added in MySQL 8.0 (via MariaDB compatibility), Weasel.MySql implements sequences as tables with an AUTO_INCREMENT primary key and a current_value column. This works across all MySQL versions.

Defining a Sequence

cs
var seq = new Sequence("order_seq");
seq.StartWith = 1000;
seq.IncrementBy = 1;

snippet source | anchor

Generating DDL

cs
var migrator = new MySqlMigrator();
var writer = new StringWriter();
seq.WriteCreateStatement(migrator, writer);

snippet source | anchor

This generates:

sql
CREATE TABLE IF NOT EXISTS `public`.`order_seq` (
    id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    current_value BIGINT NOT NULL DEFAULT 1000
);
INSERT IGNORE INTO `public`.`order_seq` (current_value) VALUES (1000);

To drop:

cs
seq.WriteDropStatement(migrator, writer);
// Output: DROP TABLE IF EXISTS `public`.`order_seq`;

snippet source | anchor

Delta Detection

Sequence existence is checked via information_schema.tables:

cs
// Delta detection happens automatically during schema migration.
// The sequence is created if the backing table does not exist.

snippet source | anchor

Usage Pattern

To get the next value from the sequence in application code:

sql
UPDATE `order_seq` SET current_value = LAST_INSERT_ID(current_value + 1);
SELECT LAST_INSERT_ID();

Released under the MIT License.