Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да създам две колони с автоматично увеличение в MySQL?

Нямам представа защо се нуждаете от две колони с автоматично увеличаване на стойностите, няма смисъл... но ако настоявате -
Можете да го постигнете в UDF или SP по този начин имате няколко колони, автоматично увеличаващи стойност.

ПРИМЕР №1:ЗАПАЗЕНА ПРОЦЕДУРА (SP)


Таблица

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



Съхранена процедура

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 ;



Обадете се на SP

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



Погледнете таблицата

SELECT * FROM tests;

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



ПРИМЕР #2:ДЕФИНИРАНА ОТ ПОТРЕБИТЕЛЯ ФУНКЦИЯ (UDF)


Таблица
CREATE TABLE tests (
    test_id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    test_num INT(10) NULL,
    test_name VARCHAR(10) NOT NULL
);



Дефинирана от потребителя функция

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 ;



Вмъкнете с помощта на 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');



Погледнете таблицата

SELECT * FROM tests;

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

Те са тествани и проверени. Аз лично бих използвал функцията, тя е по-гъвкава.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създаване на персонализирана заявка с Spring DATA JPA?

  2. Кой е най-добрият начин за съхраняване на чувствителни данни в MySQL?

  3. Защо \G в SELECT * FROM table_name\G?

  4. обработката на голям брой записи в базата данни с пейджинг се забавя с времето

  5. Преобразуване на mysql колона от INT в TIMESTAMP