我有一个要求,在我的sql中,第2列将始终具有第1列的大写值,
不确定是否要在mysql中执行此操作。我想做这样的事情,我知道下面的语法是不正确的,但写了一些伪代码,以明确我想要实现的目标
create table sakila.testupper(name varchar(50),
uppername varchar(50) not null default as select upper(@name));
答案 0 :(得分:1)
我相信你可以通过插入或更新的触发器在大多数MySQL版本中完成此任务:http://dev.mysql.com/doc/refman/5.7/en/triggers.html
答案 1 :(得分:1)
您之后的语法如下所示:"创建表sakila.testupper(名称varchar(50),uppername varchar(50)始终生成为(upper(name)));&#34 ;。但是,您需要最新版本的MySQL 5.7版。
答案 2 :(得分:1)
您不能让表自动执行此操作,但您可以为将来INSERT
创建一个触发器。使用触发器,您需要维护一个单独的表。
drop table if exists p;
drop table if exists q;
create table q (name nvarchar(59),uppername nvarchar(59));
create table p (name nvarchar(59));
create trigger trig_thing after insert on p
for each row
begin
insert into q set name = new.name, uppername = upper(new.name);
end;
insert into p (name) values ('Some nice gentleman');
insert into p (name) values ('A sweet old lady');
select * from q;
您的原始表将仅保留名称,但每次插入都会导致触发器将相同的数据插入到具有名称和大写名称的新表中。
如果您已经在表格中存储了名称,则应在设置触发器之前插入第二个表格以使其排成一行:
insert into q name, upper(name) from p;
here is一个功能性的例子