Kopiowanie wartości z jednej tabeli do drugiej

0

Cześć! Zaczęłam bawić się bazami danych i natrafiłam na pewien problem.

Otóż mam trzy tabele tabele:

  1. users, gdzie kolumnami sa id, login,haslo,email (klucz główny to id)

  2. incomes_category_assigned_to_users, gdzie kolumnami jest id, user_id, name (id to klucz główny a user_id obcy)

  3. incomes_category_default, gdzie kolumnami jest id oraz name (id jest kluczem głównym)

Teraz chciałabym przekopiować kolumnę name z incomes_category_default do kolumny name z incomes_category_assigned_to_users

wpisuje sobie takie zapytanie:

Insert Into incomes_category_assigned_to_users (user_id, name) Select 1,name From incomes_category_default

To dostaje taką tabele jest w załączniku - przechwytywanie1.jpg
Jak uruchamiam drugi raz to samo zapytanie dostaje taka tabele - przechywtywanie.jpg

Jak widać nie inkrementuje tego jak należy i nie bardzo wiem dlaczego. Bardzo będę wdzięczna za jakąkolwiek wskazówkę co zrobić by ten problem rozwiązać! Pozdrawiam!

0

Ale że czego się spodziewasz? Wygląda jak powinno, dwa razy odpaliłaś zapytanie, więc masz zdublowane dane.

0
tsz napisał(a):

Ale że czego się spodziewasz? Wygląda jak powinno, dwa razy odpaliłaś zapytanie, więc masz zdublowane dane.
Chciałam by się zdublowały, ale id nie jest inkrementowane jak powinno. O to mi chodzi.

0

A co się dzieje jak robisz więcej takich zapytań? Gdyby id podskoczyło o 5 to jeszcze bym się zastanawiał czy się coś nie wycofało bez wycofania sekwencji powiązanej z id, ale tutaj przeszło z 4 do 8.

0
tsz napisał(a):

A co się dzieje jak robisz więcej takich zapytań? Gdyby id podskoczyło o 5 to jeszcze bym się zastanawiał czy się coś nie wycofało bez wycofania sekwencji powiązanej z id, ale tutaj przeszło z 4 do 8.

Zrobiłam 3 razy i omija.

0

A jak dorzucisz na końcu limit 1 i odpalisz kilka razy?

0
tsz napisał(a):

A jak dorzucisz na końcu limit 1 i odpalisz kilka razy?

Niestety pokazał id=22. Tak jakby przeskakiwał co 3.

0

Pokaz jak masz zdefiniowana tabele

0
Tomek Pycia napisał(a):

Pokaz jak masz zdefiniowana tabele

Proszę bardzo.

0
Tomek Pycia napisał(a):

https://stackoverflow.com/questions/16582704/auto-increment-primary-leaving-gaps-in-counting

Przeczytałam i zrobiłam tak:

Insert Into incomes_category_assigned_to_users (id,user_id,name) Select id=(SELECT IFNULL(MAX(id), 0) + 1 FROM incomes_category_assigned_to_users),2,name From incomes_category_default

Dla dwóch wywołań jest dobrze ale dla trzeciego już nie.

0

Nie wiem czemu tak się dzieje, ale wygląda jak by to nie działało. Rozumiem, że nie używasz juz auto_incrementa na ID? Ale ogólne założenie dla Id jest takie, że ma być unikalne. Nie musi byś w sekwencji. A korzystanie z maxa przy id to zło gorsze niż piekło. Podeślij ddl dla tabel to mogę na to popatrzeć.

0

Udało się wykombinować co zrobić by jednak było po kolei. Może sposób nie jest bardzo profesjonalny ale działa!

INSERT INTO incomes_category_assigned_to_users (user_id, name) SELECT users.id,incomes_category_default.name FROM incomes_category_default, users WHERE users.username='Kasia';
SET @max_id = (SELECT MAX(id) FROM incomes_category_assigned_to_users) + 1;
#SELECT @max_id;
SET @sql = CONCAT('ALTER TABLE `incomes_category_assigned_to_users` AUTO_INCREMENT = ', @max_id);
PREPARE stmt FROM @sql;
EXECUTE stmt;

Jeśli i do tego sposobu ktoś ma uwagi chętnie przeczytam :) Dziękuje bardzo za pomoc!

1 użytkowników online, w tym zalogowanych: 0, gości: 1