Mysql განახლების სინტაქსი. განაახლეთ MySQL მოთხოვნები. ერთი მნიშვნელობის შეცვლა

განაახლეთ tbl_name SET col_name1=expr1 [, col_name2=expr2, ...]

UPDATE განცხადება განაახლებს სვეტებს მათი ახალი მნიშვნელობებით არსებული ცხრილის რიგებში. SET განცხადებაში მითითებულია, რომელი სვეტები უნდა შეიცვალოს და რა მნიშვნელობები უნდა იყოს მითითებული მათში. WHERE პუნქტი, თუ არსებობს, განსაზღვრავს რომელი რიგები განახლდება. წინააღმდეგ შემთხვევაში, ყველა სტრიქონი განახლდება. თუ მითითებულია ORDER BY გამოთქმა, რიგები განახლდება მასში მითითებული თანმიმდევრობით.

თუ მითითებულია LOW_PRIORITY საკვანძო სიტყვა, ამ UPDATE ბრძანების შესრულება გადაიდო მანამ, სანამ სხვა კლიენტები არ დაასრულებენ ცხრილის კითხვას.

თუ მითითებულია IGNORE საკვანძო სიტყვა, განახლების ბრძანება არ შეწყვეტს იმ შემთხვევაშიც კი, თუ განახლება შეექმნა დუბლიკატი გასაღების შეცდომას. რიგები, რომლებიც იწვევს კონფლიქტებს, არ განახლდება.

თუ სვეტზე წვდომა მითითებული გამონათქვამიდან tbl_name არგუმენტით, მაშინ UPDATE ბრძანება იყენებს ამ სვეტის მიმდინარე მნიშვნელობას. მაგალითად, შემდეგი ბრძანება აყენებს ასაკის სვეტს მის ამჟამინდელ მნიშვნელობაზე ერთით მეტი მნიშვნელობაზე:

Mysql> პერსონალური მონაცემების განახლება SET ასაკი=ასაკი+1;

UPDATE ბრძანება ანიჭებს მნიშვნელობებს მარცხნიდან მარჯვნივ. მაგალითად, შემდეგი ბრძანება აორმაგებს ასაკის სვეტს, შემდეგ კი ზრდის მას:

Mysql> პერსონალური მონაცემების განახლება SET ასაკი=ასაკი*2, ასაკი=ასაკი+1;

თუ სვეტი დაყენებულია მის ამჟამინდელ მნიშვნელობაზე, მაშინ MySQL შენიშნავს ამას და არ განაახლებს მას.

UPDATE ბრძანება აბრუნებს რეალურად შეცვლილი მწკრივების რაოდენობას. IN MySQL ვერსიები 3.22 და შემდეგ, C API mysql_info() ფუნქცია აბრუნებს ნაპოვნი და განახლებული მწკრივების რაოდენობას და გაფრთხილებების რაოდენობას, რომლებიც მოხდა UPDATE-ის შესრულებისას.

MySQL 3.23 ვერსიაში შეგიძლიათ გამოიყენოთ LIMIT #, რათა დარწმუნდეთ, რომ მხოლოდ მითითებული რაოდენობის რიგები შეიცვალა.

განაახლეთ სინტაქსი

ერთი ცხრილის სინტაქსი:
განახლება shya_tabletsh
SET column_name1=გამოხატვა1 [,სახელი_ სვეტი2=გამოხატვა2 ...]


მრავალ ცხრილის სინტაქსი:

ცხრილის_სახელის განახლება [, ცხრილის_სახელი...] SET სვეტის_სახელი 1=გამოხატვა1 [,სვეტის_სახელი2=გამოხატვა2...]
UPDATE განცხადება განაახლებს ცხრილის არსებული სტრიქონების სვეტებს ახალი მნიშვნელობებით. SET პუნქტში ჩამოთვლილია შესაცვლელი სვეტები და მათთვის მინიჭებული მნიშვნელობები. თუ მითითებულია WHERE პუნქტი, ის განსაზღვრავს რომელი რიგები უნდა განახლდეს. წინააღმდეგ შემთხვევაში, ცხრილის ყველა სტრიქონი განახლდება. თუ მითითებულია ORDER BY პუნქტი, რიგები განახლდება მითითებული თანმიმდევრობით. LIMIT კონსტრუქცია აწესებს ლიმიტს განახლებული მწკრივების რაოდენობაზე.
UPDATE განცხადება მხარს უჭერს შემდეგ მოდიფიკატორებს:

  1. თუ მითითებულია LOW_PRIORITY საკვანძო სიტყვა, განახლება გადაიდო მანამ, სანამ ყველა სხვა კლიენტი არ დაასრულებს ცხრილის კითხვას.
  2. თუ მითითებულია IGNORE საკვანძო სიტყვა, განახლების ოპერაცია არ ჩავარდება იმ შემთხვევაშიც კი, თუ დუბლიკატი გასაღების შეცდომები მოხდება. რიგები, რომლებიც იწვევს კონფლიქტებს, არ განახლდება.

