Một ràng buộc trong MySQL đưa ra 2 ví dụ là gì?

là các yêu cầu do người dùng xác định xác định giá trị nào hợp lệ cho một cột hoặc bảng. Bạn có thể coi chúng là những hạn chế bổ sung để thu hẹp các giá trị được chấp nhận nghiêm ngặt hơn so với các loại dữ liệu cho phép

Các ràng buộc cho phép bạn xác định chất lượng mà tất cả các mục phải có, với chính máy chủ thực thi các hạn chế khi nhập hoặc cập nhật dữ liệu. Ví dụ, có thể không hợp lý khi một cột biểu thị điểm sôi của các chất khác nhau thấp hơn điểm đóng băng của nó. Một ràng buộc có thể thực thi loại yêu cầu này, mặc dù các loại sẽ không thể

Trường hợp các ràng buộc được xác định. cột so với ràng buộc bảng

MySQL cho phép bạn tạo các ràng buộc liên kết với một cột cụ thể hoặc với một bảng nói chung

Hầu như tất cả các ràng buộc có thể được sử dụng ở cả hai dạng mà không cần sửa đổi

ConstraintColumnTableCHECKYesYesNOT NULLYesNo*UNIQUEYesYesPRIMARY KEYYesYesFOREIGN KEYNoYes

*.

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

3 không thể được sử dụng làm ràng buộc bảng. Tuy nhiên, bạn có thể tính gần đúng kết quả bằng cách sử dụng

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

4 làm câu lệnh trong ràng buộc bảng

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

5

Hãy xem các ràng buộc cột và bảng khác nhau như thế nào

Ràng buộc cột

Các ràng buộc cột là các ràng buộc gắn liền với một. Chúng được sử dụng để xác định xem một giá trị được đề xuất cho một cột có hợp lệ hay không. Các ràng buộc cột được đánh giá sau khi đầu vào được xác thực theo các yêu cầu loại cơ bản (chẳng hạn như đảm bảo giá trị là một số nguyên cho cột

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

6)

Ràng buộc cột là tuyệt vời để thể hiện các yêu cầu được giới hạn trong một trường duy nhất. Họ đính kèm điều kiện ràng buộc trực tiếp vào cột liên quan. Chẳng hạn, chúng ta có thể lập mô hình hạn chế

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

7 trong bảng

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

8 bằng cách thêm một ràng buộc sau tên cột và kiểu dữ liệu

CREATE TABLE person (

. . .

age INT CHECK (age >= 0),

. . .

);

Đoạn mã này định nghĩa một bảng

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

8 với một trong các cột là một

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

6 được gọi là

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

7.

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

7 phải lớn hơn hoặc bằng 0. Ràng buộc cột rất dễ hiểu vì chúng được thêm dưới dạng yêu cầu bổ sung vào cột mà chúng ảnh hưởng

Ràng buộc bảng

Loại ràng buộc khác được gọi là ràng buộc bảng. ràng buộc có thể biểu thị hầu hết mọi hạn chế mà ràng buộc cột có thể, nhưng có thể biểu thị thêm các hạn chế liên quan đến nhiều cột. Thay vì được gắn vào một cột cụ thể, các ràng buộc bảng được định nghĩa là một thành phần riêng biệt của bảng và có thể tham chiếu đến bất kỳ cột nào của bảng

Ràng buộc cột mà chúng ta đã thấy trước đó có thể được thể hiện dưới dạng ràng buộc bảng như thế này

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

Cú pháp cơ bản giống nhau được sử dụng, nhưng ràng buộc được liệt kê riêng. Để tận dụng khả năng của các ràng buộc bảng để đưa ra các hạn chế phức hợp, chúng ta có thể sử dụng toán tử logic

CONSTRAINT <constraint_name> <constraint_type_and_details>

3 để nối nhiều điều kiện từ các cột khác nhau

Ví dụ: trong cơ sở dữ liệu ngân hàng, một bảng có tên

CONSTRAINT <constraint_name> <constraint_type_and_details>

