Mysql sintaksa ažuriranja. SQL upiti za ažuriranje podataka (UPDATE)

Ako trebamo promijeniti ili ažurirati podatke u MySQL-u, možemo koristiti naredbu SQL UPDATE za rad. ,

gramatika

Ispod je naredba UPDATE za promjenu MySQL podaci Podaci lista Opća SQL sintaksa:

UPDATE table_name SET polje1=nova-vrijednost1, polje2=nova-vrijednost2

  • Možete ažurirati jedno ili više polja istovremeno.
  • Možete navesti bilo koji uvjet u klauzuli WHERE.
  • Također možete ažurirati podatke u zasebnoj tablici.

Kada trebate ažurirati podatke navedene u recima tablice, INEKE je vrlo koristan.

Naredbeni redak za ažuriranje podataka

U nastavku ćemo ažurirati w3big_tbl naveden u podatkovnoj tablici pomoću SQL naredbe AŽURIRAJTE INEKE:

primjeri

Sljedeći primjer će ažurirati podatkovnu tablicu kao w3big_title w3big_id vrijednost polja 3:

# mysql -u root -p lozinka; Unesite lozinku:******* mysql> use w3big; Baza podataka promijenjena mysql> AŽURIRAJ w3big_tbl -> POSTAVI w3big_title="Učenje JAVA-e" -> WHERE w3big_id=3; Query OK, 1 row affected (0.04 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> !}

Koristite PHP skriptu za ažuriranje podataka

PHP funkcija za korištenje mysql_query() za izvršavanje SQL naredbi, možete koristiti naredbu SQL UPDATE ili se INEKE ne primjenjuje.

Ova funkcija u MySQL> naredbenom retku učinak izvršavanja SQL naredbi je isti.

primjeri

Sljedeći primjer će ažurirati podatke w3big_id u polju w3big_title 3.



Sadržaj članka
1. Najjednostavniji MySQL upiti
2. Jednostavni SELECT upiti
3. Jednostavni INSERT (novi unos) upiti
4. Jednostavni UPDATE (prebriši, dodaj) upite
5. Jednostavni DELETE (brisanje zapisa) upiti
6. Jednostavni DROP (brisanje tablice) upiti
7. Složeni MySQL upiti
8. MySQL upiti i PHP varijable

1. Najjednostavniji SQL upiti

1. Prikazuje popis SVIH baza podataka.

SHOW baze podataka;
2. Ispisuje SVE tablice u bazi podataka base_name.

PRIKAŽI tablice u base_name;

2. Jednostavni SELECT upiti prema MySQL bazi podataka

IZABERI– upit koji odabire postojeće podatke iz baze podataka. Možete navesti određene parametre odabira za odabir. Na primjer, suština zahtjeva na ruskom zvuči ovako: ODABERITE takve i takve stupce IZ te i te tablice GDJE je parametar tog i tog stupca jednak vrijednosti.

1. Odabire SVE podatke u tablici tbl_name.

SELECT * FROM tbl_name;
2. Prikazuje broj zapisa u tablici tbl_name.

SELECT count(*) FROM tbl_name;
3. Odabire (SELECT) iz (FROM) tablice tbl_name limit (LIMIT) 3 zapisa, počevši od 2.

SELECT * FROM tbl_name LIMIT 2,3;
4. Odabire (SELECT) SVE (*) zapise iz (FROM) tablice tbl_name i sortira ih (ORDER BY) po id polju redom.

SELECT * FROM tbl_name ORDER BY id;
5. Odabire (SELECT) SVE zapise iz (FROM) tablice tbl_name i sortira ih (ORDER BY) prema ID polju OBRTNIM redoslijedom.

SELECT * FROM tbl_name ORDER BY id DESC;
6. Odabire ( IZABERI) SVI (*) zapisi iz ( IZ) stolovi korisnika i sortira ih ( NARUČI PO) na polju iskaznica uzlaznim redoslijedom, ograničenje ( OGRANIČITI) prvih 5 unosa.

SELECT * FROM korisnika ORDER BY id LIMIT 5;
7. Odabire sve zapise iz tablice korisnika, gdje je polje fname odgovara vrijednosti Gena.

SELECT * FROM korisnika WHERE fname="Gena";
8. Odabire sve zapise iz tablice korisnika, gdje je vrijednost polja fname poceti sa Ge.

