Truy vấn CHÈN, CẬP NHẬT, XÓA SQLite với ví dụ

Mục lục:

Anonim

Các mệnh đề sửa đổi dữ liệu trong SQLite là các câu lệnh INSERT, UPDATE và DELETE. Nó được sử dụng để chèn các hàng mới, cập nhật các giá trị hiện có hoặc xóa các hàng khỏi cơ sở dữ liệu.

Trong hướng dẫn này, bạn sẽ học-

  • CHÈN
  • Cập nhật
  • Xóa bỏ
  • Điều khoản xung đột

Lưu ý rằng, đối với tất cả các ví dụ sau, bạn phải chạy sqlite3.exe và mở một kết nối đến cơ sở dữ liệu mẫu như đang chảy:

Bước 1) Trong bước này,

  1. Mở Máy tính của tôi và điều hướng đến thư mục sau " C: \ sqlite " và
  2. Sau đó, mở " sqlite3.exe ":

Bước 2) Mở cơ sở dữ liệu " TutorialsSampleDB.db " bằng lệnh sau:

.open TutorialsSampleDB.db

Bây giờ bạn đã sẵn sàng để chạy bất kỳ loại truy vấn nào trên cơ sở dữ liệu.

CHÈN SQLite

SQLite INSERT được sử dụng để chèn các bản ghi vào một bảng cụ thể của cơ sở dữ liệu. bạn phải sử dụng mệnh đề 'INSERT'. Cú pháp mệnh đề INSERT như sau:

  • Sau mệnh đề INSERT, bạn nên nêu rõ bạn cần chèn các giá trị vào bảng nào.
  • Sau tên bảng, bạn viết danh sách các cột, bạn muốn chèn các giá trị vào.
  • Bạn có thể bỏ qua tên các cột và không viết vào chúng.
  • Nếu bạn không viết tên cột, các giá trị sẽ được chèn vào tất cả các cột được tìm thấy trong bảng với cùng một thứ tự, các cột được xác định trong bảng.
  • Sau mệnh đề VALUES, bạn nên liệt kê các giá trị sẽ được chèn vào.
  • Mỗi mệnh đề INSERT chỉ chèn một hàng. Nếu bạn muốn chèn nhiều hàng, bạn nên viết nhiều mệnh đề CHÈN, mỗi mệnh đề một cho mỗi hàng.

Ví dụ về Chèn SQLite

Trong ví dụ sau, chúng tôi sẽ chèn 2 hàng vào bảng học sinh, mỗi hàng cho mỗi học sinh:

CHÈN VÀO Sinh viên (StudentId, StudentName, DepartmentId, DateOfBirth)VALUES (11, 'Ahmad', 4, '1997-10-12');CHÈN VÀO GIÁ TRỊ HỌC SINH (12, 'Aly', 4, '1996-10-12');

Điều này sẽ chạy thành công và không có đầu ra cho điều này:

Điều này sẽ chèn hai sinh viên:

  • Sinh viên đầu tiên có StudentId = 11, StudentName = Ahmad, DepartmentId = 4 và DateOfBirth = 1997-10-12.
  • Sinh viên thứ hai có StudentId = 12, StudentName = Aly, DepartmentId = 4 và DateOfBirth = 1996-10-12 '.

Trong câu lệnh đầu tiên, chúng tôi liệt kê các tên cột " StudentId, StudentName, DepartmentId, DateOfBirth ". Tuy nhiên, trong câu lệnh thứ hai, chúng tôi đã không làm như vậy.

Bốn giá trị " 12, 'Aly', 4, '1996-10-12' " sẽ được chèn vào tất cả bốn cột của bảng Học sinh theo cùng thứ tự các cột được xác định.

Bây giờ, hãy xác minh rằng hai học sinh đã được chèn vào bảng Học sinh bằng cách chạy truy vấn sau:

CHỌN * TỪ Sinh viên;

Sau đó, bạn sẽ thấy hai sinh viên được trả về từ truy vấn đó như sau:

Cập nhật SQLite