4 có thể cần kiểm tra xem các cá nhân có tài khoản hiện tại hay không và khả năng cung cấp tài sản thế chấp để đủ điều kiện vay. Có thể hợp lý khi bao gồm cả hai điều này trong cùng một lần kiểm tra

CREATE TABLE qualified_borrowers (

. . .

account_number INT,

acceptable_collateral BOOLEAN,

. . .

CHECK (account_number IS NOT NULL AND acceptable_collateral = true)

);

Ở đây, chúng ta sử dụng ràng buộc

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

5 một lần nữa để kiểm tra xem

CONSTRAINT <constraint_name> <constraint_type_and_details>

6 có vô hiệu hay không và nhân viên cho vay đã đánh dấu khách hàng là người có tài sản thế chấp chấp nhận được bằng cách đánh dấu vào cột

CONSTRAINT <constraint_name> <constraint_type_and_details>

7. Một ràng buộc bảng là cần thiết vì nhiều cột đang được kiểm tra

Bây giờ là thời điểm tốt để đề cập rằng mặc dù chủ yếu chúng ta sẽ sử dụng lệnh SQL

CONSTRAINT <constraint_name> <constraint_type_and_details>

8 trong các ví dụ này để tạo một bảng mới, nhưng bạn cũng có thể thêm các ràng buộc vào một bảng hiện có với

CONSTRAINT <constraint_name> <constraint_type_and_details>

9. Khi sử dụng

CONSTRAINT <constraint_name> <constraint_type_and_details>

9, các ràng buộc mới khiến các giá trị hiện có trong bảng được kiểm tra theo ràng buộc mới. Nếu các giá trị vi phạm ràng buộc, ràng buộc không thể được thêm vào

Tạo tên cho các ràng buộc

Tên ràng buộc mặc định

Khi bạn tạo các ràng buộc bằng cú pháp trên, MySQL sẽ tự động chọn một tên hợp lý, nhưng mơ hồ. Trong trường hợp của bảng

CONSTRAINT <constraint_name> <constraint_type_and_details>

4 ở trên, MySQL sẽ đặt tên cho ràng buộc là

CREATE TABLE qualified_borrowers (

. . .

account_number INT,

acceptable_collateral BOOLEAN,

. . .

CONSTRAINT loan_worthiness CHECK (account_number IS NOT NULL AND acceptable_collateral = true)

);

2

INSERT INTO qualified_borrowers VALUES (123, false);

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

Tên này cung cấp cho bạn thông tin về bảng và loại ràng buộc khi một ràng buộc bị vi phạm. Tuy nhiên, trong trường hợp có nhiều ràng buộc trên một bảng, tên mô tả nhiều hơn sẽ hữu ích để giúp khắc phục sự cố

Tên ràng buộc tùy chỉnh

Bạn có thể tùy ý chỉ định tên cho các ràng buộc của mình bằng cách đặt trước định nghĩa ràng buộc bằng từ khóa

CREATE TABLE qualified_borrowers (

. . .

account_number INT,

acceptable_collateral BOOLEAN,

. . .

CONSTRAINT loan_worthiness CHECK (account_number IS NOT NULL AND acceptable_collateral = true)

);

3 theo sau là tên

Cú pháp cơ bản để thêm một tên tùy chỉnh là thế này

CONSTRAINT <constraint_name> <constraint_type_and_details>

Ví dụ: nếu bạn muốn đặt tên cho ràng buộc trong bảng

CONSTRAINT <constraint_name> <constraint_type_and_details>

4 là

CREATE TABLE qualified_borrowers (

. . .

account_number INT,

acceptable_collateral BOOLEAN,

. . .

CONSTRAINT loan_worthiness CHECK (account_number IS NOT NULL AND acceptable_collateral = true)

);

5, thay vào đó, bạn có thể định nghĩa bảng như sau

CREATE TABLE qualified_borrowers (

. . .

account_number INT,

acceptable_collateral BOOLEAN,

. . .

CONSTRAINT loan_worthiness CHECK (account_number IS NOT NULL AND acceptable_collateral = true)

);