თუ იყენებთ ცხრილის სვეტებს ცხრილის_სახელიგამონათქვამებში, UPDATE იყენებს სვეტების მიმდინარე მნიშვნელობას. მაგალითად, შემდეგი განცხადება ზრდის ასაკის სვეტს ერთით:
mysql> განაახლეთ პიროვნების მონაცემები SET ასაკი=ასაკი+l;
UPDATE-ში დავალებები კეთდება მარცხნიდან მარჯვნივ. მაგალითად, შემდეგი განცხადება გააორმაგებს ასაკის სვეტის მნიშვნელობას და შემდეგ ზრდის მას ერთით: mysql> განაახლეთ პერსონალური მონაცემები SET ასაკი=ასაკი*2, ასაკი=ასაკი+ლ;
თუ სვეტის მნიშვნელობას დააყენებთ იმას, რაც არის, MySQL აღმოაჩენს ამას და არ განახლდება.
თუ თქვენ განაახლებთ სვეტს, რომელიც გამოცხადდა NOT null-ად NULL-ზე, ის დაყენებულია ნაგულისხმევ მნიშვნელობაზე, რომელიც შეესაბამება კონკრეტული მონაცემთა ტიპის და ზრდის გაფრთხილების მრიცხველს ერთით. ნაგულისხმევი მნიშვნელობა არის 0 რიცხვითი სვეტებისთვის, ცარიელი სტრიქონი ("") სიმბოლოების სვეტებისთვის და "null" თარიღისა და დროის სვეტებისთვის.
UPDATE აბრუნებს რეალურად განახლებული მწკრივების რაოდენობას. MySQL 3.22-ში და შემდეგში, mysql_info() C API ფუნქცია APIაბრუნებს რიგების რაოდენობას, რომლებიც ემთხვეოდა მოთხოვნას და განახლდა, ​​და გაფრთხილებების რაოდენობას, რომლებიც მოხდა განახლების დროს.
როგორც MySQL 3.23, შეგიძლიათ გამოიყენოთ ლიმიტი რიგების_რაოდენობაგანახლების ფარგლების შეზღუდვის მიზნით.
LIMIT კონსტრუქცია მუშაობს შემდეგნაირად:

  1. MySQL 4.0.13-მდე, LIMIT იყო დამუშავებული მწკრივების რაოდენობის ლიმიტი. ოპერატორი გავიდა განახლებისთანავე რიგების_რაოდენობარიგები, რომლებიც აკმაყოფილებდა WHERE პირობას.
  2. ვინაიდან MySQL 4.0.13, ლიმიტი არის სტრიქონების შესატყვისი ლიმიტი. ოპერატორი გადის როგორც კი აღმოაჩენს რიგების_რაოდენობარიგები, რომლებიც აკმაყოფილებენ WHERE პირობას, იმისდა მიუხედავად, რეალურად განახლდა თუ არა.

თუ UPDATE განცხადება შეიცავს შეკვეთას პუნქტის მიხედვით, მაშინ რიგები განახლდება ამ პუნქტით განსაზღვრული თანმიმდევრობით. ORDER BY შეიძლება გამოყენებულ იქნას MySQL 4.0.0-დან.
MySQL 4.0.0-დან მოყოლებული, ასევე შესაძლებელია განახლების ოპერაციების შესრულება, რომლებიც ერთდროულად მუშაობს რამდენიმე მაგიდაზე:
განაახლეთ ელემენტი, თვე SET items.price=month.price WHERE items.id-month. id/ ეს მაგალითი გვიჩვენებს შიდა შეერთებას მძიმით ოპერატორის გამოყენებით, მაგრამ მრავალ ცხრილის განახლებებს შეუძლიათ გამოიყენონ ნებისმიერი შეერთების ტიპი, რომელიც დაშვებულია SELECT განცხადება, მაგალითად, LEFT JOIN.
შენიშვნა!

  • თქვენ არ შეგიძლიათ გამოიყენოთ ORDER BY ან LIMIT მრავალ ცხრილის განახლების განცხადებებში.