SQLite UPDATE Truy vấn được sử dụng để sửa đổi các bản ghi hiện có trong bảng. Bạn có thể sử dụng mệnh đề WHERE với truy vấn CẬP NHẬT để cập nhật các hàng đã chọn. Mệnh đề UPDATE cập nhật bảng bằng cách thay đổi giá trị cho một cột cụ thể. Sau đây là cú pháp của mệnh đề UPDATE:

Như sau:

  • Sau "điều khoản cập nhật", bạn nên viết tên bảng để cập nhật.
  • Bạn phải viết "mệnh đề SET" được sử dụng để viết tên cột cần cập nhật và giá trị được cập nhật.
  • Bạn có thể cập nhật nhiều hơn một cột. Bạn có thể sử dụng dấu phẩy giữa mỗi dòng.
  • Bạn có thể chỉ định mệnh đề WHERE để chỉ định một số hàng. Chỉ những hàng mà biểu thức đánh giá là true mới được cập nhật. Nếu bạn không chỉ định mệnh đề WHERE, tất cả các hàng sẽ được cập nhật.

Ví dụ về cập nhật SQLite

Trong câu lệnh CẬP NHẬT sau đây, chúng tôi sẽ cập nhật DepartmentId cho Sinh viên với StudentId = 6 thành 3:

CẬP NHẬT Sinh viênSET DepartmentId = 3WHERE StudentId = 6;

Điều này sẽ chạy thành công và bạn sẽ không nhận được bất kỳ đầu ra nào:

Trong mệnh đề CẬP NHẬT, chúng tôi chỉ định rằng chúng tôi muốn cập nhật bảng Sinh viên.

  • Trong mệnh đề WHERE, chúng tôi đã lọc tất cả các sinh viên để chỉ chọn hàng cho StudentId = 6.
  • Mệnh đề SET sẽ cập nhật giá trị của Id Khoa cho các sinh viên được chọn là 3.

Bây giờ, hãy xác minh rằng sinh viên có ID 6 đã được cập nhật, bằng cách chạy lệnh sau:

CHỌN * TỪ Sinh viên WHERE StudentId = 6;

Bây giờ bạn sẽ thấy rằng giá trị Department Id bây giờ là 3 như sau:

SQLite Delete

Truy vấn SQLite DELETE được sử dụng để loại bỏ các bản ghi hiện có khỏi một bảng được chỉ định. Bạn có thể sử dụng mệnh đề WHERE với các truy vấn DELETE để xóa các hàng đã chọn.

Mệnh đề DELETE có cú pháp sau:

  • Bạn phải viết tên bảng sau mệnh đề DELETE FROM, từ đó bạn muốn xóa các bản ghi. ( Lưu ý: rằng khoản DELETE . Được sử dụng để xóa một số bản ghi từ một bảng hoặc xóa tất cả các hồ sơ và nó sẽ không xóa các bảng riêng của mình Tuy nhiên, các khoản thả được sử dụng để xóa toàn bộ bảng với tất cả các hồ sơ trên đó. )
  • Nếu bạn viết mệnh đề DELETE như thế này "DELETE FROM guru", điều này sẽ xóa tất cả các bản ghi khỏi bảng "guru".
  • Bạn có thể chỉ định điều kiện WHERE với một biểu thức nếu bạn muốn xóa một số hàng cụ thể. Chỉ những hàng mà biểu thức đánh giá là true sẽ bị xóa. Ví dụ: "DELETE FROM guru WHERE id> 5" - điều này sẽ chỉ xóa các bản ghi có id lớn hơn 5.

Thí dụ

Trong câu lệnh sau, chúng tôi sẽ xóa hai học sinh có StudentId 11 và 12:

XÓA khỏi sinh viên KHI StudentId = 11 HOẶC StudentId = 12;

Biểu thức " StudentId = 11 OR StudentId = 12 " sẽ chỉ đúng với các sinh viên có Id 11 và 12. Vì vậy, mệnh đề DELETE sẽ được áp dụng cho cả hai và sẽ chỉ xóa chúng.

Lệnh này sẽ chạy thành công và bạn sẽ không nhận được bất kỳ đầu ra nào như sau:

Bạn có thể xác minh rằng hai học sinh đã bị xóa, bằng cách chọn tất cả các bản ghi từ bảng Học sinh như sau:

CHỌN * TỪ Sinh viên;

Bạn sẽ không thấy hai học sinh có id 11 và 12 như sau:

Điều khoản xung đột SQLite

Giả sử bạn có một cột có một trong các ràng buộc cột sau: UNIQUE, NOT NULL, CHECK hoặc PRIMARY KEY. Và sau đó, bạn đã cố gắng chèn hoặc cập nhật một giá trị trên cột đó với một giá trị xung đột với ràng buộc này.

Ví dụ: nếu một cột có ràng buộc UNIQUE và bạn đã cố gắng chèn một giá trị đã tồn tại (một giá trị trùng lặp), điều này xung đột với ràng buộc UNIQUE. Sau đó, điều khoản CONFLICT cho phép bạn chọn phải làm gì trong những trường hợp như vậy để giải quyết xung đột này.

Trước khi chúng tôi tiếp tục giải thích cách điều khoản CONFLICT giải quyết xung đột. Bạn nên hiểu giao dịch cơ sở dữ liệu là gì.

Giao dịch cơ sở dữ liệu:

Thuật ngữ giao dịch cơ sở dữ liệu là một danh sách các hoạt động SQLite (chèn hoặc cập nhật hoặc xóa). Giao dịch cơ sở dữ liệu phải được thực hiện như một đơn vị, hoặc tất cả các hoạt động được thực hiện thành công hoặc không. Tất cả các hoạt động sẽ bị hủy bỏ nếu một trong số chúng không thực hiện được.

Ví dụ cho một giao dịch cơ sở dữ liệu:

Giao dịch chuyển tiền từ tài khoản ngân hàng này sang tài khoản ngân hàng khác sẽ bao gồm một số hoạt động. Hoạt động giao dịch này bao gồm việc rút tiền từ tài khoản đầu tiên và gửi tiền vào một tài khoản khác. Giao dịch này phải được hoàn thành đầy đủ hoặc hủy bỏ hoàn toàn và không được thất bại giữa chừng.

Dưới đây là danh sách năm giải pháp bạn có thể chọn trong điều khoản CONFLICT:

  1. ROLLBACK - điều này sẽ khôi phục giao dịch trong đó câu lệnh SQLite hiện tại có xung đột (nó sẽ hủy toàn bộ giao dịch). Ví dụ: nếu bạn đang cố gắng cập nhật 10 hàng và hàng thứ năm có giá trị xung đột với một ràng buộc, thì sẽ không có hàng nào được cập nhật, 10 hàng sẽ giữ nguyên. Một lỗi sẽ được ném ra.
  2. RÚT GỌN - điều này sẽ hủy bỏ (hủy bỏ) câu lệnh SQLite hiện tại chỉ có xung đột và giao dịch sẽ không bị hủy bỏ. Ví dụ: nếu bạn đang cố gắng cập nhật 10 hàng và hàng thứ năm có giá trị xung đột với một ràng buộc, thì chỉ giá trị thứ năm sẽ không được cập nhật nhưng 9 hàng khác sẽ được cập nhật. Một lỗi sẽ được ném ra.
  3. FAIL - hủy bỏ câu lệnh SQLite hiện tại có xung đột. Tuy nhiên, giao dịch sẽ không tiếp tục nhưng các thay đổi trước đó được thực hiện cho các hàng trước hàng có xung đột sẽ được cam kết. Ví dụ: nếu bạn đang cố gắng cập nhật 10 hàng và hàng thứ năm có giá trị xung đột với một ràng buộc, thì chỉ 4 hàng sẽ được cập nhật và hàng còn lại thì không. Một lỗi sẽ được ném ra.
  1. BỎ QUA - điều này sẽ bỏ qua hàng có vi phạm ràng buộc và tiếp tục xử lý các hàng tiếp theo khác của câu lệnh SQLite. Ví dụ: nếu bạn đang cố gắng cập nhật 10 hàng và hàng thứ năm có giá trị xung đột với một ràng buộc, thì chỉ 4 hàng sẽ được cập nhật và hàng còn lại thì không. Nó sẽ không tiếp tục cập nhật các hàng khác và dừng lại ở hàng có giá trị xung đột. Không có lỗi sẽ được ném ra.
  1. THAY THẾ - nó phụ thuộc vào loại ràng buộc có vi phạm:
  • Khi có vi phạm ràng buộc đối với ràng buộc KHÓA DUY NHẤT hoặc CHÍNH. REPLACE sẽ thay thế hàng gây ra vi phạm bằng hàng mới được chèn hoặc cập nhật.
  • Khi có vi phạm ràng buộc NOT NULL, mệnh đề REPLACE sẽ thay thế giá trị NULL bằng giá trị mặc định của cột đó. Nếu cột không có giá trị mặc định, thì SQLite sẽ hủy bỏ câu lệnh (câu lệnh sẽ bị hủy)
  • NẾU vi phạm ràng buộc CHECK xảy ra, điều khoản sẽ bị hủy bỏ.