Bây giờ, khi chúng tôi vi phạm một ràng buộc, chúng tôi sẽ nhận được nhãn mô tả hơn

INSERT INTO qualified_borrowers VALUES (123, false);

ERROR 3819 (HY000): Check constraint 'loan_worthiness' is violated.

Bạn có thể đặt tên cho các ràng buộc cột theo cách tương tự

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

Danh sách các ràng buộc có sẵn của MySQL

Bây giờ chúng ta đã đề cập đến một số khái niệm cơ bản về cách thức hoạt động của các ràng buộc, chúng ta có thể xem xét kỹ hơn những ràng buộc nào có sẵn và cách chúng có thể được sử dụng

Kiểm tra ràng buộc

là một ràng buộc mục đích chung cho phép bạn chỉ định một biểu thức liên quan đến các giá trị cột hoặc bảng đánh giá thành một giá trị boolean

Bạn đã thấy một vài ví dụ về ràng buộc kiểm tra trước đó. Kiểm tra các ràng buộc bắt đầu bằng từ khóa

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

5 và sau đó cung cấp một biểu thức nằm trong dấu ngoặc đơn. Đối với các ràng buộc cột, điều này được đặt sau phần khai báo kiểu dữ liệu. Đối với các ràng buộc bảng, chúng có thể được đặt ở bất kỳ đâu sau khi các cột mà chúng tương tác được xác định

Ví dụ: chúng ta có thể tạo một bảng

CREATE TABLE qualified_borrowers (

. . .

account_number INT,

acceptable_collateral BOOLEAN,

. . .

CONSTRAINT loan_worthiness CHECK (account_number IS NOT NULL AND acceptable_collateral = true)

);

7 chứa các bộ phim đã được đề cử và đủ điều kiện nhận giải thưởng phim dài tập cho năm 2019

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

0

Chúng tôi có hạn chế kiểm tra một cột để kiểm tra xem

CREATE TABLE qualified_borrowers (

. . .

account_number INT,

acceptable_collateral BOOLEAN,

. . .

CONSTRAINT loan_worthiness CHECK (account_number IS NOT NULL AND acceptable_collateral = true)

);

8 có trong năm 2019 không. Sau đó, chúng tôi có một ràng buộc kiểm tra bảng để đảm bảo rằng bộ phim đã nhận đủ phiếu bầu để được đề cử và độ dài đủ điều kiện cho hạng mục "độ dài phim"

Khi đánh giá các ràng buộc kiểm tra, các giá trị chấp nhận được đánh giá là đúng. Nếu các giá trị của bản ghi mới đáp ứng tất cả các yêu cầu và ràng buộc về loại, thì bản ghi sẽ được thêm vào bảng

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

1

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

2

Các giá trị đánh giá sai tạo ra lỗi cho biết rằng ràng buộc không được thỏa mãn

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

3

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

4

Trong trường hợp này, bộ phim đã thỏa mãn mọi điều kiện ngoại trừ số phiếu yêu cầu. MySQL từ chối đệ trình vì nó không vượt qua ràng buộc kiểm tra bảng cuối cùng

Không ràng buộc null

Ràng buộc

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

3 tập trung hơn nhiều. Nó đảm bảo rằng các giá trị trong một cột không phải là null. Trong khi đây là một hạn chế đơn giản, nó được sử dụng rất thường xuyên

Cách thêm các ràng buộc không null trong MySQL

Để đánh dấu một cột là yêu cầu một giá trị khác null, hãy thêm

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

3 sau phần khai báo kiểu

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

5

Trong ví dụ trên, chúng ta có một bảng hai cột đơn giản ánh xạ các quốc gia tới thủ đô quốc gia của họ. Vì cả hai trường này đều là các trường bắt buộc nên để trống sẽ không hợp lý, nên chúng tôi thêm ràng buộc

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

3

