po drugie - w tabeli "ocena" gdzie jest klucz obcy "IDuczen", nie pobiera mi numeru "IDuczen" takiego jaki jest ustawiony w tabeli "uczen" w kolumnie "IDuczen", czyli ogólnie wygląda to tak :
Nie wiem, co masz na myśli, ale to są chyba jakieś farmazony za przeproszeniem. Klucz obcy (FOREIGN KEY) nie pobiera automatycznie wartości z kolumny z kluczem podstawowym (PRIMARY KEY) z drugiej tabeli. Nie wprowadzaj innych w błąd.
Od jkavalik z IRC:
it cannot do that automatically because it has no idea what you want to reference, you have to tell it, by putting the value, it will then check if such value exists
https://stackoverflow.com/questions/576441/insert-all-values-of-a-table-into-another-table-in-sql
trigger trig2:
CREATE DEFINER=``@`localhost` trigger trig2 after insert on ocena
for each row set @var = 0
trigger increment_var:
CREATE DEFINER=``@`localhost` trigger increment_var after insert on uczen
for each row
set @var = @var+1
set @var = 0;
CREATE TABLE `uczen` (
`iduczen` int(11) NOT NULL AUTO_INCREMENT,
`imie` text,
`nazwisko` text,
`pesel` text,
`klasa` text,
PRIMARY KEY (`iduczen`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8
CREATE TABLE `ocena` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`idprzedmiot` int(11) DEFAULT NULL,
`iduczen` int(11) DEFAULT NULL,
`ocena` int(11) DEFAULT NULL,
`dataw` date DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `iduczen` (`iduczen`),
CONSTRAINT `ocena_ibfk_1` FOREIGN KEY (`iduczen`) REFERENCES `uczen` (`iduczen`)
) ENGINE=InnoDB AUTO_INCREMENT=69 DEFAULT CHARSET=utf8
insert into uczen values(null,'s','sw','w',4);
insert into uczen values(null,'s','sw','w',1);
-----------------------------------------------------------------------------------------------------------
set @zmiennax = concat("insert into ocena (id,idprzedmiot,iduczen,ocena,dataw)
select null,4,uczen.iduczen,5,'2012-02-02'
from uczen order by iduczen desc LIMIT ",@var);
prepare stmtnazwa from @zmiennax;
execute stmtnazwa;
Ten kod omiń.
------------------------------------------------------------------------------------------------------------------
set @zmiennax = concat("insert into ocena (id,idprzedmiot,iduczen,ocena,dataw)
select null,4,uczen.iduczen,5,'2012-02-02'
from uczen where iduczen>((select max(iduczen) from uczen)-@var)");
prepare stmtnazwa300 from @zmiennax;
execute stmtnazwa300;
Najpierw utwórz dwie tabele. Następnie utwórz zmienną. Później wklej do siebie te dwa triggers.
Kolejny krok, to dodanie jakiś rekordów do tabeli, np. takich:
insert into uczen values(null,'s','sw','w',1);
A na samym końcu wklej ten kod na końcu, co podałem wyżej (set @zmiennax ...).
Teraz sprawdź, czy odpowiednio zostały skopiowane rekordy z tabeli `uczen` do `ocena`. Po dodaniu rekordów do tabeli uczen, kopiujesz je stamtąd do `ocena` za pomocą tego polecenia:
execute stmtnazwa300;
https://orkus.wordpress.com/2010/06/29/variable-limit-statement-in-mysql/