Lưu ý: 5 giải pháp trên là các tùy chọn cho cách bạn muốn giải quyết xung đột. Nó có thể không nhất thiết là những gì có thể áp dụng để giải quyết một xung đột mà có thể áp dụng để giải quyết các loại xung đột khác.

Cách khai báo mệnh đề CONFLICT

Bạn có thể khai báo mệnh đề ON MFLICT khi bạn xác định một ràng buộc cho một định nghĩa cột trong mệnh đề CREATE TABLE. Sử dụng cú pháp sau:

Bạn có thể chọn một trong năm giải pháp để giải quyết xung đột như đã giải thích trước đây.

Ví dụ về BỎ QUA CONFLICT

Bước 1) Tạo một chủ đề bảng mới như sau:

TẠO BẢNG [Chủ đề] ([SubjectId] INTEGER KHÔNG ĐẦY ĐỦ TỪ KHÓA CHÍNH KHI BỎ QUA XUNG ĐỘT,[Tên chủ đề] NVARCHAR KHÔNG ĐẦY ĐỦ); 

Lưu ý rằng chúng tôi đã xác định một ràng buộc CHÍNH CHÍNH trên cột SubjectId. Ràng buộc khóa chính sẽ không cho phép chèn hai giá trị trùng lặp vào cột SubjectId để tất cả các giá trị trong cột đó phải là duy nhất. Ngoài ra, hãy lưu ý rằng chúng tôi chọn cách giải quyết xung đột là " BỎ QUA ".

Lệnh sẽ chạy thành công và bạn sẽ không gặp bất kỳ lỗi nào:

Bước 2) Bây giờ, hãy chèn một số giá trị vào các đối tượng bảng mới, nhưng với một giá trị vi phạm ràng buộc khóa chính:

CHÈN VÀO CÁC GIÁ TRỊ Môn học (1, 'Đại số');CHÈN VÀO GIÁ TRỊ Môn học (2, 'Khóa học Cơ sở dữ liệu');CHÈN VÀO GIÁ TRỊ Chủ thể (2, 'Cấu trúc dữ liệu');CHÈN VÀO CÁC GIÁ TRỊ Môn học (4, 'Thuật toán');

Trong câu lệnh INSERT này, chúng tôi đã cố gắng chèn hai khóa học có cùng id Chủ đề khóa chính 2, điều này vi phạm giới hạn khóa chính.

Các lệnh sẽ chạy tốt và bạn sẽ không gặp bất kỳ lỗi nào. Như sau:

Bước 3) Chọn tất cả các chủ đề từ bảng như sau:

CHỌN * TỪ Chủ ngữ;

Điều này sẽ cung cấp cho bạn danh sách các môn học:

Lưu ý rằng chỉ có ba môn học được chèn " Đại số, Khóa học Cơ sở dữ liệu và Thuật toán " thay vì 4 hàng.

Hàng có giá trị vi phạm giới hạn khóa chính, là "Cấu trúc dữ liệu" đã bị bỏ qua và không được chèn. Tuy nhiên, SQLite tiếp tục thực hiện các câu lệnh khác sau hàng đó.