Chèn một giá trị null bây giờ dẫn đến một lỗi

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

6_______11_______7

Ràng buộc

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

3 chỉ có chức năng như một ràng buộc cột (nó không thể được sử dụng như một ràng buộc bảng). Tuy nhiên, bạn có thể dễ dàng giải quyết vấn đề này bằng cách sử dụng ràng buộc

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

4 trong bảng

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

5

Ví dụ: điều này cung cấp các đảm bảo tương đương bằng cách sử dụng ràng buộc bảng

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

8

LIÊN QUAN ĐẾN PRISMA. IO

Khi làm việc với Prisma Client, bạn có thể kiểm soát xem mỗi trường có nhận chức năng tương đương với ràng buộc

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

3 trong PostgreSQL hay không

Prisma là bộ công cụ cơ sở dữ liệu mã nguồn mở dành cho Typescript và Node. js nhằm mục đích giúp các nhà phát triển ứng dụng làm việc hiệu quả và tự tin hơn khi làm việc với cơ sở dữ liệu

ràng buộc duy nhất

Ràng buộc

INSERT INTO qualified_borrowers VALUES (123, false);

6 cho MySQL biết rằng mỗi giá trị trong một cột không được lặp lại. Điều này hữu ích trong nhiều tình huống khác nhau khi không thể có cùng một giá trị trong nhiều bản ghi

Ví dụ: theo định nghĩa, các cột liên quan đến ID thuộc bất kỳ loại nào phải có các giá trị duy nhất. Số an sinh xã hội, ID sinh viên hoặc khách hàng hoặc UPC sản phẩm (số mã vạch) sẽ vô dụng nếu chúng không thể phân biệt giữa những người hoặc vật phẩm cụ thể

Một ràng buộc

INSERT INTO qualified_borrowers VALUES (123, false);

6 có thể được chỉ định ở cấp độ cột

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

9

Chúng cũng có thể được chỉ định dưới dạng ràng buộc bảng

CREATE TABLE qualified_borrowers (

. . .

account_number INT,

acceptable_collateral BOOLEAN,

. . .

CHECK (account_number IS NOT NULL AND acceptable_collateral = true)

);

0

Một trong những ưu điểm của việc sử dụng ràng buộc bảng

INSERT INTO qualified_borrowers VALUES (123, false);

6 là nó cho phép bạn thực hiện kiểm tra tính duy nhất trên tổ hợp các cột. Điều này hoạt động bằng cách chỉ định hai hoặc nhiều cột mà MySQL sẽ đánh giá cùng nhau. Các giá trị trong các cột riêng lẻ có thể lặp lại nhưng sự kết hợp của các giá trị được chỉ định phải là duy nhất

Ví dụ, hãy nhìn lại bảng

INSERT INTO qualified_borrowers VALUES (123, false);

9 mà chúng ta đã sử dụng trước đây

CREATE TABLE qualified_borrowers (

. . .

account_number INT,

acceptable_collateral BOOLEAN,

. . .

CHECK (account_number IS NOT NULL AND acceptable_collateral = true)

);

1

Nếu chúng tôi muốn đảm bảo rằng chúng tôi không thêm nhiều bản ghi cho cùng một cặp, chúng tôi có thể thêm các ràng buộc

INSERT INTO qualified_borrowers VALUES (123, false);

6 vào các cột tại đây

CREATE TABLE qualified_borrowers (

. . .

account_number INT,

acceptable_collateral BOOLEAN,

. . .

CHECK (account_number IS NOT NULL AND acceptable_collateral = true)

);

2

Điều này sẽ đảm bảo rằng cả quốc gia và thủ đô chỉ có mặt một lần trong mỗi bảng. Tuy nhiên, một số quốc gia có nhiều thủ đô. Điều này có nghĩa là chúng tôi có thể có nhiều mục có cùng giá trị

ERROR 3819 (HY000): Check constraint 'loan_worthiness' is violated.

1. Chúng sẽ không hoạt động với thiết kế hiện tại

