sql >> Databasteknik >  >> RDS >> Mysql

Hur skapar man två automatiska inkrementkolumner i MySQL?

Ingen aning om varför du behöver två kolumner automatiskt inkrementerande värden, det är ingen mening... men om du insisterar -
Du kan åstadkomma det i en UDF eller SP på detta sätt har du flera kolumner som automatiskt ökar ett värde.

EXEMPEL #1:LAGRAD PROCEDUR (SP)


Tabell

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



Lagrad procedur

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 ;



Ring SP

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



Slå upp tabellen

SELECT * FROM tests;

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



EXEMPEL #2:ANVÄNDARDEFINIERAD FUNKTION (UDF)


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



Användardefinierad funktion

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 ;



Infoga med hjälp av 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');



Slå upp tabellen

SELECT * FROM tests;

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

Dessa har testats och verifierats. Jag skulle personligen använda funktionen, den är mer flexibel.



  1. Hur spolar jag PRINT-bufferten i TSQL?

  2. Oracle Instant Client för ARM-baserad Debian-enhet

  3. Hur får man bara numeriska kolumnvärden?

  4. Ändra lösenordet på SA-inloggningen i SQL Server (T-SQL-exempel)