Alguém sabe duplicar uma linha, alterar o id(auto_increment) dessa nova linha e atualizar com um Evento?

MySQL

Java

CRUD

Banco de Dados

NetBeans

22/01/2019

Uma pessoa pode ter varios registros, então queria pegar a ultima linha do registro de cada pessoa, duplicar e atualizar através de um Evento.

Ex: João tem os registros: 1,2,3,4,5 e Pedro tem os registros 6,7,8,9,10

Quero duplicar os registros 5 e 10 e atualiza-los com o evento, de forma que os registros anteriores fiquem intactos. É possivel?



-----PRIMEIRA TABELA

create table tbservidores(
nomeserv varchar(50) not null,
cpfserv varchar(30) primary key not null,
tiposerv varchar(30) not null,
total_xerox int,
maxcot int not null

) ENGINE = InnoDB;

------SEGUNDA TABELA

create table tbxerox(
xerox int not null auto_increment,
data_s timestamp default current_timestamp,
qtd_xerox int not null,
valor decimal(10,2) default null,
cpf varchar(30) not null,
restcota int,
primary key(xerox),
INDEX fk_tbxerox_tbservidores_idx(cpf ASC),

constraint fk_tbxerox_tbservidores foreign key(cpf) references tbservidores(cpfserv)

on delete no action
on update no action

) ENGINE = InnoDB;

-------SELECT INNER JOIN

select
X.xerox ,qtd_xerox,valor ,data_s,restcota,
S.nomeserv ,cpfserv ,tiposerv,maxcot,total_xerox
from tbxerox as X
inner join tbservidores as S
on (X.cpf = S.cpfserv);




------EVENTO COM ATUALIZAÇÃO

CREATE EVENT incrementar ON SCHEDULE EVERY 2 minute DO
UPDATE tbxerox
inner join tbservidores on tbxerox.cpf = tbservidores.cpfserv
SET maxcot = (tbxerox.restcota + 80),
total_xerox = (0),
qtd_xerox = (0)
WHERE (tbxerox.restcota) > 0
and tbservidores.tiposerv = 'Professor'
and xerox = +maximoXerox;
Igor

Igor

Curtidas 0

Melhor post

Marcio Souza

Marcio Souza

22/01/2019

Se for fazer isso a nível de aplicação, terá que criar uma consulta ao banco de dados que selecione apenas os registros de um usuário, ordene eles por id e pegue a linha do último id. Altere os dados desejados dessa linha, remova o id para que o banco possa incrementar um novo id e faça um insert.
Um exemplo para a consulta:
select * from tabela where id_usuario = 5 order by id_usuario desc limit 1;

Assim, seu retorno será a linha do usuário com o maior id. Você vai poder alterar os dados dessa linha, remova o id inserindo null e faça um insert no banco.
GOSTEI 1

Mais Respostas

Igor

Igor

22/01/2019

Se for fazer isso a nível de aplicação, terá que criar uma consulta ao banco de dados que selecione apenas os registros de um usuário, ordene eles por id e pegue a linha do último id. Altere os dados desejados dessa linha, remova o id para que o banco possa incrementar um novo id e faça um insert.
Um exemplo para a consulta:
select * from tabela where id_usuario = 5 order by id_usuario desc limit 1;

Assim, seu retorno será a linha do usuário com o maior id. Você vai poder alterar os dados dessa linha, remova o id inserindo null e faça um insert no banco.


Já está selecionando o último id de cada usuário. O evento na real mesmo é pra cada 30 dias atualizar a cota de cada usuário. Ou seja daqui a 30 dias o último registro de cada usuário deve está renovado.

Pensei no UPDATE em vez do INSERT porque vai atualizar apenas algumas colunas e pegar os dados da linha anterior, por isso pensei em duplicar. Se fosse INSERT teria que fazer pra cada usuário, colocando manualmente o nome
GOSTEI 0
POSTAR