Loop n times without using a stored procedure

后端 未结 4 877
闹比i
闹比i 2021-02-04 03:10

How can I write a loop that runs n times in MySql without using a stored procedure.

This is how I do it with a stored procedure:

DELIMITER $$
DROP PR         


        
4条回答
  •  挽巷
    挽巷 (楼主)
    2021-02-04 03:44

    You can do it direcly with MariaDB Sequence Engine. MariaDB is a binary replacement for MySQL.

    "A Sequence engine allows the creation of ascending or descending sequences of numbers (positive integers) with a given starting value, ending value and increment."

    [Manual Sequence Engine]

    Here are some Samples:

        mysql -uroot -p
        Enter password: xxxxxxx
        Welcome to the MariaDB monitor.  Commands end with ; or \g.
        Your MariaDB connection id is 5
        Server version: 10.0.20-MariaDB-log Homebrew
    
        Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
    
        Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
        MariaDB [(none)]> use tmp
        Database changed
        MariaDB [tmp]> select version();
        +---------------------+
        | version()           |
        +---------------------+
        | 10.0.20-MariaDB-log |
        +---------------------+
        1 row in set (0.00 sec)
    
        MariaDB [tmp]> select * from seq_1_to_10;
        +-----+
        | seq |
        +-----+
        |   1 |
        |   2 |
        |   3 |
        |   4 |
        |   5 |
        |   6 |
        |   7 |
        |   8 |
        |   9 |
        |  10 |
        +-----+
        10 rows in set (0.00 sec)
    
        MariaDB [tmp]> select * from seq_1_to_10_step_2;
        +-----+
        | seq |
        +-----+
        |   1 |
        |   3 |
        |   5 |
        |   7 |
        |   9 |
        +-----+
        5 rows in set (0.00 sec)
    
    MariaDB [tmp]> SELECT DAYNAME('1980-12-05' + INTERVAL (seq) YEAR) day,
        ->     '1980-12-05' + INTERVAL (seq) YEAR date FROM seq_0_to_40;
    +-----------+------------+
    | day       | date       |
    +-----------+------------+
    | Friday    | 1980-12-05 |
    | Saturday  | 1981-12-05 |
    | Sunday    | 1982-12-05 |
    | Monday    | 1983-12-05 |
    | Wednesday | 1984-12-05 |
    | Thursday  | 1985-12-05 |
    | Friday    | 1986-12-05 |
    | Saturday  | 1987-12-05 |
    | Monday    | 1988-12-05 |
    | Tuesday   | 1989-12-05 |
    | Wednesday | 1990-12-05 |
    | Thursday  | 1991-12-05 |
    | Saturday  | 1992-12-05 |
    | Sunday    | 1993-12-05 |
    | Monday    | 1994-12-05 |
    | Tuesday   | 1995-12-05 |
    | Thursday  | 1996-12-05 |
    | Friday    | 1997-12-05 |
    | Saturday  | 1998-12-05 |
    | Sunday    | 1999-12-05 |
    | Tuesday   | 2000-12-05 |
    | Wednesday | 2001-12-05 |
    | Thursday  | 2002-12-05 |
    | Friday    | 2003-12-05 |
    | Sunday    | 2004-12-05 |
    | Monday    | 2005-12-05 |
    | Tuesday   | 2006-12-05 |
    | Wednesday | 2007-12-05 |
    | Friday    | 2008-12-05 |
    | Saturday  | 2009-12-05 |
    | Sunday    | 2010-12-05 |
    | Monday    | 2011-12-05 |
    | Wednesday | 2012-12-05 |
    | Thursday  | 2013-12-05 |
    | Friday    | 2014-12-05 |
    | Saturday  | 2015-12-05 |
    | Monday    | 2016-12-05 |
    | Tuesday   | 2017-12-05 |
    | Wednesday | 2018-12-05 |
    | Thursday  | 2019-12-05 |
    | Saturday  | 2020-12-05 |
    +-----------+------------+
    41 rows in set (0.00 sec)
    
    MariaDB [tmp]>
    

    Here one Sample:

    MariaDB [(none)]> use tmp
    Database changed
    MariaDB [tmp]> SELECT * FROM seq_1_to_5,
        -> (SELECT * FROM animals) AS x
        -> ORDER BY seq;
    +-----+------+-----------+-----------------+
    | seq | id   | name      | specie          |
    +-----+------+-----------+-----------------+
    |   1 |    1 | dougie    | dog-poodle      |
    |   1 |    6 | tweety    | bird-canary     |
    |   1 |    5 | spotty    | turtle-spotted  |
    |   1 |    4 | mr.turtle | turtle-snapping |
    |   1 |    3 | cadi      | cat-persian     |
    |   1 |    2 | bonzo     | dog-pitbull     |
    |   2 |    4 | mr.turtle | turtle-snapping |
    |   2 |    3 | cadi      | cat-persian     |
    |   2 |    2 | bonzo     | dog-pitbull     |
    |   2 |    1 | dougie    | dog-poodle      |
    |   2 |    6 | tweety    | bird-canary     |
    |   2 |    5 | spotty    | turtle-spotted  |
    |   3 |    6 | tweety    | bird-canary     |
    |   3 |    5 | spotty    | turtle-spotted  |
    |   3 |    4 | mr.turtle | turtle-snapping |
    |   3 |    3 | cadi      | cat-persian     |
    |   3 |    2 | bonzo     | dog-pitbull     |
    |   3 |    1 | dougie    | dog-poodle      |
    |   4 |    2 | bonzo     | dog-pitbull     |
    |   4 |    1 | dougie    | dog-poodle      |
    |   4 |    6 | tweety    | bird-canary     |
    |   4 |    5 | spotty    | turtle-spotted  |
    |   4 |    4 | mr.turtle | turtle-snapping |
    |   4 |    3 | cadi      | cat-persian     |
    |   5 |    5 | spotty    | turtle-spotted  |
    |   5 |    4 | mr.turtle | turtle-snapping |
    |   5 |    3 | cadi      | cat-persian     |
    |   5 |    2 | bonzo     | dog-pitbull     |
    |   5 |    1 | dougie    | dog-poodle      |
    |   5 |    6 | tweety    | bird-canary     |
    +-----+------+-----------+-----------------+
    30 rows in set (0.00 sec)
    
    MariaDB [tmp]>
    

提交回复
热议问题