sql >> データベース >  >> RDS >> Mysql

MYSQL auto_increment_increment

    更新されたバージョン:単一のidのみ フィールドが使用されます。これはおそらくアトミックではないため、並行性が必要な場合はトランザクション内で使用してください:

    http://sqlfiddle.com/#!2/a4ed8/1

    CREATE TABLE IF NOT EXISTS person (
       id  INT NOT NULL AUTO_INCREMENT,
       PRIMARY KEY ( id )
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
    
    CREATE TRIGGER insert_kangaroo_id BEFORE INSERT ON person FOR EACH ROW BEGIN
      DECLARE newid INT;
    
      SET newid = (SELECT AUTO_INCREMENT
                   FROM information_schema.TABLES
                   WHERE TABLE_SCHEMA = DATABASE()
                   AND TABLE_NAME = 'person'
                  );
    
      IF NEW.id AND NEW.id >= newid THEN
        SET newid = NEW.id;
      END IF;
    
      SET NEW.id = 5 * CEILING( newid / 5 );
    END;
    

    古い、機能していない「解決策」(挿入前のトリガーは現在の自動増分値を見ることができません):

    http://sqlfiddle.com/#!2/f4f9a/1

    CREATE TABLE IF NOT EXISTS person (
       secretid  INT NOT NULL AUTO_INCREMENT,
       id        INT NOT NULL,
       PRIMARY KEY ( secretid )
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
    
    CREATE TRIGGER update_kangaroo_id BEFORE UPDATE ON person FOR EACH ROW BEGIN
      SET NEW.id = NEW.secretid * 5;
    END;
    
    CREATE TRIGGER insert_kangaroo_id BEFORE INSERT ON person FOR EACH ROW BEGIN
      SET NEW.id = NEW.secretid * 5; -- NEW.secretid is empty = unusuable!
    END;
    



    1. mysql.hファイルが見つかりません

    2. MySQLインデックス使用クエリの最適化

    3. MySQLで文字列を分割する方法

    4. SQLServerでのsp_help_jobscheduleの使用