Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como criar duas colunas de incremento automático no MySQL?


Não faço ideia de por que você precisa de duas colunas com valores de incremento automático, não faz sentido ... mas se você insistir -
Você pode fazer isso em uma UDF ou SP dessa forma, você tem várias colunas incrementando automaticamente um valor.

EXEMPLO 1:PROCEDIMENTO ARMAZENADO (SP)


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



Procedimento armazenado
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 ;



Ligue para o SP
CALL autoInc('one');
CALL autoInc('two');
CALL autoInc('three');



Procure a tabela
SELECT * FROM tests;

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




EXEMPLO 2:FUNÇÃO DEFINIDA PELO USUÁRIO (UDF)


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



Função definida pelo usuário
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 ;



Inserir usando a 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');



Procure a tabela

SELECT * FROM tests;

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

Estes foram testados e verificados. Eu pessoalmente usaria a função, é mais flexível.