THAY THẾ trong MySQL

Cơ sở dữ liệu của chúng tôi có một bảng tên là motorbike_sale với dữ liệu trong các cột id, namepart_number

idnamepart_number1Harley Davidson x1245-AC2-252Honda CB750-x012-GK8-A83Suzuki Hayabusa X798-25-28

Chúng tôi muốn thay đổi số bộ phận của xe máy bằng cách thay thế tất cả các ký tự gạch nối bằng dấu gạch chéo về phía trước

Giải pháp 1

SELECT name,
  REPLACE[ part_number, '-', '/' ] as new_part_number
FROM motorbike_sale;

Truy vấn này trả về danh sách tên xe máy và số bộ phận mới. Lưu ý các dấu gạch chéo về phía trước đã thay thế các dấu gạch nối trong số bộ phận

namenew_ part_numberHarley Davidson x1245/AC2/25Honda CB750-x012/GK8/A8Suzuki Hayabusa X798/25/28

Thảo luận

Sử dụng hàm REPLACE[] của MySQL để thay thế một chuỗi con [i. e. từ, ký tự, v.v. ] với một chuỗi con khác và trả về chuỗi đã thay đổi. Hàm này có ba đối số

  • Chuỗi để thay đổi. [Trong ví dụ của chúng tôi, đó là cột part_number. ]
  • Chuỗi con để thay thế [i. e. nhân vật '-']
  • Chuỗi con để chèn [i. e. nhân vật '/']

Lưu ý rằng hàm này thay thế tất cả các lần xuất hiện của chuỗi con trong chuỗi hoặc cột đã cho. Trong ví dụ của chúng tôi, mỗi part_number chứa ba ký tự gạch nối, mỗi ký tự được thay thế bằng dấu gạch chéo

Trong ví dụ tiếp theo, chúng tôi sẽ thay thế tất cả các phiên bản của 'x' trong tên xe máy bằng '10'

Giải pháp 2

SELECT id,
  REPLACE[ name, 'x', '10' ] as new_name,
  part_number
FROM motorbike_sale
WHERE id>1;

Truy vấn này sử dụng mệnh đề WHERE để lọc các bản ghi cho các hàng có giá trị id từ 2 trở lên

Để ý tên xe máy Honda đổi từ 'x' thành '10' nhưng tên xe máy Suzuki không đổi. Tại sao không? . Do đó, 'x' không giống với 'X'. Trong ví dụ này, 'x' đã được thay thế bằng '10', nhưng 'X' không thay đổi

Ngoài câu trả lời của gmaggio nếu bạn cần động REPLACEUPDATE theo cột khác bạn có thể làm chẳng hạn

UPDATE your_table t1
INNER JOIN other_table t2
ON t1.field_id = t2.field_id
SET t1.your_field = IF[LOCATE['articles/updates/', t1.your_field] > 0, 
REPLACE[t1.your_field, 'articles/updates/', t2.new_folder], t1.your_field] 
WHERE...

Trong ví dụ của tôi, chuỗi

SELECT id,
  REPLACE[ name, 'x', '10' ] as new_name,
  part_number
FROM motorbike_sale
WHERE id>1;
0 được lưu trữ trong
SELECT id,
  REPLACE[ name, 'x', '10' ] as new_name,
  part_number
FROM motorbike_sale
WHERE id>1;
1 và không cần sử dụng
SELECT id,
  REPLACE[ name, 'x', '10' ] as new_name,
  part_number
FROM motorbike_sale
WHERE id>1;
2 trong mệnh đề
SELECT id,
  REPLACE[ name, 'x', '10' ] as new_name,
  part_number
FROM motorbike_sale
WHERE id>1;
3

Câu lệnh REPLACE trong MySQL là một phần mở rộng của Tiêu chuẩn SQL. Câu lệnh này hoạt động giống như câu lệnh INSERT, ngoại trừ nếu một hàng cũ khớp với bản ghi mới trong bảng cho một KHÓA CHÍNH hoặc một chỉ mục ĐỘC ĐÁO, thì lệnh này đã xóa hàng cũ trước khi hàng mới được thêm vào

Câu lệnh này là bắt buộc khi chúng ta muốn cập nhật các bản ghi hiện có vào bảng để cập nhật chúng. Nếu chúng ta sử dụng truy vấn chèn tiêu chuẩn cho mục đích này, nó sẽ đưa ra mục nhập trùng lặp cho PRIMARY KEY hoặc lỗi phím UNIQUE. Trong trường hợp này, chúng ta sẽ sử dụng câu lệnh REPLACE để thực hiện nhiệm vụ của mình. Lệnh REPLACE yêu cầu một trong hai hành động có thể xảy ra

  • Nếu không tìm thấy giá trị khớp với hàng dữ liệu hiện có, thì câu lệnh INSERT tiêu chuẩn được thực hiện
  • Nếu tìm thấy bản ghi trùng lặp, lệnh thay thế sẽ xóa hàng hiện có và sau đó thêm bản ghi mới vào bảng

