bởi Bạch Ngọc Toàn vào 19/04/2016. Lượt xem: 28,335 Hôm nay tôi muốn đưa bạn tất cả trở lại cho một trong những câu hỏi phỏng vấn về cơ rất độc đáo mà tôi thấy thường xuyên sử dụng trong các buổi phỏng vấn. Tôi đã từng viết về tính chất ACID này. Trong sự nghiệp của tôi, tôi đã thấy nó trong hàng ngàn cuộc phỏng vấn. Một trong những dịch vụ phổ biến nhất của tôi là giúp mọi người với những câu hỏi phỏng vấn và câu các trả lời. Tôi thường quan sát thấy khi phỏng vấn hết các câu hỏi để hỏi và suy nghĩ của các câu hỏi tiếp theo, họ thường hỏi câu hỏi về thuộc tính ACID của các cơ sở dữ liệu. Câu hỏi: ACID là gì trong cơ sở dữ liệu? Trả lời: ACID (viết tắt của Atomicity, Consistency, Isolation, Durability) là một khái niệm cơ sở dữ liệu mà các chuyên gia thường tìm kiếm khi đánh giá các cơ sở dữ liệu và kiến trúc ứng dụng. Đối với một cơ sở dữ liệu đáng tin cậy tất cả bốn thuộc tính cần đạt được. Atomicity là một đề xuất tất cả hoặc không có gì. Tính chất này đảm bảo rằng khi một giao dịch liên quan đến hai hay nhiều xử lý, hoặc là tất cả các xử lý được thực hiện hoặc không có xử lý được thực hiện. Các tính chất ACID của cơ sở dữ liệu được mô tả trong ISO / IEC 10.026-1: 1992 phần 4. Ghi số này nếu bạn muốn gây ấn tượng với người phỏng vấn với kiến thức của bạn. Bạn biết rằng anh ta sẽ hỏi câu hỏi này, tốt hơn sẵn sàng để trả lời câu hỏi này chính xác và gây ấn tượng với anh ấy / cô ấy. Trích nguồn từ: (http://blog.sqlauthority.com/2016/04/10/acid-properties-database-interview-question-week-066/) Bất kỳ ứng dụng nào bao gồm cơ sở dữ liệu phải tuân thủ các đặc điểm ACID, trong các ứng dụng và người quản lý cơ sở dữ liệu chuyên nghiệp, khái niệm ACID đề cập đến các đặc điểm hoặc tính chất đảm bảo rằng các giao dịch trong cơ sở dữ liệu được thực hiện an toàn và đáng tin cậy. Cụ thể, ACID có nghĩa là Nguyên tử, Tính nhất quán, Cách ly và Độ bền. Ví dụ, một giao dịch trong cơ sở dữ liệu sẽ chèn một bản ghi hoặc nếu chúng ta xem đó là mô hình kinh doanh Thêm khách hàng mới, Sửa đổi sản phẩm. Giao dịch luôn tạo ra thay đổi, chèn, sửa đổi, xóa, truy vấn không phải là giao dịch vì nó không tạo ra thay đổi. Nguyên tửĐó là tài sản đảm bảo và xác minh nếu giao dịch được thực hiện hoặc không được thực hiện và tài sản này cho biết rằng nếu một hoạt động không được hoàn thành thì nó bị hủy, ví dụ: giả sử chúng tôi đang chèn một bản ghi và máy chủ ngừng hoạt động, một bản ghi được ghi lại trong một nửa, sau đó nguyên tử hồ sơ này sẽ không được ghi lại. Kiên địnhĐó là tài sản đảm bảo rằng các giao dịch có thể được hoàn thành mà không có vấn đề sẽ được thực hiện. Khái niệm này có liên quan đến tính toàn vẹn của cơ sở dữ liệu. Nó ngăn dữ liệu thay đổi và mất ý thức hoặc còn lại mà không có bất kỳ tham chiếu nào, ví dụ, khách hàng không thể bị xóa trong khi thực hiện bất kỳ giao dịch mua nào tại một số thời điểm. Nếu bạn muốn xóa khách hàng, trước tiên bạn phải xóa tất cả hóa đơn và dữ liệu liên quan đến khách hàng đó. Cách nhiệtĐó là tài sản đảm bảo rằng nếu hai hoặc nhiều giao dịch xảy ra cùng một lúc thì chúng sẽ được thực hiện lần lượt và nếu chúng được thực hiện song song thì mỗi giao dịch sẽ thực hiện độc lập với nhau để tránh các lỗi có thể xảy ra. Độ bềnĐây là tài sản chịu trách nhiệm đảm bảo giao dịch đã được thực hiện và những thay đổi được thực hiện trong giao dịch là vĩnh viễn, ngay cả
trong trường hợp có bất kỳ vấn đề nào như thiếu điện hoặc lỗi hệ thống. - Cấu trúc bảng cho bảng `users` TẠO BẢNG NẾU KHÔNG EXISTS` users` (` userid` int (10) KHÔNG NULL, `name` varchar (150) DEFAULT NULL) Engine = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1 ; Chúng tôi thêm một số dữ liệu vào bảng người dùng XÁC NHẬN VÀO `users` (` iduser`, `name`) GIÁ TRỊ (1, 'Carlos Alberte'), (2, 'Pablo Callejos'), (3, 'Ana Bolena'); Trong trường hợp này, chúng tôi tạo khóa chính của bảng người dùng sẽ là người dùng - Các chỉ mục của bảng `users` ALTER TABLE` users` THÊM KHÓA CHÍNH (` userid`); Tiếp theo chúng ta sẽ tạo bảng mức - Cấu trúc bảng cho bảng `level` TẠO BẢNG NẾU KHÔNG EXISTS` level` (` idlevel` int (11) KHÔNG NULL, `level` varchar (50) DEFAULT NULL) Engine = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1 ; Chúng tôi thêm một số dữ liệu vào bảng cấp độ XÁC NHẬN VÀO `level` (` idlevel`, `level`) GIÁ TRỊ (1, 'Cơ bản'), (2, 'Trung cấp'), (3, 'Nâng cao'); Chúng tôi tạo bên dưới bảng đặc quyền, nơi chúng tôi sẽ chỉ ra mức độ quyền của mỗi người dùng - Cấu trúc bảng cho bảng `đặc quyền` TẠO BẢNG NẾU KHÔNG EXISTS` đặc quyền` (` idpriv đặc biệt` int (11) KHÔNG NULL, `idlevel` int (11) KHÔNG NULL DEFAULT '0', ` userid` int (11 ) KHÔNG NULL) ĐỘNG CƠ = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1; Chúng tôi thêm một số dữ liệu vào bảng đặc quyền XÁC NHẬN VÀO `đặc quyền` (` idpriv đặc biệt`, `idlevel`, ` iduser`) GIÁ TRỊ (1, 1, 1), (2, 2, 3), (3, 1, 2); Tiếp theo, chúng tôi thêm các mối quan hệ từ trình soạn thảo SQL, tôi gán một khóa ngoại liên quan đến bảng đặc quyền và bảng người dùng thông qua tên người dùng và khóa ngoại liên quan đến đặc quyền cho các cấp thông qua idlelevel. - Các bộ lọc cho bảng `đặc quyền` ALTER TABLE` đặc quyền` THÊM CONSTRAINT` levelfk` FOREIGN KEY (`idlevel`) người dùng` (`userid`); Tiếp theo chúng tôi tham khảo cơ sở dữ liệu để xem dữ liệu có ổn không CHỌN users.name, level.level TỪ người dùng, cấp độ, đặc quyền WHERE đặc quyền.level = level.level ANDuser.user = đặc quyền.user Hãy xem cách nó hoạt động, chúng tôi cố gắng chèn các đặc quyền cho người dùng và cấp độ không tồn tại. Các đặc quyền CHỈ VÀO GIÁ TRỊ (6, 8, 10); Điều này gây ra lỗi vì khóa người dùng nước ngoài trong bảng đặc quyền sẽ tạo ra sự không nhất quán nếu chúng tôi thêm người dùng không tồn tại trong bảng người dùng, ở đây chúng tôi tránh lỗi, với định dạng MySam, dữ liệu sẽ được lưu mà không gặp sự cố. XÓA TỪ `user` WHERE userid = 3 Khi thực thi câu lệnh SQL, nó sẽ báo lỗi, vì máy khách không thể bị xóa vì nó có dữ liệu trong các bảng khác trong trường hợp này, máy khách có id 3 nằm trong bảng đặc quyền, nếu chúng ta muốn xóa nó, trước tiên chúng ta phải xóa nó khỏi tất cả các bảng và sau bảng khách hàng. $config[ads_text5] not found Để loại bỏ loại bản ghi này bằng khóa ngoại, loại được gọi là xóa trong CASCADA được sử dụng, trong đó tất cả các bản ghi liên quan đến một truy vấn cụ thể sẽ bị xóa trong tất cả các bảng có mối quan hệ khóa ngoại. Để thực hiện giao dịch này, chúng tôi sử dụng chức năng BẬT XÓA CASCADE . THAY ĐỔI `đặc quyền` THÊM CONSTRAINT` đặc quyềnfk` PHÍ NGOẠI (` userid`) TÀI LIỆU THAM KHẢO` người dùng` (`userid`) TRÊN XÓA CASCADE TRÊN CẬP NHẬT CASCADE; Chúng tôi thực hiện lại truy vấn SQL XÓA TỪ `user` WHERE userid = 3 Sau đó, chúng ta có thể thực hiện truy vấn sql để xác minh rằng nó không còn trong bất kỳ bảng nào: CHỌN users.name, level.level TỪ người dùng, cấp độ, đặc quyền WHERE đặc quyền.level = level.level AND users.user = đặc quyền người dùng. $config[ads_text6] not found Người dùng 3 cũng đã bị xóa khỏi bảng người dùng và bảng đặc quyền vì có khóa ngoại cho người dùng. Người dùng XÁC NHẬN VÀO GIÁ TRỊ (5, 'Núi Julia'); Các đặc quyền INSERT INTO (`idpriv đặc biệt`, ` idlevel`, `iduser`) GIÁ TRỊ (6, 2, 6); Trong trường hợp này, người dùng sẽ được lưu nhưng không phải là đặc quyền của họ vì ID 6 không tồn tại trong bảng người dùng.
|