Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MYSQL auto_increment_increment

Phiên bản cập nhật:chỉ một id duy nhất trường được sử dụng. Đây rất có thể không phải là nguyên tử, vì vậy hãy sử dụng bên trong một giao dịch nếu bạn cần đồng thời:

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;

"Giải pháp" cũ, không hoạt động (trình kích hoạt chèn trước không thể thấy giá trị tăng tự động hiện tại):

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đếm các mục nhập được liên kết với Sequelize

  2. Trong Django, làm cách nào để chọn 100 bản ghi ngẫu nhiên từ cơ sở dữ liệu?

  3. Sự cố hết thời gian chờ kết nối MySQL - Ứng dụng Grails trên Tomcat sử dụng Hibernate và ORM

  4. Cách tốt nhất để thực hiện tìm kiếm có trọng số trên nhiều trường trong mysql?

  5. Triển khai ứng dụng Java với máy tính để bàn mysql cơ sở dữ liệu