Trong câu lệnh REPLACE, việc cập nhật được thực hiện theo hai bước. Đầu tiên, nó sẽ xóa bản ghi hiện có, sau đó bản ghi mới được cập nhật sẽ được thêm vào, tương tự như lệnh INSERT tiêu chuẩn. Vì vậy, chúng ta có thể nói rằng câu lệnh REPLACE thực hiện hai chức năng tiêu chuẩn, DELETE và INSERT

cú pháp

Sau đây là cú pháp của câu lệnh REPLACE trong MySQL

MySQL THAY THẾ Ví dụ

Hãy để chúng tôi hiểu hoạt động của câu lệnh REPLACE trong MySQL với sự trợ giúp của một ví dụ. Đầu tiên, chúng ta sẽ tạo một bảng có tên "Person" bằng cách sử dụng câu lệnh sau

Tiếp theo, chúng ta cần điền bản ghi vào bảng bằng cách sử dụng câu lệnh INSERT như bên dưới

Thực hiện câu lệnh SELECT để xác minh các bản ghi có thể được hiển thị trong đầu ra bên dưới

Sau khi xác minh dữ liệu vào một bảng, chúng ta có thể thay thế bất kỳ hàng cũ nào bằng hàng mới bằng cách sử dụng câu lệnh REPLACE. Thực hiện câu lệnh dưới đây để cập nhật thành phố của một người có id là 4

Sau khi thực hiện thành công câu lệnh trên, cần truy vấn lại dữ liệu của bảng Person để xác minh việc thay thế

Giá trị trong cột tên và email hiện là NULL. Đó là bởi vì câu lệnh REPLACE hoạt động như sau

  • Câu lệnh này trước tiên cố gắng chèn một hàng mới vào bảng Person. Nhưng việc chèn một hàng mới không thành công vì id = 4 đã tồn tại trong bảng
  • Vì vậy, câu lệnh này trước tiên xóa hàng có id = 4 và sau đó chèn một hàng mới có cùng id và thành phố như Amsterdam. Vì chúng tôi chưa chỉ định giá trị cho cột tên và email nên giá trị này được đặt thành NULL

Câu lệnh REPLACE của MySQL để cập nhật một hàng

Chúng ta có thể sử dụng câu lệnh REPLACE sau để cập nhật dữ liệu hàng vào bảng

Cú pháp trên tương tự như câu lệnh UPDATE ngoại trừ từ khóa REPLACE. Cần lưu ý rằng chúng ta không thể sử dụng mệnh đề WHERE với câu lệnh này

Thực hiện ví dụ dưới đây sử dụng câu lệnh REPLACE để cập nhật thành phố của người tên Mike từ California đến Birmingham

Sau khi xác minh bảng, chúng tôi sẽ nhận được đầu ra sau. Trong kết quả này, chúng ta có thể thấy rằng bản sao của một hàng trong cùng một bảng đã được thêm thành công

Thay thế vào MySQL là gì?

REPLACE hoạt động chính xác như INSERT , ngoại trừ nếu một hàng cũ trong bảng có cùng giá trị với một hàng mới cho một PRIMARY KEY hoặc một chỉ mục UNIQUE, thì hàng cũ là . Xem Phần 13. 2. 7, “CHÈN Tuyên bố”. REPLACE là một phần mở rộng của MySQL theo tiêu chuẩn SQL. . See Section 13.2. 7, “INSERT Statement”. REPLACE is a MySQL extension to the SQL standard.

Thay thế có nhanh hơn cập nhật không?

Thay vào đó, tôi đang cố gắng trả lời câu hỏi ban đầu. CẬP NHẬT là cách nhanh nhất. REPLACE hầu như không bao giờ là cách thích hợp .

Tôi có thể sử dụng cái gì thay vì thay thế trong SQL?

REPLACE[] thay thế một chuỗi bằng một chuỗi khác. Do đó, nếu một chuỗi chứa nhiều ký tự, mỗi ký tự phải theo cùng một thứ tự. TRANSLATE[] mặt khác, thay thế từng ký tự một, bất kể thứ tự của các ký tự đó.

Chủ Đề