SQL查询以插入作为引用ID的列值

时间:2013-12-11 11:59:46

标签: mysql

朋友们,我知道这是一个愚蠢的问题。但是我的思绪停止了,我被困在这个位置。如果有任何解决方案可以帮助我。

我想要Mysql以及SQL Server

的解决方案

我有一个名为refference的表,具有结构

id          int(10)     AUTO_INCREMENT   
reff_id     varchar(100)         
pid         int(11)         

其中

id - 自动增量值

reff_id - 这是一个唯一的字符串,格式为XYZ#ddmmyyyy id(其中id是相同的行id(自动增量值)),XYZ是任意长度为3的随机字符串< / p>

pid - 这是名为product

的表的外键

我需要一个Query来将值插入表中,并且查询必须动态插入reff_id以上逻辑。

任何帮助表示感谢。 :) :)

N.B

我想要一个单独的查询,在插入时计算reff_id的值,其中日期格式表示当前日期

2 个答案:

答案 0 :(得分:2)

应该进行一些修正......没有测试它

INSERT INTO  refference (reff_id, pid)
SELECT CONCAT(substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ', FLOOR(RAND() * 26), 1),
              substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ', FLOOR(RAND() * 26), 1),
              substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ', FLOOR(RAND() * 26), 1), 
              '#',
              DATE_FORMAT(now(), '%d%m%Y'),
              `AUTO_INCREMENT`),
        your_pid
FROM information_schema.tables 
WHERE table_name='refference' -- Can end here if only 1 DB 
AND table_schema = DATABASE();  -- If > 1 DB

答案 1 :(得分:2)

有一种方法可以执行您计划执行的操作,但如果同时访问/插入同一个表,则可能会失败。

MySQL版本:

INSERT INTO refference (reff_id, pid)
VALUES (
   CONCAT('XYZ#', DATE_FORMAT(now(),"%d%m%Y"), CAST(
    (SELECT AUTO_INCREMENT FROM information_schema.TABLES 
    WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='refference') 
    AS CHAR)), 1
)

SQL Server版本:

INSERT INTO refference (reff_id, pid)
VALUES (
   'XYZ#' + REPLACE(CONVERT(VARCHAR(10), GETDATE(), 103), '/', '') + CAST(
    (SELECT IDENT_CURRENT('refference')+1) 
    AS VARCHAR(30))), 1
)

由于并发性,这些容易出现问题,因为如果多个用户同时插入,则在执行SELECT和INSERT语句之间可能会更改AUTO_INCREMENT / IDENT_CURRENT值。在将新记录实际插入表中之前,不会生成自动增量值。

更好的方法是使用TRIGGERS,这意味着您插入一个空行,然后将记录更新为SET reff_id列。在那里你可以使用LAST_INSERT_ID()(mysql)和@@IDENTITY(sql sever)函数。