如何通过在任何插入上的两个值之间进行混洗来在列上指定两个值作为DEFAULT

问题描述 投票:1回答:1

我有一个名为user_profile的表,包含这三列。我想要做的是当我没有为cover_pic列指定任何值时,它必须插入给定的两个值的默认随机值。

比如有时它会将ABC.png作为默认值插入,有时会插入XYZ.png。

CREATE TABLE user_profile(
    profileId int(11) NOT NULL AUTO_INCREMENT,
    profile_pic VARCHAR(200) DEFAULT "profile.png",
    cover_pic VARCHAR(200) DEFAULT RAND("ABC.png","xyz.png"),
    CONSTRAINT pk_profileId PRIMARY KEY(profileId)
)ENGINE=InnoDB DEFAULT CHARSET=latin1;
sql random mariadb
1个回答
1
投票

这是不可能直接在桌子上的DEFAULT。但如果TRIGGER,您可以使用cover_pic将随机图片文件名设置为NULL列:

CREATE TRIGGER insert_cover_pic BEFORE INSERT ON user_profile
  FOR EACH ROW 
    SET NEW.cover_pic = IF(NEW.cover_pic IS NULL, ELT(FLOOR(RAND()*2)+1, 'pic1', 'pic2'), NEW.cover_pic);

使用这个TRIGGER你可以使用INSERT INTO而不指定列cover_pic(或使用列NULL上的cover_pic):

INSERT INTO user_profile (profile_pic) VALUES ('test.png');
INSERT INTO user_profile (profile_pic, cover_pic) VALUES ('test.png', NULL);

demo on dbfiddle.uk

© www.soinside.com 2019 - 2024. All rights reserved.