Tycker inte om när tabeller och fält har samma namn. Det blir förvillande (det är väl åldern), men jag gör ett försök ändå.
Skapa tabellerna:
Kod:
create table Person (
Id int unsigned not null auto_increment primary key,
Name int unsigned not null,
Age tinyint unsigned default null
) engine=innodb;
Kod:
create table Name (
Id int unsigned not null auto_increment primary key,
Name varchar(255) not null ,
unique key Name_unique (Name)
) engine = innodb default charset=latin1;
Skapa proceduren.
Kod:
delimiter //
create procedure insertName(Namn tinytext)
begin
declare chk int default 0;
select count(*) from Name where Name = Namn into chk;
if chk = 0 then
insert into Name (Name) values (Namn);
insert into Person (Name) values (last_insert_id());
end if;
end
//
delimiter ;
Lite kommentarer till proceduren.
Kollar om Namn finns i tabell Name, dvs räknar hur många Namn det finns i tabellen.
Kan ge resultat 0 eller 1.
Kod:
select count(*) from Name where Name = Namn into chk;
Om INTE så lägg dit den.
Ta Id:et på posten stoppa in i tabellen Person
Kod:
if chk = 0 then
insert into Name (Name) values (Namn);
insert into Person (Name) values (last_insert_id());
end if;
Anropa med
Kod:
CALL insertName('Nisse Hult');
CALL insertName('Anders Borg');
CALL insertName('Barak Obama');
Prova att anropa igen med och upptäck att ingenting händer.
Kod:
CALL insertName('Nisse Hult');
Var det så du villa ha det?
·