Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Sharding i generowanie identyfikatorów jako instagram

To jest odpowiednik postgresa

Określ TABLE_SCHEMA i MASKTABLE poniżej

Tworzę MASKTABLE z atrapą pierwszego wpisu

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 ;

Wykorzystanie

select generate_next_id()

Możesz go użyć w wyzwalaczu, takim jak

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. SQL — Zapytanie, aby sprawdzić, czy ciąg zawiera część wartości w kolumnie

  2. Czy istnieje polecenie MySQL do zaimplementowania czegoś takiego jak tabele upuszczania, z wyjątkiem t1,b2?

  3. Wstawianie wartości $zmiennej lub $_POST do tabeli mysql

  4. Jak efektywnie przechowywać dynamiczną listę w kolumnie MySQL?

  5. Jak utworzyć nowe połączenie z bazą danych w django