MySQL INSERT i UPDATE na postawie SELECT

W MySQL można w prosty sposób dodać nowe wiersze do jednej tabeli na podstawie danych wybranych z innej tabeli. Poniżej przykład zapytania, które wstawia do tabela1 w pola pole1_t1, pole2_t1, … wybrane wartości z tabela2 uwzględniając zadany warunek:

INSERT INTO `tabela1` (`pole1_t1`,`pole2_t1`,`pole3_t1`,`pole4_t1`,`pole5_t1`) SELECT `pole1_t2`,`pole2_t2`,`pole3_t2`,`pole4_t2`,'dowolna_wartosc' FROM `tabela2` WHERE `pole1_t2`= '2' LIMIT 2;

Nie we wszystkie pola trzeba wstawiać wartości wybrane z innej tabeli. Jak widać w powyższym przykładzie można również zamiast ‚dowolna_wartość’ wpisać własny ciąg znaków.

Oczywiście w zapytaniu możemy wybierać dane z tej samej tabeli, do której wstawiamy nowe rekordy.

Na podobnej zasadzie możemy również aktualizować rekordy:

UPDATE tabela1 t1, (SELECT * FROM tabela2 WHERE id='x') t2 SET t1.pole1 = t2.pole1 where t1.id=t2.id;

Ciekawym rozwiązaniem może być aktualizacja pola wraz ze zwiększeniem jego wartości zależnym od parametrów pobranych na podstawie SELECT’a:

SET @a =0;
UPDATE tb1 SET pole1 = pole1 + ( @a := @a +1 ) WHERE pole2 = 1 AND pole1 > 2 ORDER BY pole1 ASC;

Powyżej wartość pole1 następujących po sobie rekordów według sortowania jest zwiększana o kolejne liczby całkowite.

MySQL – zmiana hasła root’a

W celu zmiany hasła root’a do bazy danych MySQL z linii komend linux’a wydajemy poniższe polecenie:

root@server: mysqladmin -u root -p'starehasło' password nowehasło

wpisując odpowiednio zamiast „starehasło” obecne hasło root’a, a zamiast „nowehasło” hasło, które ma obowiązywać.

Jeżeli nigdy nie ustawialiście hasła dla użytkownika root do bazy danych MySQL i możecie się do niej zalogować bez podawania hasła lokalnie i zdalnie, poniższym poleceniem ustawicie hasło do serwera MySQL:

root@server: mysqladmin -u root password nowehasło

gdzie zamiast „nowehasło” wpisujecie hasło jakie ma być ustawione dla root’a.

W podobny sposób można zmienić hasło dla dowolnego użytkownika serwera MySQL:

root@server: mysqladmin -u adam -p'starehasło' password nowehasło

gdzie zamiast „adam” wpisujecie nazwę użytkownika serwera MySQL, zamiast „starehasło” – obecne hasło użytkownika adam, a zamiast „nowehasło” – hasło jakie ma być ustawione dla podanego użytkownika.

Inną metodą zmiany hasła użytkowników dostępną również z poziomu PHP, jest zalogowanie się do bazy MySQL i zmiana danych przechowywanych w tabeli z hasłami według poniższego wzoru:

root@server: mysql -u root -p

po podaniu hasła i zalogowaniu do MySQL wpisujemy:

mysql> use mysql;

dalej zmieniamy hasło dla użytkownika adam:

mysql> UPDATE `user` SET `password`=PASSWORD("nowehasło") WHERE `User`='adam';

na koniec trzeba przeładować uprawnienia:

mysql> FLUSH PRIVILEGES;
mysql> exit;

Jeśli macie problem z hasłem root’a do bazy danych, w innym artykule opisałem resetowanie hasła root’a.