MySQL 4.0.18-მდე საჭირო იყო განახლების პრივილეგია ყველა ცხრილზე, რომელიც გამოყენებულია მრავალ მაგიდასთან UPDATE-ში, მაშინაც კი, თუ ისინი რეალურად არ იყო განახლებული. დაწყებული MySQL 4.0.18-ით, ასეთ ცხრილებს, რომელთა სვეტები მხოლოდ იკითხება, მაგრამ არ განახლდება, მხოლოდ უნდა ჰქონდეს SELECT პრივილეგია.
თუ იყენებთ მრავალ ცხრილის განახლების განცხადებას InnoDB ცხრილებზე, რომლებსაც აქვთ უცხო საკვანძო შეზღუდვები განსაზღვრული, MySQL ოპტიმიზატორმა შეიძლება დაამუშაოს ისინი სხვა თანმიმდევრობით, ვიდრე მითითებულია მათი მშობლისა და შვილის ურთიერთობებში. ამ შემთხვევაში განცხადება ჩაიშლება და ტრანზაქცია უკან დაბრუნდება. ამის ნაცვლად, განაახლეთ ერთი ცხრილი და დაეყრდნოთ ON UPDATE თვისებას, რომელიც უზრუნველყოფს InnoDB ძრავას ავტომატური განახლებადაკავშირებული ცხრილები.

განახლების ბრძანება- ცვლის უკვე არსებული ჩანაწერიან რამდენიმე ჩანაწერში ცხრილში SQL. ცვლის არსებულ მნიშვნელობებს ცხრილში ან ხედის მთავარ ცხრილში.

განაახლეთ ბრძანების ბრძანების სინტაქსი

განაახლეთ ბრძანების სინტაქსი

განახლების ბრძანება. ძირითადი საკვანძო სიტყვებიდა UPDATE ბრძანების პარამეტრები

  • სქემა -ნებართვის იდენტიფიკატორი, როგორც წესი, იგივე მომხმარებლის სახელი
  • მაგიდის ხედი -მაგიდის სახელი SQL, რომელშიც შეცვლილია მონაცემები; თუ ხედია განსაზღვრული, მონაცემები იცვლება მთავარ ცხრილში SQLწარდგინებები
  • subquery_1 - subquery, რომელსაც სერვერი ექცევა ისევე, როგორც ხედს
  • თანსვეტი - ცხრილის სვეტი SQLან წარდგინებები SQL, რომლის ღირებულებაც იცვლება; თუ ცხრილის სვეტი არის წინადადებიდან SETგამოტოვებულია, სვეტის მნიშვნელობა უცვლელი რჩება
  • ექსპრ - ; ეს გამოთქმა შეიძლება შეიცავდეს ძირითად ცვლადებს და არჩევით ინდიკატორ ცვლადებს
  • ქვემოკითხვა_2 - შესაბამისი სვეტისთვის მინიჭებული ახალი მნიშვნელობა
  • ქვემოკითხვა_3 - შესაბამისი სვეტისთვის მინიჭებული ახალი მნიშვნელობა

სად- განსაზღვრავს სტრიქონების დიაპაზონს, რომლებიც უნდა შეიცვალოს მათ მიერ, რისთვისაც არის გარკვეული პირობა მართალი; თუ ეს ფრაზა გამოტოვებულია, ცხრილის ან ხედის ყველა მწკრივი შეიცვლება.
როდესაც დამტკიცება გაიცემა, ნებისმიერი განახლების გამომწვევი, განსაზღვრულია მაგიდაზე.
ქვეშეკითხვები. თუ შეთავაზება SETშეიცავს ქვემოკითხვა, ის აბრუნებს ზუსტად ერთ მწკრივს თითოეული შეცვლილი მწკრივისთვის. ქვემოთხოვნის შედეგში თითოეული მნიშვნელობა ენიჭება სიის შესაბამის სვეტებს ფრჩხილებში. თუ ქვემოთხოვნა არ აბრუნებს არცერთ მწკრივს, სვეტი ენიჭება NULL. ქვეშეკითხვებიშეუძლია მონაცემების შერჩევა შეცვლილი ცხრილიდან. შეთავაზება SETშეუძლია გამონათქვამების გაერთიანება და ქვემოკითხვები.

განახლების ბრძანების მაგალითი 1
რეიტინგის შეცვლა ყველა მყიდველისთვის 200-ის ტოლი მნიშვნელობით:

კლიენტები SETრეიტინგი = 200;

განახლების ბრძანების მაგალითი 2
სვეტის მნიშვნელობის ჩანაცვლება ცხრილის ყველა მწკრივში ჩვეულებრივ იშვიათად გამოიყენება. ამიტომ გუნდში, როგორც გუნდში წაშლა, შეგიძლიათ გამოიყენოთ პრედიკატი. რეიტინგის სვეტის მნიშვნელობების მითითებული ჩანაცვლების შესასრულებლად, ყველა მომხმარებლისთვის, რომლებსაც ემსახურება გამყიდველი ჯოვანი (snum = 1003), უნდა შეიყვანოთ:

კლიენტები SETრეიტინგი = 200 WHERE snum = 1001;

