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

Jak utworzyć dwie kolumny z automatycznym przyrostem w MySQL?

Nie mam pojęcia, dlaczego potrzebujesz dwóch kolumn z automatyczną inkrementacją wartości, nie ma sensu... ale jeśli nalegasz -
Możesz to zrobić w UDF lub SP w ten sposób, że masz wiele kolumn, które automatycznie zwiększają wartość.

PRZYKŁAD 1:PROCEDURA PRZECHOWYWANIA (SP)


Stół

CREATE TABLE tests (
    test_id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    test_num INT(10) NULL,
    test_name VARCHAR(10) NOT NULL
);



Procedura przechowywana

DELIMITER $$
CREATE PROCEDURE autoInc (name VARCHAR(10))
    BEGIN
        DECLARE getCount INT(10);

        SET getCount = (
            SELECT COUNT(test_num)
            FROM tests) + 1;

        INSERT INTO tests (test_num, test_name)
            VALUES (getCount, name);
    END$$
DELIMITER ;



Zadzwoń do SP

CALL autoInc('one');
CALL autoInc('two');
CALL autoInc('three');



Sprawdź tabelę

SELECT * FROM tests;

+---------+----------+-----------+
| test_id | test_num | test_name |
+---------+----------+-----------+
|       1 |       1  | one       |
|       2 |       2  | two       |
|       3 |       3  | three     |
+---------+----------+-----------+



PRZYKŁAD 2:FUNKCJA ZDEFINIOWANA PRZEZ UŻYTKOWNIKA (UDF)


Stół
CREATE TABLE tests (
    test_id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    test_num INT(10) NULL,
    test_name VARCHAR(10) NOT NULL
);



Funkcja zdefiniowana przez użytkownika

DELIMITER $$
CREATE FUNCTION autoInc ()
    RETURNS INT(10)
    BEGIN
        DECLARE getCount INT(10);

        SET getCount = (
            SELECT COUNT(test_num)
            FROM tests) + 1;

        RETURN getCount;
    END$$
DELIMITER ;



Wstaw za pomocą UDF

INSERT INTO tests (test_num, test_name) VALUES (autoInc(), 'one');
INSERT INTO tests (test_num, test_name) VALUES (autoInc(), 'two');
INSERT INTO tests (test_num, test_name) VALUES (autoInc(), 'three');



Sprawdź tabelę

SELECT * FROM tests;

+---------+----------+-----------+
| test_id | test_num | test_name |
+---------+----------+-----------+
|       1 |       1  | one       |
|       2 |       2  | two       |
|       3 |       3  | three     |
+---------+----------+-----------+

Zostały one przetestowane i zweryfikowane. Osobiście korzystałbym z tej funkcji, jest bardziej elastyczna.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wstawić wiele wartości pól wyboru do tabeli?

  2. Jak klastrować systemy równoważenia obciążenia ProxySQL

  3. Jak uzyskać dane sprzedaży z ostatnich 3 miesięcy w MySQL?

  4. Używanie SQLAlchemy ORM dla klucza innego niż podstawowy, unikalny, automatycznie zwiększający się identyfikator

  5. Warunki wyścigu MySQL