sql >> Database >  >> RDS >> Mysql

Hoe maak je twee kolommen voor automatisch ophogen in MySQL?

Geen idee waarom je twee kolommen nodig hebt voor het automatisch verhogen van waarden, het heeft geen zin... maar als je erop staat -
Je kunt het in een UDF of SP doen, op deze manier heb je meerdere kolommen die automatisch een waarde verhogen.

VOORBEELD #1:OPGESLAGEN PROCEDURE (SP)


Tabel

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



Opgeslagen procedure

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 ;



Bel de SP

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



Zoek de tabel op

SELECT * FROM tests;

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



VOORBEELD #2:DOOR DE GEBRUIKER GEDEFINIEERDE FUNCTIE (UDF)


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



Door de gebruiker gedefinieerde functie

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 ;



Invoegen met de 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');



Zoek de tabel op

SELECT * FROM tests;

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

Deze zijn getest en geverifieerd. Ik zou persoonlijk de functie gebruiken, het is flexibeler.



  1. Wanneer sorteert SQL Server terugspoelen?

  2. 10 effectieve manieren om productiever te zijn op het werk

  3. Waarom maakt Hibernate geen database voor MySQL?

  4. Is het mogelijk om afbeeldingen, geluiden en video's op te slaan in SQL Database?