04/10/2018, 17:01

[BÀI 22] CÁC LỆNH UPDATE ,DELETE, INNER JOIN TRONG MYSQL

Trong bài số 21 , tôi đã liệt kê khá nhiều các thao tác để có thể insert và select dữ liệu. Ở bài này các bài tôi sẽ liệt kê các cách thức để có thể update và delete dữ liệu. Kết thúc bài số 22 này, các bạn đã nắm được kỹ năng cơ bản và thường sử dụng nhất trong mysql. Lệnh update: Lệnh ...

Trong bài số 21 , tôi đã liệt kê khá nhiều các thao tác để có thể insert và select dữ liệu. Ở bài này các bài tôi sẽ liệt kê các cách thức để có thể update và delete dữ liệu. Kết thúc bài số 22 này, các bạn đã nắm được kỹ năng cơ bản và thường sử dụng nhất trong mysql.

Lệnh update:

Lệnh update được sử dụng để cập nhật lại dữ liệu cho 1 bản ghi ,nhiều bản ghi hoặc tất cả bản ghi trong bảng.

Cú pháp:

UPDATE tên_bảng SET tên_trường_s = giá_trị_trường_s, tên_trường_b = giá_trị_trường_b,…, tên_trường_n = giá_trị_trường_n WHERE …

Ví dụ sửa tên của sinh viên có id = 3 từ tên “Trung Hồ Ngọc” thành “Hồ Ngọc Trung”

UPDATE sinhvien SET hoten = “Hồ Ngọc Trung” WHERE id = 3

Nếu bạn không đặt điều kiện cho câu lệnh update thì tất cả các bản ghi trong bảng sẽ bị thay đổi giá trị thành giá trị trong lệnh update.

Lệnh delete :

Lệnh delete sử dụng khi bạn muốn xóa 1 hoặc nhiều hoặc tất cả các bản ghi có trong bảng.

Cú pháp:

DELETE FROM tên_bảng  WHERE …

Ví dụ: xóa sinh viên có id là 123 trong bảng lop_PHP_07_devpro

DELETE FROM lop_PHP_07_devpro WHERE id = 123

Cũng giống như lệnh update, nếu bạn không ghi điều kiện cho lệnh xóa, thì sẽ bị xóa tất cả các bản ghi có trong bảng. Do vậy mà khi sử dụng lệnh delete hay lệnh update chúng ta phải chú ý để không bị xóa dữ liệu một cách không mong muốn bằng cách thêm lệnh WHERE vào câu lệnh của mình.

Lệnh kết nối các bảng trong mysql (INNER JOIN):

Có nhiều lệnh kết nối bảng khác nhau, nhưng lệnh inner join thường được sử dụng nhất.

Rất nhiều bảng chứa rất nhiều trường mà việc quản lý các trường này vô cùng phức tạp. Chính vì vậy để dễ quản lý, lập trình viên thường chia các nhóm theo chức năng thành 1 bảng, chẳng hạn tôi có bảng sản phẩm, lưu các thông tin về : id,loại sản phẩm, tên sản phẩm ,giá. Và bảng loại sản phẩm có: id, tên loại sản phẩm.

Ví dụ ở trên tôi có 2 bảng, như bình thường 2 bảng này các bạn sẽ gộp lại thành 1 bảng. Song để cho việc truy vấn sau này thuận lợi, dễ dàng thì không nên gộp lại thành 1 bảng được. Chẳng hạn như tôi muốn lấy ra danh sách các loại sản phẩm mà cửa hàng tôi kinh doanh, nếu tôi chỉ có 1 bảng (bảng sản phẩm, mà không có bảng loại sản phẩm) thì trường loại sản phẩm (trong bảng sản phẩm) sẽ bị lặp đi lặp lại nhiều lần, việc select, update của tôi sẽ lâu hơn. Và việc lấy ra danh sách các loại sản phẩm (trong trường hợp tôi có 1000 sản phẩm) thì phải duyệt bảng sản phẩm 1000 lần, rồi so sánh tính toán xem có những loại sản phẩm nào, sau đó cho hiển thị ra và phải làm dữ liệu không trùng lặp. Nhưng nếu sử dụng 2 bảng thì tôi chỉ việc select trường “tên loại sản phẩm ” trong bảng loại sản phẩm là được.

Cú pháp nối 2 bảng:

SELECT … FROM bảng1 inner join bảng2 ON bảng1.tên_cột_để_nối = bảng2.tên_cột_để_nối

Trong đó:

  • Tôi nối: bảng1 và bảng2 lại thành 1 bảng.
  • Tôi nối 2 bảng này thông qua các trường trùng dữ liệu. Vd ở bảng sản phẩm, tôi chỉ lưu id của loại sản phẩm, tôi muốn nối bảng sản phẩm và bảng loại sản phẩm với nhau để xem id đấy là loại sản phẩm nào. Lúc này tôi viết như sau:
  • SELECT * FROM sanpham INNER JOIN loaisanpham ON sanpham.loaisanpham = loaisanpham.tenloaisanpham
  • sanpham.loaisanpham : là tôi lấy trường loaisanpham trong bảng sanpham để so sánh
  • loaisanpham.tenloaisanpham: là tôi lấy trường tenloaisanpham trong bảng loaisanpham
  • Tên bảng và tên trường được nối bằng dấu chấm, thể hiện tên_bảng.tên_trường

Lỗi có thể xảy ra khi INNER JOIN:

Khi nối các bảng lại với nhau sẽ xảy ra trường hợp cả 2 bảng có 1 trường bị trùng tên, ví dụ cả 2 bảng đều có 1 trường tên là ‘id’, Chẳng hạn bạn muốn tùy từng trường hợp mà lấy id của bảng 1 hay bảng 2 , nhưng khi truy xuất bạn lại gặp lỗi. Để truy xuất chính xác đến trường id của từng bảng, ta phải chỉ rõ trường đấy thuộc bảng nào, vd bảng1.id là truy xuất đến trường id của bảng 1 , và bảng2.id là truy xuất đến trường id của bảng 2.

Đọc những dòng lý thuyết này rất có thể bạn thấy khó hiểu, song khi xem xong video dưới đây, bạn sẽ thấy nó thật dễ dàng.

Video hướng dẫn thực hành lệnh UPDATE, DELETE và INNER JOIN trong mysql:

0