如何使用存储过程和事务将 table 中的相关数据插入其他 table 中?

How can I insert into a table related data in other tables using stored procedure and transaction?

我有一个 table 已经导入到数据库中。此 table 具有一系列用户友好的数据,因为它来自 Excel 模板,该模板导出为 CSV,然后导入到 table。 在一个过于简单的例子中,我有以下内容:

MYDB.CSV
+----------+--------------------+------------------+-------------------------------------+
| language | item               | title            | description                         |
+----------+--------------------+------------------+-------------------------------------+
| Spanish  | Grandioso Artículo | Gran Título      | Este es un ejemplo en español.      |
| English  | Powerful Item      | Power Title      | This is an example in english.      |
| French   | Incroyable Article | Incroyable Titre | Ceci est un exemple en français.    |
| English  | Dull Item          | Dull Title       | This is another example in english. |
+----------+--------------------+------------------+-------------------------------------+

这些列的数据属于包含更多相关特征的不同 table,例如:

MYDB.LANGUAGES
 ════╤════════════════════ 
  id │ code   description  
 ────┼──────────────────── 
  1  │ eng    English      
  2  │ spa    Spanish      
  3  │ fra    French       
 ════╧════════════════════ 

MYDB.ITEMS
 ════╤═══════════════════════════════ 
  id │ code       description         
 ────┼─────────────────────────────── 
  1  │ dull-789   Dull Item           
  2  │ incr-456   Incroyable Article  
  3  │ gran-123   Grandioso Artículo  
  4  │ powe-951   Powerful Item       
 ════╧═══════════════════════════════ 

如何获取 mydb.csv 列的相关数据,以便能够使用存储过程将其插入到另一个 table 中? 我是试图得到这样的东西:

MYDB.NICETABLE

  id │ code   description   title             
 ════╪═══════════════════════════════════════ 
  1  │ spa    gran-123      Gran Título       
  2  │ eng    powe-951      Powerful Item     
  3  │ fra    incr-456      Incroyable Titre  
  4  │ eng    dull-789      Dull Title        

我已经在存储过程中尝试了以下代码。必须按原样插入的数据,如本例中的csv.title,我可以插入它::

DELIMITER //
    DROP PROCEDURE IF EXISTS addItems //
    CREATE PROCEDURE addItems ()

    BEGIN
        START TRANSACTION;
            /* INSERT INTO the corresponding tables */
            INSERT INTO mydb.nicetable (title) 
                SELECT `title` FROM csv;
        COMMIT;
    END //
DELIMITER ;

CALL addBrand();

如何逐行比较数据(即csv.language)并获得我需要的数据(即languages.code)并将其插入另一个table(即nicetable.code)?

SELECT 与任何查询一样,遵循相同的规则。

在你的情况下,你在语言中进行了子选择

如果您需要其他表的数据,您需要加入它们。

DELIMITER //
    DROP PROCEDURE IF EXISTS addItems //
    CREATE PROCEDURE addItems ()

    BEGIN
        START TRANSACTION;
            /* INSERT INTO the corresponding tables */
            INSERT INTO mydb.nicetable (code   ,title) 
                SELECT (SELECT `code`  FROM LANGUAGES LS WHERE LS.description   = c.language LIMIT 1), c.`title` FROM csv c;
        COMMIT;
    END //
DELIMITER ;