CREATE TABLE qualified_borrowers (

. . .

account_number INT,

acceptable_collateral BOOLEAN,

. . .

CHECK (account_number IS NOT NULL AND acceptable_collateral = true)

);

3

CREATE TABLE qualified_borrowers (

. . .

account_number INT,

acceptable_collateral BOOLEAN,

. . .

CHECK (account_number IS NOT NULL AND acceptable_collateral = true)

);

4

Nếu chúng tôi vẫn muốn đảm bảo rằng chúng tôi không kết thúc với các mục nhập trùng lặp trong khi vẫn cho phép các giá trị lặp lại trong các cột riêng lẻ, thì chỉ cần kiểm tra duy nhất sự kết hợp của

ERROR 3819 (HY000): Check constraint 'loan_worthiness' is violated.

1 và

ERROR 3819 (HY000): Check constraint 'loan_worthiness' is violated.

3

CREATE TABLE qualified_borrowers (

. . .

account_number INT,

acceptable_collateral BOOLEAN,

. . .

CHECK (account_number IS NOT NULL AND acceptable_collateral = true)

);

5

Bây giờ, chúng ta có thể thêm cả hai thủ đô của Bolivia vào bảng mà không gặp lỗi

CREATE TABLE qualified_borrowers (

. . .

account_number INT,

acceptable_collateral BOOLEAN,

. . .

CHECK (account_number IS NOT NULL AND acceptable_collateral = true)

);

3

CREATE TABLE qualified_borrowers (

. . .

account_number INT,

acceptable_collateral BOOLEAN,

. . .

CHECK (account_number IS NOT NULL AND acceptable_collateral = true)

);

7

Tuy nhiên, cố gắng thêm cùng một kết hợp hai lần vẫn bị ràng buộc

CREATE TABLE qualified_borrowers (

. . .

account_number INT,

acceptable_collateral BOOLEAN,

. . .

CHECK (account_number IS NOT NULL AND acceptable_collateral = true)

);

8

CREATE TABLE qualified_borrowers (

. . .

account_number INT,

acceptable_collateral BOOLEAN,

. . .

CHECK (account_number IS NOT NULL AND acceptable_collateral = true)

);

9

Ràng buộc khóa chính

Các ràng buộc phục vụ một mục đích đặc biệt. Nó chỉ ra rằng cột có thể được sử dụng để xác định duy nhất một bản ghi trong bảng. Điều này có nghĩa là nó phải là duy nhất đáng tin cậy và mỗi bản ghi phải có một giá trị trong cột đó

Khóa chính được khuyến nghị cho mọi bảng nhưng không bắt buộc và mỗi bảng chỉ có thể có một khóa chính. Khóa chính được sử dụng chủ yếu để xác định, truy xuất, sửa đổi hoặc xóa các bản ghi riêng lẻ trong một bảng. Chúng cho phép người dùng và quản trị viên nhắm mục tiêu hoạt động bằng cách sử dụng mã định danh được MySQL đảm bảo khớp chính xác với một bản ghi

Hãy sử dụng bảng

ERROR 3819 (HY000): Check constraint 'loan_worthiness' is violated.

5 mà chúng ta đã thấy trước đây làm ví dụ

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

9

Ở đây, chúng tôi đã xác định rằng

ERROR 3819 (HY000): Check constraint 'loan_worthiness' is violated.

6 phải là duy nhất. Nếu chúng tôi muốn sử dụng cột này làm khóa chính (đảm bảo tính duy nhất và giá trị khác null), chúng tôi chỉ cần thay đổi ràng buộc

INSERT INTO qualified_borrowers VALUES (123, false);

6 thành

ERROR 3819 (HY000): Check constraint 'loan_worthiness' is violated.

4

INSERT INTO qualified_borrowers VALUES (123, false);

1

Bằng cách này, nếu chúng tôi cần cập nhật số lượng hàng tồn kho cho một nguồn cung cấp cụ thể, chúng tôi có thể nhắm mục tiêu nguồn cung cấp đó bằng khóa chính

