如何通过在任意插入的两个值之间改组将一列中的两个值指定为DEFAULT

时间:2019-02-16 12:52:28

标签: sql random mariadb

我有一个名为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;

1 个答案:

答案 0 :(得分:1)

直接在表上使用DEFAULT是不可能的。但是如果cover_pic,您可以使用TRIGGER将随机图片文件名设置到列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