SELECT * FROM users WHERE fname LIKE "Ge%";
9. Odabire sve zapise iz tablice korisnika, Gdje fname završava sa na, i sortira zapise uzlaznim redoslijedom vrijednosti iskaznica.

SELECT * FROM korisnici WHERE fname LIKE "%na" ORDER BY id;
10. Odabire sve podatke iz stupaca fname, ime sa stola korisnika.

SELECT fname, lname FROM korisnika;

11. Recimo da imate državu u tablici korisničkih podataka. Dakle, ako želite prikazati SAMO popis vrijednosti koje se pojavljuju (tako da se, na primjer, Rusija ne prikazuje 20 puta, već samo jednom), tada koristimo DISTINCT. Iz mase ponavljajućih vrijednosti izvući će Rusiju, Ukrajinu, Bjelorusiju. Dakle, sa stola korisnika zvučnici zemlja Izvest će se SVE JEDINSTVENE vrijednosti

SELECT DISTINCT country FROM korisnika;
12. Odabire SVE podatke retka iz tablice korisnika Gdje dob ima vrijednosti 18,19 i 21.

SELECT * FROM korisnika WHERE dob IN (18,19,21);
13. Odaberite% s MAKSIMALNA vrijednost dob u stolu korisnika. To jest, ako imate najveću vrijednost u svojoj tablici dob(od engleskog age) je 55, tada će rezultat upita biti 55.

SELECT max(age) FROM korisnika;
14. Odaberite podatke iz tablice korisnika po poljima Ime I dob GDJE dob uzima najmanju vrijednost.

SELECT ime, min(dob) FROM korisnika;
15. Odaberite podatke iz tablice korisnika na polju Ime GDJE iskaznica NIJE JEDNAKO 2.

SELECT ime FROM korisnika WHERE id!="2";

3. Jednostavni INSERT (novi unos) upiti

UMETNUTI– upit koji omogućuje POČETNO umetanje zapisa u bazu podataka. Odnosno, stvara NOVI zapis (liniju) u bazi podataka.

1. radi novi unos u stolu korisnika, u polju Ime ubacuje Sergej, a u polju dob umeće 25. Dakle, u tablicu se dodaje novi redak s ovim vrijednostima. Ako postoji više stupaca, preostali će ostati ili prazni ili sa zadanim vrijednostima.

INSERT INTO korisnici (ime, dob) VRIJEDNOSTI ("Sergey", "25");

4. Jednostavni UPDATE upiti za MySQL bazu podataka

AŽURIRAJ– upit koji vam omogućuje da REZERVIRATE vrijednosti polja ili DODATE nešto u već postojeći red u bazi podataka. Na primjer, postoji gotova linija, ali u njoj je potrebno prepisati parametar dobi jer se s vremenom promijenio.

1. U tablici korisnika dob postaje 18.

AŽURIRAJ korisnike SET age = "18" WHERE id = "3";
2. Sve je isto kao u prvom zahtjevu, samo pokazuje sintaksu zahtjeva, gdje su dva ili više polja prepisana.
U stolu korisnika WHERE id je jednak 3 vrijednosti polja dob navršava 18 godina i zemlja Rusija.

AŽURIRAJ korisnike SET age = "18", country = "Rusija" WHERE id = "3";

5. Jednostavni DELETE (brisanje zapisa) upiti prema MySQL bazi podataka

IZBRISATI– upit koji briše red iz tablice.

1. Uklanja red iz tablice korisnika GDJE iskaznica jednako 10.

DELETE FROM korisnika WHERE id = "10";

6. Jednostavni DROP (brisanje tablice) upiti u MySQL bazu podataka

PAD– upit koji briše tablicu.

1. Briše cijelu tablicu tbl_name.

DROP TABLE tbl_name;

7. Složeni upiti prema MySQL bazi podataka

Zanimljivi upiti koji mogu biti korisni i iskusnim korisnicima

SELECT id,ime,država FROM korisnici,administratori WHERE TO_DAYS(NOW()) - TO_DAYS(registration_date)<= 14 AND activation != "0" ORDER BY registration_date DESC;
Ovaj složeni upit ODABIRA stupce ID, ime, država U TABLICAMA korisnici, administratori GDJE Datum registracije(datum) nije stariji 14 dani I aktiviranje NEJEDNAK 0 , Poredaj po Datum registracije obrnutim redoslijedom (prvo novi).