INSERT INTO qualified_borrowers VALUES (123, false);

2______23_______3

Mặc dù nhiều bảng sử dụng một cột duy nhất làm khóa chính, nhưng cũng có thể tạo khóa chính bằng cách sử dụng một tập hợp các cột làm ràng buộc bảng

Bảng

INSERT INTO qualified_borrowers VALUES (123, false);

9 là một ứng cử viên sáng giá để chứng minh điều này. Nếu chúng ta muốn tạo khóa chính bằng cách sử dụng các cột hiện có, chúng ta có thể thay thế ràng buộc bảng

INSERT INTO qualified_borrowers VALUES (123, false);

6 bằng

ERROR 3819 (HY000): Check constraint 'loan_worthiness' is violated.

4

INSERT INTO qualified_borrowers VALUES (123, false);

4

Ràng buộc khóa ngoại

là các cột trong một bảng tham chiếu các giá trị cột trong một bảng khác. Điều này là mong muốn và thường cần thiết trong nhiều tình huống trong đó các bảng chứa dữ liệu liên quan. Khả năng này để cơ sở dữ liệu dễ dàng kết nối và tham chiếu dữ liệu được lưu trữ trong các bảng riêng biệt là một trong những tính năng chính của cơ sở dữ liệu quan hệ

Ví dụ: bạn có thể có một bảng

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

2 để theo dõi các đơn đặt hàng riêng lẻ và một bảng

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

3 để theo dõi thông tin liên hệ và thông tin về khách hàng của bạn. Nên đặt thông tin này riêng biệt vì khách hàng có thể có nhiều đơn đặt hàng. Tuy nhiên, cũng hợp lý khi có thể dễ dàng liên kết các bản ghi trong hai bảng này để cho phép thực hiện các thao tác phức tạp hơn.

Cách tạo ràng buộc khóa ngoại trong MySQL

Hãy bắt đầu bằng cách cố gắng lập mô hình bảng

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

3

INSERT INTO qualified_borrowers VALUES (123, false);

5

Bảng này khá đơn giản. Nó bao gồm các cột để lưu trữ tên, họ và số điện thoại của khách hàng. Nó cũng chỉ định một cột ID sử dụng ràng buộc

ERROR 3819 (HY000): Check constraint 'loan_worthiness' is violated.

4. Bí danh

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

6 được sử dụng để tự động tạo ID tiếp theo trong chuỗi nếu ID không được chỉ định

Đối với bảng

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

2, chúng tôi muốn có thể chỉ định thông tin về các đơn đặt hàng riêng lẻ. Một phần dữ liệu thiết yếu là những gì khách hàng đã đặt hàng. Chúng ta có thể dùng khóa ngoại để liên kết đơn hàng với khách hàng mà không cần trùng lặp thông tin. Chúng tôi làm điều này với ràng buộc

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

8, xác định mối quan hệ khóa ngoại với một cột trong bảng khác

INSERT INTO qualified_borrowers VALUES (123, false);

6

Ở đây, chúng tôi đang chỉ ra rằng cột

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

9 trong bảng

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

2 có mối quan hệ khóa ngoại với cột

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

01 trong bảng

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

3

Chúng tôi phải đảm bảo rằng loại cột khóa ngoại tương thích với loại được sử dụng trong bảng ngoại. Cột

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

01 trong bảng

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

3 sử dụng bí danh

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

05, viết tắt của

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

06, vì vậy chúng tôi có thể sử dụng ____11_______07 làm kiểu dữ liệu của chúng tôi cho cột

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

9 trong bảng

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

2 để khớp

Nếu chúng tôi cố gắng chèn một giá trị vào bảng

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

2 không tham chiếu đến một khách hàng hợp lệ, MySQL sẽ từ chối giá trị đó

INSERT INTO qualified_borrowers VALUES (123, false);

7_______23_______8

Nếu chúng tôi thêm khách hàng trước, đơn đặt hàng của chúng tôi sau đó sẽ được hệ thống chấp nhận

