Mysql
 sql >> база данни >  >> RDS >> Mysql

Разделяне и генериране на ID като instagram

Това е еквивалент на postgres

Посочете TABLE_SCHEMA и MASKTABLE по-долу

Създавам MASKTABLE с фиктивно първо вписване

DELIMITER $$
CREATE OR REPLACE FUNCTION generate_next_id() RETURNS bigint NOT DETERMINISTIC
MAIN: BEGIN
DECLARE our_epoch bigint;
DECLARE seq_id bigint;
DECLARE now_millis bigint;
DECLARE shard_id int;
DECLARE param bigint ;
SET @our_epoch = 1568873367231;
SET @shard_id = 1;
SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = "SCHEMANAME" AND TABLE_NAME = "MASKTABLE" into @seq_id;
SELECT FLOOR(UNIX_TIMESTAMP()) * 1000 into @now_millis;
SELECT (@now_millis - @our_epoch) << 23 into @param;
SELECT @param | (@shard_id <<10) into @param; 
select @param | (@seq_id) into @param; 
RETURN @param;
END MAIN;$$ 
DELIMITER ;

Използване

select generate_next_id()

Можете да го използвате в тригер като

CREATE TRIGGER trigger_name
BEFORE INSERT ON TableName 
FOR EACH ROW
SET new.id = generate_next_id();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Колоната за фатална грешка на AJAX не може да бъде нула

  2. Възможно ли е да се създаде колона с UNIX_TIMESTAMP по подразбиране в MySQL?

  3. Падащо меню със заявка за съюз

  4. Използване на LIKE в bindParam за MySQL PDO заявка

  5. Проблеми при използването на MySQL конектора с Django 1.8