AŽURIRAJ korisnike SET age = "18+" WHERE age = (SELECT age FROM korisnika WHERE male = "muškarac");
Gore je primjer tzv zahtjev unutar zahtjeva u SQL-u. Ažurirajte dob među korisnicima na 18+, gdje je spol muški. Ne preporučam takve opcije zahtjeva. Iz osobnog iskustva reći ću da je bolje stvoriti nekoliko zasebnih - oni će se brže obraditi.

8. MySQL i PHP upiti bazi podataka

U MySQL upite na PHP stranici možete umetnuti varijable kao usporedne vrijednosti itd. Par primjera

1. Odabire sve zapise iz tablice korisnika, gdje je polje fname odgovara vrijednosti varijable $ime.

SELECT * FROM korisnika WHERE fname="$name";
2. U tablici korisnika WHERE id je jednak 3 vrijednosti polja dob mijenja vrijednost varijable $age.

AŽURIRAJ korisnike SET age = "$age" WHERE id = "3";

Pažnja! Ako vas zanima još neki primjer, napišite pitanje u komentarima!

AŽURIRAJ tbl_name SET col_name1=expr1 [, col_name2=expr2, ...]

Naredba UPDATE ažurira stupce s njihovim novim vrijednostima u recima postojeće tablice. Izjava SET navodi koje stupce treba izmijeniti i koje vrijednosti treba postaviti u njima. WHERE klauzula, ako postoji, specificira koji se redovi ažuriraju. Inače se ažuriraju svi redovi. Ako je naveden izraz ORDER BY, retci će se ažurirati redoslijedom navedenim u njemu.

Ako je naznačeno ključna riječ LOW_PRIORITY, tada je izvršenje ove naredbe UPDATE odgođeno dok drugi klijenti ne završe s čitanjem ove tablice.

Ako je navedena ključna riječ IGNORE, naredba za ažuriranje neće prekinuti čak i ako ažuriranje naiđe na pogrešku dupliciranog ključa. Reci koji uzrokuju sukobe neće se ažurirati.

Ako se stupcu pristupi iz navedenog izraza argumentom tbl_name, tada naredba UPDATE koristi trenutnu vrijednost za taj stupac. Na primjer, sljedeća naredba postavlja stupac dobi na vrijednost za jedan veću od trenutne vrijednosti:

Mysql> AŽURIRAJ podatke o osobi SET age=age+1;

Naredba UPDATE dodjeljuje vrijednosti s lijeva na desno. Na primjer, sljedeća naredba duplicira stupac dobi, a zatim ga povećava:

Mysql> AŽURIRAJ osobne podatke SET age=age*2, age=age+1;

Ako je stupac postavljen na svoju trenutnu vrijednost, tada MySQL to primjećuje i ne ažurira ga.

Naredba UPDATE vraća broj stvarno promijenjenih redaka. U MySQL verziji 3.22 i novijim, C API funkcija mysql_info() vraća broj redaka koji su pronađeni i ažurirani i broj upozorenja koja su se pojavila kada je izvršeno UPDATE.

U MySQL verziji 3.23, možete koristiti LIMIT # kako biste osigurali da je izmijenjen samo određeni broj redaka.

Ovaj vodič za MySQL objašnjava kako koristiti MySQL UPDATE izjava sa sintaksom i primjerima.

Sintaksa

U svom najjednostavnijem obliku, sintaksa za naredbu UPDATE prilikom ažuriranja jedne tablice u MySQL-u je:

AŽURIRAJ tablicu SET stupac1 = izraz1, stupac2 = izraz2, ... ;

Međutim, potpuna sintaksa za naredbu MySQL UPDATE prilikom ažuriranja jedne tablice je:

UPDATE [ LOW_PRIORITY ] [ IGNORE ] tablica SET stupac1 = izraz1, stupac2 = izraz2, ... ] ;

Sintaksa za naredbu UPDATE prilikom ažuriranja jedne tablice podacima iz druge tablice u MySQL-u je:

UPDATE table1 SET column1 = (SELECT izraz1 FROM table2 WHERE uvjeti) ;

Sintaksa za naredbu MySQL UPDATE pri ažuriranju više tablica je:

UPDATE tablica1, tablica2, ... SET stupac1 = izraz1, stupac2 = izraz2, ... WHERE tablica1.stupac = tablica2.stupac AND uvjeti;

Parametri ili argumenti

LOW_PRIORITY Izborno. Ako je naveden LOW_PRIORITY, ažuriranje će biti odgođeno dok ne bude procesa koji čitaju iz stol. LOW_PRIORITY se može koristiti s tablicama MyISAM, MEMORY i MERGE koje koriste zaključavanje na razini tablice. ZANEMARI Opcionalno. Ako je omogućeno IGNORE, sve pogreške koje se pojave tijekom ažuriranja se zanemaruju. Ako bi ažuriranje retka rezultiralo kršenjem primarnog ključa ili jedinstvenog indeksa, ažuriranje tog retka se ne izvodi. stupac1, stupac2 Stupci koje želite ažurirati. izraz1, izraz2 Nove vrijednosti koje treba dodijeliti stupac1, stupac2. Tako stupac1 izraz1, stupac2 bi se dodijelila vrijednost izraz2, i tako dalje. WHERE uvjeti Neobavezno. Uvjeti koji moraju biti ispunjeni da bi se ažuriranje izvršilo. ORDER BY izraz Neobavezno. Može se koristiti u kombinaciji s LIMIT za prikladno sortiranje zapisa kada se ograničava broj zapisa koji se ažuriraju. LIMIT number_rows Opcionalno. Ako je navedeno LIMIT, ono kontrolira maksimalan broj zapisa za ažuriranje u tablici. Najviše, broj zapisa koje određuje broj_redova ažurirat će se u tablici.

Primjer - ažuriranje jednog stupca

Pogledajmo vrlo jednostavan primjer MySQL UPDATE upita.

AŽURIRAJ klijente SET last_name = "Anderson" WHERE customer_id = 5000;

Ovaj primjer MySQL UPDATE bi ažurirao prezime na "Anderson" u kupaca stol gdje je customer_id je 5000.

Primjer - ažuriranje više stupaca

Pogledajmo primjer MySQL UPDATE gdje biste mogli ažurirati više od jednog stupca s jednom naredbom UPDATE.

AŽURIRAJ klijente SET state = "California", customer_rep = 32 WHERE customer_id > 100;

Ako želite ažurirati više stupaca, to možete učiniti odvajanjem parova stupac/vrijednost zarezima.

država u "Kaliforniju" i kupac_predstavnik do 32 gdje je customer_id je veći od 100.

Primjer - ažuriranje tablice podacima iz druge tablice

Pogledajmo primjer UPDATE koji pokazuje kako ažurirati tablicu podacima iz druge tablice u MySQL-u.

AŽURIRAJ klijente
POSTAVITE grad = (ODABERITE grad
OD dobavljača
WHERE dobavljači.naziv_dobavljača = kupci.naziv_kupca)
WHERE customer_id > 2000;

Ovaj primjer UPDATE ažurirao bi samo kupaca tablica za sve zapise u kojima se customer_id veći je od 2000. Kada je ime dobavljača od dobavljači tablica odgovara Ime kupca od kupaca stol, Grad iz tablice dobavljača bi se kopirao u Grad polje u kupaca stol.

Primjer - ažuriranje više tablica

Pogledajmo primjer MySQL UPDATE gdje biste mogli izvršiti ažuriranje koje uključuje više od jedne tablice u jednoj izjavi UPDATE.

UPDATE kupci, dobavljači SET kupci.grad = dobavljači.grad WHERE kupci.customer_id = dobavljači.dobavljač_id;

Ovaj primjer izjave MySQL UPDATE ažurirao bi Grad polje u kupaca stol za Grad od dobavljači stol gdje je customer_id odgovara dobavljač_id.

AŽURIRAJ sintaksu

Sintaksa jedne tablice:
AŽURIRAJ shya_tabletsh
SET naziv_stupca1=izraz1 [, Ime_ stupac2=izraz2 ...]


Sintaksa više tablica:

AŽURIRAJ table_name [, table_name...] SET ime_stupca 1=izraz1 [,ime_stupca2=izraz2...]
Izjava UPDATE ažurira stupce postojećih redaka tablice novim vrijednostima. Klauzula SET navodi stupce koje treba modificirati i vrijednosti koje im se trebaju dodijeliti. Ako je navedena klauzula WHERE, ona specificira koji redovi trebaju biti ažurirani. Inače se ažuriraju svi redci u tablici. Ako je navedena klauzula ORDER BY, retci će se ažurirati navedenim redoslijedom. Konstrukcija LIMIT nameće ograničenje broja redaka koji se ažuriraju.
Izjava UPDATE podržava sljedeće modifikatore:

  1. Ako je navedena ključna riječ LOW_PRIORITY, UPDATE se odgađa dok svi drugi klijenti ne završe s čitanjem tablice.
  2. Ako je navedena ključna riječ IGNORE, operacija ažuriranja neće uspjeti čak i ako dođe do duplih pogrešaka ključa. Reci koji uzrokuju sukobe neće se ažurirati.

Ako koristite stupce iz tablice naziv_tablice u izrazima, UPDATE koristi trenutnu vrijednost stupaca. Na primjer, sljedeća izjava povećava stupac dobi za jedan:
mysql> AŽURIRAJ podatke o osobi SET age=age+l;
Zadaci u UPDATE se rade slijeva na desno. Na primjer, sljedeća izjava udvostručuje vrijednost stupca dobi i zatim je povećava za jedan: mysql> AŽURIRAJ osobne podatke SET age=age*2, age=age+l;
Ako postavite vrijednost stupca na ono što jest, MySQL to otkriva i ne ažurira.
Ako ažurirate stupac koji je deklariran NOT null na NULL, postavlja se na zadanu vrijednost prikladnu za određeni tip podataka i povećava brojač upozorenja za jedan. Zadana vrijednost je 0 za numeričke stupce, prazan niz ("") za stupce znakova i "null" za stupce datuma i vremena.
UPDATE vraća broj redaka koji su stvarno ažurirani. U MySQL 3.22 i novijim, mysql_info() C API funkcija API vraća broj redaka koji odgovaraju upitu i koji su ažurirani te broj upozorenja koja su se pojavila tijekom AŽURIRANJA.
Od MySQL 3.23, možete koristiti limit broj linija za ograničavanje opsega UPDATE.
Konstrukcija LIMIT radi na sljedeći način:

  1. Prije MySQL 4.0.13, LIMIT je bio ograničenje broja obrađenih redaka. Operater je izašao čim se ažurirao broj linija redaka koji su zadovoljili WHERE uvjet.
  2. Od MySQL 4.0.13 limit je ograničenje podudaranja niza. Operater izlazi čim pronađe broj linija redaka koji zadovoljavaju uvjet WHERE, bez obzira jesu li stvarno ažurirani.

Ako naredba UPDATE uključuje redoslijed prema klauzuli, tada se retci ažuriraju redoslijedom navedenim u ovoj klauzuli. ORDER BY se može koristiti počevši od MySQL 4.0.0.
Od MySQL 4.0.0 također je moguće izvesti operacije UPDATE koje rade na više tablica odjednom:
AŽURIRAJ stavke, mjesec SET items.price=month.price WHERE items.id-month. id/ Ovaj primjer demonstrira unutarnje spajanje pomoću operatora zareza, ali AŽURIRANJA za više tablica mogu koristiti bilo koju vrstu spajanja dopuštenu u SELECT izjava, na primjer, LEFT JOIN.
Napomena!

  • Ne možete koristiti ORDER BY ili LIMIT u izjavama UPDATE za više tablica.
Prije MySQL 4.0.18, bilo je potrebno imati privilegiju UPDATE za sve tablice koje se koriste u višetabličnom UPDATE, čak i ako nisu bile stvarno ažurirane. Počevši od MySQL 4.0.18, takve tablice čiji se stupci samo čitaju, ali ne i ažuriraju, trebaju imati samo privilegiju SELECT.
Ako koristite naredbu UPDATE za više tablica na InnoDB tablicama koje imaju definirana ograničenja stranog ključa, MySQL optimizator ih može obraditi drugačijim redoslijedom od onog navedenog u njihovim odnosima roditelj-dijete. U tom slučaju izjava neće uspjeti i transakcija će biti vraćena. Umjesto toga ažurirajte jednu tablicu i oslonite se na svojstvo ON UPDATE, koje osigurava InnoDB mehanizam za automatsko ažuriranje povezane tablice.