回答

收藏

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

技术问答 技术问答 242 人阅读 | 0 人回复 | 2023-09-14

我有一张表,看起来有点像这个演员(名字,姓氏,stage_name);3 R5 W+ W# S, }4 s- @
我想更新stage_name以使其具有默认值1 a9 L, M  [( E* r2 z8 u
forename." ".surname
( |  u5 K8 Z+ Y. ^以便2 [3 G6 J# H. [8 i
insert into actors(forename, surname) values ('Stack', 'Overflow');
' G2 S" P# ]# B6 f! Q% l; S3 I4 ?会产生记录- u! m; J9 p5 ~. O9 Y$ z
'Stack'     'Overflow'    'Stack Overflow'
, |5 M7 P" n) M/ g这可能吗?  g/ Z, Z. B, K9 Z. j; s* d
谢谢 :)4 S& |9 B* m4 [2 `4 n1 r7 \
                " R: J4 }* ^/ k
解决方案:
  _" E$ w) n+ z) T5 \8 k. {0 d                ! }9 F; ^  K/ f' w

0 H5 l1 @! [- I! a3 l4 Z( M2 B2 r5 C( p& ]" s$ Z1 c0 `
                MySQL在DEFAULT列定义选项中不支持计算列或表达式。5 K8 z1 w; L( r8 X/ N
您可以在触发器中执行此操作(需要MySQL 5.0或更高版本):
* J, w. y" p) ~% T' t3 S* N2 j% ICREATE TRIGGER format_stage_name
- z5 i7 }( U8 _& f* Z* `1 tBEFORE INSERT ON actors  ^. d- O% ]! F8 _
FOR EACH ROW( e' I# z3 H5 m, h* j' B$ b( h* I
BEGIN8 C+ y2 t; i! D' `5 a" m' U
  SET NEW.stage_name = CONCAT(NEW.forename, ' ', NEW.surname);) ^3 w" E1 @! z; l+ x6 |' K3 \
END
- u2 P9 E2 T* D+ Y% P; @: d# ]您可能还想创建一个类似的触发器BEFORE UPDATE。1 \- z2 E. x: {+ U; ?9 b9 t8 C
请注意NULL姓氏和姓氏,因为aNULL与任何其他字符串的连接会产生a NULL。使用COALESCE()每列或对所连接字符串作为适合。
+ L% K" s/ B/ N, E4 G0 w" |0 |编辑: 以下示例stage_name仅在设置时设置NULL。否则,您可以stage_name在INSERT语句中指定,它将被保留。' X  G1 B2 m) n% \' A: ~: N
CREATE TRIGGER format_stage_name 3 @7 s/ ]- G# T+ l
BEFORE INSERT ON actors1 K- x+ _7 S/ W
FOR EACH ROW
9 L; l+ }; f) [9 z: \BEGIN* ^! c7 P( Q  C; ~- p
  IF (NEW.stage_name IS NULL) THEN
% w0 c3 ^. q! r) s    SET NEW.stage_name = CONCAT(NEW.forename, ' ', NEW.surname);
& H- k, D4 ~+ M. D) m: w) x$ r! O  END IF;% r5 b: u3 r4 h3 G3 V1 \
END
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则