INSERT INTO qualified_borrowers VALUES (123, false);

9_______14_______7

Mặc dù khóa chính là ứng cử viên tuyệt vời cho khóa ngoại vì nó đảm bảo chỉ khớp với một bản ghi, nhưng bạn cũng có thể sử dụng các cột khác miễn là chúng là duy nhất

Bạn cũng có thể sử dụng các tập hợp cột được đảm bảo là duy nhất

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

1

LIÊN QUAN ĐẾN PRISMA. IO

Chúng tôi trình bày cách xác định quan hệ trong lược đồ Prisma trong tài liệu của chúng tôi

Prisma là bộ công cụ cơ sở dữ liệu mã nguồn mở dành cho Typescript và Node. js nhằm mục đích giúp các nhà phát triển ứng dụng làm việc hiệu quả và tự tin hơn khi làm việc với cơ sở dữ liệu

Quyết định phải làm gì với khóa ngoại khi xóa hoặc cập nhật

Một điều bạn cần cân nhắc khi xác định các ràng buộc khóa ngoại là phải làm gì khi một giá trị bảng được tham chiếu bị xóa hoặc cập nhật

Ví dụ, chúng ta hãy xem lại các bảng

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

3 và

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

2. Chúng tôi cần chỉ định cách chúng tôi muốn hệ thống phản hồi khi chúng tôi xóa một khách hàng khỏi bảng

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

3 khi khách hàng có một đơn đặt hàng liên quan trong bảng

CREATE TABLE teenagers (

. . .

age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

. . .

);

2

Chúng ta có thể chọn giữa các tùy chọn sau

  • HẠN CHẾ. Chọn hạn chế xóa có nghĩa là MySQL sẽ từ chối xóa bản ghi

    CREATE TABLE teenagers (

    . . .

    age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

    . . .

    );

    9 nếu nó được tham chiếu bởi một bản ghi trong bảng

    CREATE TABLE teenagers (

    . . .

    age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

    . . .

    );

    2. Để xóa một khách hàng, trước tiên bạn phải xóa mọi bản ghi liên quan khỏi bảng

    CREATE TABLE teenagers (

    . . .

    age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

    . . .

    );

    2. Chỉ sau đó, bạn mới có thể xóa giá trị khỏi bảng khách hàng. Đây là hành động mặc định
  • THÁC. Chọn tùy chọn xếp tầng có nghĩa là khi chúng tôi xóa bản ghi

    CREATE TABLE teenagers (

    . . .

    age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

    . . .

    );

    9, các bản ghi tham chiếu nó trong bảng

    CREATE TABLE teenagers (

    . . .

    age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

    . . .

    );

    2 cũng bị xóa. Điều này hữu ích trong nhiều trường hợp nhưng phải được sử dụng cẩn thận để tránh xóa nhầm dữ liệu
  • KHÔNG CÓ HÀNH ĐỘNG. Mặc dù một số hệ thống cơ sở dữ liệu khác cho phép bạn trì hoãn kiểm tra với tùy chọn

    CREATE TABLE person (

    . . .

    age INT,

    . . .

    CHECK (age >= 0)

    );

    20, nhưng trong MySQL, điều này tương đương với

    CREATE TABLE person (

    . . .

    age INT,

    . . .

    CHECK (age >= 0)

    );

    21. Hệ thống sẽ từ chối yêu cầu cập nhật hoặc xóa
  • ĐẶT NULL. Tùy chọn này yêu cầu MySQL đặt các cột tham chiếu thành

    CREATE TABLE person (

    . . .

    age INT,

    . . .

    CHECK (age >= 0)

    );

    22 khi các bản ghi được tham chiếu bị xóa. Vì vậy, nếu chúng tôi xóa một khách hàng khỏi bảng

    CREATE TABLE teenagers (

    . . .

    age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

    . . .

    );

    3, cột

    CREATE TABLE teenagers (

    . . .

    age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

    . . .

    );

    9 trong bảng

    CREATE TABLE teenagers (

    . . .

    age INT CONSTRAINT is_teenager CHECK (age >= 13 AND age <= 19),

    . . .

    );

    2 sẽ được đặt thành

    CREATE TABLE person (

    . . .

    age INT,

    . . .

    CHECK (age >= 0)

    );

    22
  • ĐẶT MẶC ĐỊNH. Mặc dù một số hệ thống cơ sở dữ liệu khác cho phép bạn đặt cột thành giá trị mặc định trong trường hợp xóa hoặc cập nhật tham chiếu, MySQL thực tế không cho phép hành động này và sẽ không cho phép bạn xác định bảng bằng tùy chọn này

