web-dev-qa-db-fra.com

Alter Tableau Auto_Increment numéro dans un déclencheur

Je veux que ma colonne d'incrément automatique augmente à l'étape de 3 sur insertion.

Puis-je faire quelque chose comme:

Alter table `mytable` auto_increment = (select max(id) from mytable) + 3;

dans une gâchette?

Je comprends que MySQL a un paramètre Auto_inCrementi_incrême, mais puisque je suis sur un serveur partagé, je ne peux pas le changer.

1
user666923

Dans MySQL, vous pouvez insérer directement dans la colonne Auto_Increment. Donc, prenez cet exemple de MySQL Manual:

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
) ENGINE=MyISAM;

INSERT INTO animals (name) VALUES
    ('dog'),('cat'),('penguin'),
    ('lax'),('whale'),('ostrich');

SELECT * FROM animals;

Qui retourne:

+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | lax     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+

Essayons ça:

TRUNCATE TABLE animals;

CREATE TRIGGER increment_insert BEFORE INSERT ON animals
  FOR EACH ROW 
    SET NEW.id = (SELECT MAX(id) + 2 FROM animals);

INSERT INTO animals (name) VALUES
    ('dog'),('cat'),('penguin'),
    ('lax'),('whale'),('ostrich');

SELECT * FROM animals;

Qui retourne:

| ID |    NAME |
|----|---------|
|  1 |     dog |
|  3 |     cat |
|  5 | penguin |
|  7 |     lax |
|  9 |   whale |
| 11 | ostrich |

(BTW, ce n'est pas une étape de 3, c'est une étape de 2 vous êtes après)

SQL FIDDLE

2
cha