朋友们,我知道这是一个愚蠢的问题。但是我的思绪停止了,我被困在这个位置。如果有任何解决方案可以帮助我。
我想要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
的值,其中日期格式表示当前日期
答案 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)函数。