Thông thường, các nhà phát triển cơ sở dữ liệu và quản trị viên sử dụng Nulls, Zeroes và Empty Strings thay thế cho nhau trong các bảng cơ sở dữ liệu của họ. Điều đó thật không may, bởi vì mỗi Null, Zero và một Chuỗi trống đại diện cho một cái gì đó khác nhau trong cơ sở dữ liệu quan hệ [RDBMS]. Như vậy, việc sử dụng các giá trị này không chính xác hoặc chọn sai giá trị có thể gây ra sự phân nhánh rất lớn đối với hoạt động của cơ sở dữ liệu và ứng dụng của bạn dựa trên nó. Trong blog hôm nay, chúng ta sẽ khám phá cách tận dụng tốt nhất Null, Zero và Empty String trong thiết kế cơ sở dữ liệu và sử dụng chung
Giá trị Null có một lịch sử lâu dài trong cả cơ sở dữ liệu quan hệ và ngôn ngữ lập trình. Nó được nghĩ ra như một giá trị đặc biệt để biểu thị sự vắng mặt có chủ ý của bất kỳ giá trị nào. Như vậy, nó có thể được gán cho bất kỳ cột nullable nào. Để chỉ định một cột là nullable, chỉ cần bao gồm từ khóa NULL hoặc chỉ cần bỏ nó đi, vì các cột là nullable theo mặc định
CREATE TABLE table_name [ column1 datatype [ NULL | NOT NULL ], column2 datatype [ NULL | NOT NULL ], .. ];
Navicat đơn giản hóa rất nhiều việc tạo bảng thông qua Trình thiết kế bảng của nó. Trong Navicat, để xác định rằng một cột có thể không chứa giá trị NULL, hãy chọn hộp kiểm Not null
Trong dạng xem Lưới bảng, các giá trị NULL được biểu diễn dưới dạng [Null]
Về mặt ngữ nghĩa, một giá trị bị thiếu thông báo cho chúng tôi rằng chúng tôi không biết nó. Nói một cách đơn giản hơn, Null có thể có nghĩa là "???". Như chúng ta sẽ thấy ngay sau đây, đây không phải là trường hợp đối với Số 0 hoặc Chuỗi trống
Giá trị của Không [0] là một số thực có ý nghĩa được chia sẻ bởi các thuật ngữ khác trên khắp thế giới, bao gồm vô nghĩa [Anh], vô nghĩa [Mỹ], không, zilch, zip, nada, scratch và goose egg. Giá trị của nó có thể được coi là "Không có gì". Xem xét một cột giới hạn tín dụng. Trong bối cảnh đó, giá trị 0. 00 sẽ chỉ ra rằng khách hàng không có tín dụng. Nếu cột là nullable, thì giá trị NULL có nghĩa là chúng tôi không biết giới hạn tín dụng của khách hàng là bao nhiêu. Trong trường hợp đầu tiên, chúng tôi biết giới hạn tín dụng của khách hàng là bao nhiêu và giới hạn đó bằng không
Trong Navicat, chúng ta có thể đặt giá trị mặc định của một cột thông qua trình đơn thả xuống Mặc định
Lưu ý rằng NULL là tùy chọn đầu tiên
Giống như Zero, Chuỗi rỗng [""] khác với giá trị NULL ở chỗ giá trị trước ngụ ý cụ thể rằng giá trị được đặt thành trống, trong khi NULL có nghĩa là giá trị không được cung cấp hoặc không xác định. Ví dụ, hãy xem xét một cột lưu số điện thoại di động. Giá trị trống có nghĩa là người đó không có điện thoại di động, trong khi giá trị NULL có nghĩa là người đó không cung cấp số điện thoại. Đây là hai cách hiểu rất khác nhau
Điều quan trọng đối với nhà phát triển và quản trị viên cơ sở dữ liệu là phải hiểu ngữ nghĩa của Nulls, Zeroes và Empty Strings vì việc sử dụng chúng không đúng cách hoặc chọn sai giá trị có thể gây ra sự phân nhánh lớn đối với hoạt động của cơ sở dữ liệu và các ứng dụng tương tác với nó
Cuối cùng, các máy khách Quản trị và Phát triển Cơ sở dữ liệu tạo điều kiện làm việc với Nulls, Zeroes và Empty Strings bằng cách cung cấp trình đơn thả xuống Mặc định và bằng cách biểu thị rõ ràng Nulls trong các bảng cơ sở dữ liệu
Mặc dù hầu hết các ứng dụng sẽ có một số dạng công nghệ phía máy chủ hoặc thậm chí phía máy khách có thể được sử dụng để lọc ra các kết quả truy vấn cơ sở dữ liệu có thể chứa giá trị
SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
4 hoặc giá trị trống, nhưng việc sử dụng ngôn ngữ khác và gánh nặng thực thi mã bổ sung đó thường tốn kém hơn cho Thay vào đó, bên dưới chúng ta sẽ khám phá ngắn gọn cách sử dụng chính công cụ MySQL để thực hiện tác vụ này, chỉ lấy các bản ghi mà bạn mong muốn trong khi loại trừ những bản ghi có cột
SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
4 phiền phức trong hỗn hợpIS NOT NULL Toán tử so sánh
Cho đến nay, phương pháp đơn giản và dễ hiểu nhất để đảm bảo tập kết quả của một cột cụ thể không chứa giá trị
SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
4 là sử dụng toán tử so sánh SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
7Ví dụ: nếu chúng tôi muốn chọn tất cả các bản ghi trong bảng
SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
8 trong đó cột SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
9 không phải là SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
4, truy vấn có thể trông như thế nàySELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
Vì
SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
7 hoạt động giống như bất kỳ bộ so sánh nào khác nên nó có thể được kết hợp với các mệnh đề id | title | primary_author | published_date
1 | The Hobbit | Tolkien | 09-21-1937
2 | The Silmarillion | Tolkien | 09-15-1977
3 | The Name of the Wind | Rothfuss | 03-27-2007
4 | The Wise Man's Fear | Rothfuss | 03-01-2011
5 | The Doors of Stone | Rothfuss | NULL
6 | Beowulf | NULL | 01-01-1000
1 khác để lọc thêm kết quả, giống như khi bạn đang sử dụng id | title | primary_author | published_date
1 | The Hobbit | Tolkien | 09-21-1937
2 | The Silmarillion | Tolkien | 09-15-1977
3 | The Name of the Wind | Rothfuss | 03-27-2007
4 | The Wise Man's Fear | Rothfuss | 03-01-2011
5 | The Doors of Stone | Rothfuss | NULL
6 | Beowulf | NULL | 01-01-1000
2, id | title | primary_author | published_date
1 | The Hobbit | Tolkien | 09-21-1937
2 | The Silmarillion | Tolkien | 09-15-1977
3 | The Name of the Wind | Rothfuss | 03-27-2007
4 | The Wise Man's Fear | Rothfuss | 03-01-2011
5 | The Doors of Stone | Rothfuss | NULL
6 | Beowulf | NULL | 01-01-1000
3, id | title | primary_author | published_date
1 | The Hobbit | Tolkien | 09-21-1937
2 | The Silmarillion | Tolkien | 09-15-1977
3 | The Name of the Wind | Rothfuss | 03-27-2007
4 | The Wise Man's Fear | Rothfuss | 03-01-2011
5 | The Doors of Stone | Rothfuss | NULL
6 | Beowulf | NULL | 01-01-1000
4, id | title | primary_author | published_date
1 | The Hobbit | Tolkien | 09-21-1937
2 | The Silmarillion | Tolkien | 09-15-1977
3 | The Name of the Wind | Rothfuss | 03-27-2007
4 | The Wise Man's Fear | Rothfuss | 03-01-2011
5 | The Doors of Stone | Rothfuss | NULL
6 | Beowulf | NULL | 01-01-1000
5 và các toán tử so sánh tiêu chuẩn khácLọc NULL từ nhiều cột
Trong một số trường hợp, bạn có thể muốn truy xuất kết quả khi không có giá trị
SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
4 nào trên nhiều cột. Ví dụ: chúng tôi có một số bản ghi trong bảng SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
8id | title | primary_author | published_date
1 | The Hobbit | Tolkien | 09-21-1937
2 | The Silmarillion | Tolkien | 09-15-1977
3 | The Name of the Wind | Rothfuss | 03-27-2007
4 | The Wise Man's Fear | Rothfuss | 03-01-2011
5 | The Doors of Stone | Rothfuss | NULL
6 | Beowulf | NULL | 01-01-1000
Hãy lưu ý rằng The Doors of Stone [
id | title | primary_author | published_date
1 | The Hobbit | Tolkien | 09-21-1937
2 | The Silmarillion | Tolkien | 09-15-1977
3 | The Name of the Wind | Rothfuss | 03-27-2007
4 | The Wise Man's Fear | Rothfuss | 03-01-2011
5 | The Doors of Stone | Rothfuss | NULL
6 | Beowulf | NULL | 01-01-1000
8] chưa được xuất bản và do đó, id | title | primary_author | published_date
1 | The Hobbit | Tolkien | 09-21-1937
2 | The Silmarillion | Tolkien | 09-15-1977
3 | The Name of the Wind | Rothfuss | 03-27-2007
4 | The Wise Man's Fear | Rothfuss | 03-01-2011
5 | The Doors of Stone | Rothfuss | NULL
6 | Beowulf | NULL | 01-01-1000
9 là SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
4. Tương tự, Beowulf [SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
01] – thiên anh hùng ca cổ nổi tiếng của Anh – không rõ tác giả, vì vậy SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
9 là SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
4Trong trường hợp này, chúng tôi có thể muốn truy vấn các kết quả chỉ chứa bốn bản ghi đầu tiên, do đó loại trừ hai bản ghi cuối cùng có giá trị
SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
4 trong SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
9 hoặc id | title | primary_author | published_date
1 | The Hobbit | Tolkien | 09-21-1937
2 | The Silmarillion | Tolkien | 09-15-1977
3 | The Name of the Wind | Rothfuss | 03-27-2007
4 | The Wise Man's Fear | Rothfuss | 03-01-2011
5 | The Doors of Stone | Rothfuss | NULL
6 | Beowulf | NULL | 01-01-1000
9. Điều này có thể được thực hiện với câu lệnh đơn giản này bằng cách sử dụng SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
07 với nhiều toán tử so sánhSELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
0Ghi chú. Dấu ngoặc đơn không bắt buộc nhưng nên đặt các bộ so sánh được nhóm lại để dễ đọc hơn
Ở đó bạn có nó;