Bước 4) XÓA các đối tượng trong bảng để tạo lại nó bằng một mệnh đề BẬT MẶT BẬT khác cho ví dụ sau bằng cách chạy lệnh sau:

DROP TABLE Chủ đề; 

Lệnh drop sẽ xóa toàn bộ bảng. Chủ đề bảng hiện không tồn tại.

Ví dụ về THAY THẾ XUNG ĐỘT

Bước 1) Tạo một chủ đề bảng mới như sau:

TẠO BẢNG [Chủ đề] ([SubjectId] INTEGER NOT NULL PRIMARY KEY ON REPLACE CONFLICT,[Tên chủ đề] NVARCHAR KHÔNG ĐẦY ĐỦ); 

Lưu ý rằng chúng tôi đã xác định ràng buộc CHÍNH CHÍNH trên cột SubjectId. Ràng buộc khóa chính sẽ không cho phép chèn hai giá trị trùng lặp vào cột SubjectId để tất cả các giá trị trong cột đó phải là duy nhất.

Ngoài ra, hãy lưu ý rằng chúng tôi chọn một tùy chọn giải quyết xung đột là " REPLACE ". Lệnh sẽ chạy thành công và bạn sẽ không gặp bất kỳ lỗi nào:

Bước 2) Bây giờ, hãy chèn một số giá trị vào bảng mới Chủ đề, nhưng với một giá trị vi phạm ràng buộc khóa chính:

CHÈN VÀO CÁC GIÁ TRỊ Môn học (1, 'Đại số');CHÈN VÀO GIÁ TRỊ Môn học (2, 'Khóa học Cơ sở dữ liệu');CHÈN VÀO GIÁ TRỊ Chủ thể (2, 'Cấu trúc dữ liệu');CHÈN VÀO CÁC GIÁ TRỊ Môn học (4, 'Thuật toán');

Trong câu lệnh INSERT này, chúng tôi đã cố gắng chèn hai khóa học có cùng id Chủ đề khóa chính 2, điều này vi phạm giới hạn khóa chính.

Các lệnh sẽ chạy tốt và bạn sẽ không gặp bất kỳ lỗi nào. Như sau:

Bước 3) Chọn tất cả các chủ đề từ bảng như sau:

CHỌN * TỪ Chủ ngữ;

Điều này sẽ cung cấp cho bạn danh sách các môn học:

Lưu ý rằng chỉ có ba đối tượng được chèn " Đại số, Cấu trúc dữ liệu và Thuật toán " trong khi chúng tôi đã cố gắng chèn 4 hàng.

Hàng có giá trị vi phạm ràng buộc khóa chính, là " Cấu trúc dữ liệu " đã thay thế giá trị " Khóa học cơ sở dữ liệu " như sau:

  • Hai câu lệnh chèn đầu tiên chạy tốt mà không có vấn đề gì. Hai môn Đại số và Khoá học Cơ sở dữ liệu sẽ được chèn thêm id 1, 2.
  • Khi SQLite cố gắng chạy câu lệnh chèn thứ ba với SubjectId 2 và SubjectName " Data Structures ", nó phát hiện ra rằng đã có một chủ đề với SubjectId = 2. Đây là một vi phạm đối với ràng buộc khóa chính được xác định trên cột SubjectId.
  • SQLite sẽ chọn giải pháp THAY THẾ cho xung đột này. Nó thay thế giá trị đã tồn tại trong bảng chủ đề bằng giá trị mới từ câu lệnh insert. Vì vậy, Tên chủ đề " Khóa học cơ sở dữ liệu " sẽ được thay thế bằng Tên chủ đề " Cấu trúc dữ liệu ".

Tóm lược:

Các mệnh đề INSERT, UPDATE và DELETE được sử dụng để sửa đổi dữ liệu trong cơ sở dữ liệu SQLite. Điều khoản CONFLICT là một điều khoản mạnh mẽ để giải quyết mọi xung đột giữa dữ liệu và dữ liệu cần sửa đổi.