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

Mysql SQL查询以插入作为引用ID的列值,mysql,Mysql,朋友们好,我知道这是个愚蠢的问题。但是我的脑子停止工作了,我被困在这个位置上。如果有人对这个问题有任何解决办法,请帮助我 我想要Mysql和SQL Server的解决方案 我有一个名为refreference的表,它具有结构 id int(10) AUTO_INCREMENT reff_id varchar(100) pid int(11) 在哪里 id-自动增量值 reff_id-这是一个具有此格式的

朋友们好,我知道这是个愚蠢的问题。但是我的脑子停止工作了,我被困在这个位置上。如果有人对这个问题有任何解决办法,请帮助我

我想要Mysql和SQL Server的解决方案

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

id          int(10)     AUTO_INCREMENT   
reff_id     varchar(100)         
pid         int(11)         
在哪里

id-自动增量值

reff_id-这是一个具有此格式的唯一字符串xyzddmmyyyyyid,其中id是相同的行id自动递增值,XYZ是长度为3的任意随机字符串

pid-它是名为product的表的外键

我需要一个查询将值插入到表中,查询必须使用上述逻辑动态插入reff_id

任何帮助都将不胜感激:

注意


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

应该可以进行一些更正。。。没有测试它

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

应该进行一些更正。。。没有测试它

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

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

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 value。在将新记录实际插入表中之前,不会生成自动增量值


更好的方法是使用触发器,这意味着您插入一个空行,然后更新记录以设置reff_id列。在这里,您可以使用mysql和sql服务器功能。

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

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 value。在将新记录实际插入表中之前,不会生成自动增量值


更好的方法是使用触发器,这意味着您插入一个空行,然后更新记录以设置reff_id列。在这里,您可以使用mysql和sql Server函数。

您想在其他表中插入reff_id中的日期吗?不,我想要一个单独的查询,该查询在插入时计算reff_id的值,其中日期格式表示为当前日期。要清除:XYZ是任意随机字符串-您想要一个随机三个字符的答案吗从字符A到Z进行编码,然后将其与字符、8位日期和自动增量值连接在一起?或者randoom代码实际上不是随机的,而是来自其他地方吗?您想在其他表中插入reff_id中的日期吗?不,我想要一个单独的查询,在插入时计算reff_id的值,其中日期格式表示当前日期。要清除:XYZ是任意随机字符串-您想要一个随机生成的答案吗从字符A到Z的三个字符的代码,然后将其与一个字符、一个8位日期和自动增量值连接在一起?或者randoom代码实际上不是随机的,而是来自其他地方吗?现在检查。@Aziz Shaikh现在检查。@Aziz Shaikh