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