sql >> Databáze >  >> RDS >> Mysql

Jak vytvořit dva sloupce automatického přírůstku v MySQL?

Nemáte ponětí, proč potřebujete dva sloupce automaticky zvyšovat hodnoty, nemá to smysl... ale pokud na tom trváte -
Můžete toho dosáhnout v UDF nebo SP tímto způsobem, máte několik sloupců, které automaticky zvyšují hodnotu.

PŘÍKLAD #1:ULOŽENÝ POSTUP (SP)


Tabulka

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



Uložená procedura

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 ;



Zavolejte SP

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



Podívejte se do tabulky

SELECT * FROM tests;

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



PŘÍKLAD 2:FUNKCE DEFINOVANÁ UŽIVATELEM (UDF)


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



Uživatelsky definovaná funkce

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 ;



Vložit 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');



Podívejte se do tabulky

SELECT * FROM tests;

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

Ty byly testovány a ověřeny. Osobně bych tuto funkci využil, je flexibilnější.



  1. Jak formátovat čísla jako římské číslice v Oracle

  2. Jak získat poslední vložené ID z tabulky MySQL

  3. Součtový dotaz MYSQL s podmínkou IF

  4. Jak ověřit zálohy MySQL pomocí ClusterControl