Những hành động này có thể được chỉ định khi xác định ràng buộc khóa ngoại bằng cách thêm

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

27 theo sau là hành động. Vì vậy, nếu chúng tôi muốn xóa các đơn đặt hàng được liên kết khỏi hệ thống của mình khi một khách hàng bị xóa, chúng tôi có thể chỉ định như thế này

ERROR 3819 (HY000): Check constraint 'qualified_borrowers_chk_1' is violated.

2

Những loại hành động này cũng có thể được áp dụng khi cập nhật một cột được tham chiếu thay vì xóa một cột bằng cách sử dụng

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

28 thay vì

CREATE TABLE person (

. . .

age INT,

. . .

CHECK (age >= 0)

);

27

Phần kết luận

Trong hướng dẫn này, chúng tôi đã đề cập đến các ràng buộc là gì và cách chúng có thể giúp bạn kiểm soát dữ liệu được nhập vào các bảng MySQL của bạn. Chúng tôi đã thảo luận về sự khác biệt giữa các ràng buộc cột và bảng và tính linh hoạt gia tăng được cung cấp bằng cách sử dụng định dạng bảng. Sau đó, chúng tôi đã xem xét những ràng buộc mà MySQL hỗ trợ và cách sử dụng chúng trong các bảng của bạn

Các ràng buộc giúp bạn xác định các yêu cầu chính xác của các cột trong bảng và do đó, chúng không thể thiếu trong nhiều tình huống. Hiểu cách thức hoạt động của các ràng buộc khác nhau và những kịch bản mà chúng giúp bạn ngăn chặn sẽ giúp ích rất nhiều trong việc đảm bảo rằng dữ liệu của bạn tuân thủ các tiêu chuẩn mà bạn yêu cầu. Sau khi được xác định, MySQL có thể giúp bạn tự động thực thi các ràng buộc để ngăn chặn sự cố trước khi chúng xảy ra

Ví dụ về ràng buộc cơ sở dữ liệu là gì?

Trong một bảng cơ sở dữ liệu, chúng ta có thể thêm các quy tắc vào một cột được gọi là các ràng buộc. Các quy tắc này kiểm soát dữ liệu có thể được lưu trữ trong một cột . Ví dụ: nếu một cột có ràng buộc NOT NULL, điều đó có nghĩa là cột đó không thể lưu trữ giá trị NULL. Các ràng buộc được sử dụng trong SQL là. Hạn chế.

Hai loại ràng buộc trong SQL là gì?

Các ràng buộc có thể là cấp độ cột hoặc cấp độ bảng . Ràng buộc cấp độ cột áp dụng cho một cột và ràng buộc cấp độ bảng áp dụng cho toàn bộ bảng.

Chúng ta có thể sử dụng 2 ràng buộc trong SQL không?

Nó có thể chấp nhận một giá trị NULL trong cột khóa duy nhất. Một bảng chỉ có thể có một ràng buộc PRIMARY KEY. Bạn có thể tạo nhiều ràng buộc UNIQUE KEY trong SQL Server .

Các ràng buộc tên tất cả các ràng buộc 2 là gì?

Các loại ràng buộc khác nhau là. .
Hạn chế duy nhất
Ràng buộc khóa chính
Ràng buộc mặc định
Kiểm tra ràng buộc
Ràng buộc bảng