sql - MySQL - 将字段的默认值设置为字符串连接函数

标签 sql mysql function default-value

我有一个表,看起来有点像这个 actors(forename, surname, stage_name);

我想将 stage_name 更新为默认值

forename." ".surname

这样

insert into actors(forename, surname) values ('Stack', 'Overflow');

会产生记录

'Stack'     'Overflow'    'Stack Overflow'

这可能吗?

谢谢:)

最佳答案

MySQL 不支持列定义的 DEFAULT 选项中的计算列或表达式。

您可以在触发器中执行此操作(需要 MySQL 5.0 或更高版本):

CREATE TRIGGER format_stage_name 
BEFORE INSERT ON actors
FOR EACH ROW
BEGIN
  SET NEW.stage_name = CONCAT(NEW.forename, ' ', NEW.surname);
END

您可能还想创建一个类似的触发器BEFORE UPDATE

注意名字和姓氏中的 NULL,因为 NULL 与任何其他字符串的连接会产生 NULL。在每列或连接的字符串上酌情使用 COALESCE()

edit: 以下示例仅在 NULL 时设置 stage_name。否则,您可以在 INSERT 语句中指定 stage_name,它将被保留。

CREATE TRIGGER format_stage_name 
BEFORE INSERT ON actors
FOR EACH ROW
BEGIN
  IF (NEW.stage_name IS NULL) THEN
    SET NEW.stage_name = CONCAT(NEW.forename, ' ', NEW.surname);
  END IF;
END

关于sql - MySQL - 将字段的默认值设置为字符串连接函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/360467/

相关文章:

R:(中缀)运算符的两个定义之间的冲突:如何指定包?

c++ - 错误:第6行 '{' token 之前不允许在此处进行功能定义

sql - MySQL选择查询条件

mysql - 如何解决Mysql排序错误?

sql - 选择查询中的依赖列

php - 为什么我不应该在 PHP 中使用 mysql_* 函数?

mysql - 在mysql中添加char类型的外键

javascript - Uncaught ReferenceError : maxHeight is not defined

sql - 如何在 SQL 中获取当前日期时间?

sql - UNPIVOT 多行上分隔字符串的结果