SQL UPDATE ბრძანების მაგალითი 3
წინადადებაში SETთქვენ შეგიძლიათ მიუთითოთ ნებისმიერი რაოდენობის მნიშვნელობა სვეტებისთვის, გამოყოფილი მძიმით:

Emp SETსამუშაო = 'მენეჯერი', sal = sal + 1000, deptno = 20 WHERE ename = 'JONES';

განახლების ბრძანების მაგალითი 4
წინადადებაში SETთქვენ შეგიძლიათ მიუთითოთ NULL მნიშვნელობა რაიმე სპეციალური სინტაქსის გამოყენების გარეშე (როგორიცაა IS NULL). ამრიგად, თუ გსურთ დააყენოთ კლიენტების ყველა რეიტინგი ლონდონიდან (ქალაქი = 'ლონდონი') NULL-მდე, თქვენ შეიყვანთ:

კლიენტები SETრეიტინგი = NULL WHERE ქალაქი = 'ლონდონი';

განახლების ბრძანების მაგალითი 5
განმარტავს შემდეგი ბრძანების სინტაქსის გამოყენებას:

  • ორივე წინადადების ფორმა SETერთად ერთ განცხადებაში.
  • ქვემოკითხვა.
  • WHERE პუნქტი, რომელიც ზღუდავს რიგების დიაპაზონს, რომელიც შეიძლება შეიცვალოს.

Emp ა SETდეპტო =
(აირჩიეთ deptno FROM dept WHERE loc = 'BOSTON'), (sal, comm) = ( აირჩიეთ 1.1*AVG(sal), 1.5*AVG(comm) FROM emp b WHERE a.deptno = b.deptno) WHERE deptno IN ( აირჩიეთ deptno FROM dept WHERE loc = 'DALLAS' OR loc = 'DETROIT');

ზემოთ მოყვანილი განცხადება აკეთებს შემდეგს:

  • ცვლის მხოლოდ იმ თანამშრომლებს, რომლებიც მუშაობენ დალასში ან დეტროიტში
  • ადგენს deptno სვეტის მნიშვნელობას ბოსტონიდან თანამშრომლებისთვის
  • ადგენს თითოეული თანამშრომლის ხელფასს მთელი დეპარტამენტის საშუალო ხელფასის 1,1-ჯერ
  • ადგენს თითოეული თანამშრომლის საკომისიოს 1,5-ჯერ მეტი საშუალო საკომისიო მთელი დეპარტამენტისთვის

თუ ჩვენ გვჭირდება მონაცემების შეცვლა ან განახლება MySQL-ში, ჩვენ შეგვიძლია გამოვიყენოთ SQL UPDATE ბრძანება სამუშაოდ. ,

გრამატიკა

ქვემოთ მოცემულია ბრძანება UPDATE, რომელიც უნდა შეიცვალოს MySQL მონაცემებიფურცლის მონაცემების ზოგადი SQL სინტაქსი:

განაახლეთ ცხრილის_სახელი SET ველი1=new-value1, field2=new-value2

  • თქვენ შეგიძლიათ განაახლოთ ერთი ან მეტი ველი ერთდროულად.
  • თქვენ შეგიძლიათ მიუთითოთ ნებისმიერი პირობა WHERE პუნქტში.
  • თქვენ ასევე შეგიძლიათ განაახლოთ მონაცემები ცალკე ცხრილში.

როდესაც გჭირდებათ ცხრილის სტრიქონებში მითითებული მონაცემების განახლება, INEKE ძალიან სასარგებლოა.

ბრძანების ხაზი მონაცემების განახლებისთვის

ქვემოთ ჩვენ განვაახლებთ მონაცემთა ცხრილში მითითებულ w3big_tbl-ს SQL UPDATE ბრძანების გამოყენებით:

მაგალითები

შემდეგი მაგალითი განაახლებს მონაცემთა ცხრილს, როგორც w3big_title w3big_id ველის მნიშვნელობა 3:

# mysql -u root -p პაროლი; შეიყვანეთ პაროლი:******* mysql> გამოიყენეთ w3big; მონაცემთა ბაზა შეიცვალა mysql> UPDATE w3big_tbl -> SET w3big_title=" Learning JAVA" -> WHERE w3big_id=3; Query OK, 1 row affected (0.04 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> !}

გამოიყენეთ PHP სკრიპტი მონაცემების განახლებისთვის

PHP ფუნქცია გამოიყენოს mysql_query() SQL განცხადებების შესასრულებლად, შეგიძლიათ გამოიყენოთ SQL UPDATE განცხადება ან INEKE არ გამოიყენება.

ეს ფუნქცია MySQL>-ში ბრძანების ხაზი SQL განცხადებების შესრულების ეფექტი იგივეა.

მაგალითები

შემდეგი მაგალითი განაახლებს w3big_id მონაცემებს w3big_title 3 ველში.