我有像这样的表结构
用户表
id |名称
1 |约翰
2 |山姆
3 |约翰
4 |山姆
5 |约翰
现在我想在表的名称列上添加唯一键约束,并通过附加时间戳来更新这些值,因此我的输出应类似于
id |名称
1 |约翰
2 |山姆
3 |约翰1533051839
4 | Sam1533051840
5 | John1533051841
我正在尝试使用临时表吗?我能做到吗? 我正在尝试以下解决方案
drop table if exists temp_user;
create table temp_user(id int(20), name varchar(128));
insert into temp_user
select id, name
from user
group by user.name;
update user u
inner join temp_user temp_u ON temp_u.id = u.id
SET u.name = CONCAT(u.name, UNIX_TIMESTAMP());
drop table temp_user;
答案 0 :(得分:0)
如果我了解您想要的内容,则需要为Name添加时间戳以使其唯一。也许这不能完全回答您的问题,但我有一个提示。为此,您应该使用触发器而不是创建索引或编写更复杂的查询,其优点如下:
很明显,触发器语法取决于您的dbms,但举例说明您可以在Oracle中执行的操作:
create or replace trigger updateName
after insert on user_table
declare
number_of_user int;
begin
select count(*) into number_of_user
where Name = :NEW.Name;
if(number_of_user <> 0) then
:NEW.Name = CONCAT(:NEW.Name, UNIX_TIMESTAMP());
end if;
end;