Hướng dẫn are mysql unique keys case - là trường hợp khóa duy nhất của mysql

Tôi đang cố gắng điền vào bảng SQL với danh sách các từ. Bản thân bảng nó khá đơn giản:

CREATE TABLE WORDS(
  ID BIGINT AUTO_INCREMENT, 
  WORD VARCHAR(128) NOT NULL UNIQUE, 
  PRIMARY KEY(ID)
);

Vấn đề tôi gặp phải là thế này: khi tôi thực hiện các phần sau đó để quay lại

INSERT INTO WORDS(WORD) VALUES('Seth');
INSERT INTO WORDS(WORD) VALUES('seth');

Chèn thứ hai không thành công với vi phạm ràng buộc ("mục nhập sao chép 'seth' cho khóa 'từ'").

Làm thế nào tôi có thể nhận được ràng buộc

INSERT INTO WORDS(WORD) VALUES('Seth');
INSERT INTO WORDS(WORD) VALUES('seth');
7 trên
INSERT INTO WORDS(WORD) VALUES('Seth');
INSERT INTO WORDS(WORD) VALUES('seth');
8 để nhạy cảm trường hợp?

Hướng dẫn are mysql unique keys case - là trường hợp khóa duy nhất của mysql

OMG Ponies

319K79 Huy hiệu vàng512 Huy hiệu bạc496 Huy hiệu Đồng79 gold badges512 silver badges496 bronze badges

Đã hỏi ngày 23 tháng 6 năm 2011 lúc 2:51Jun 23, 2011 at 2:51

Có vẻ như MySQL là trường hợp không nhạy cảm theo mặc định:

Bạn có thể cần phải tạo cột với đối chiếu nhạy cảm trường hợp (ví dụ: UTF8_BIN):

CREATE TABLE WORDS (
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
    PRIMARY KEY(ID)
);

Đã trả lời ngày 23 tháng 6 năm 2011 lúc 2:58Jun 23, 2011 at 2:58

Bill Braskybill BraskyBill Brasky

2.5142 Huy hiệu vàng18 Huy hiệu bạc20 Huy hiệu Đồng2 gold badges18 silver badges20 bronze badges

8

Theo mặc định, MySQL bỏ qua sự khác biệt trong trường hợp và không gian theo dõi trên

INSERT INTO WORDS(WORD) VALUES('Seth');
INSERT INTO WORDS(WORD) VALUES('seth');
9.

Nếu bạn cần nó nhạy cảm trường hợp, bạn có thể thay đổi bảng thành

CREATE TABLE WORDS (
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
    PRIMARY KEY(ID)
);
0.

Sử dụng

CREATE TABLE WORDS (
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
    PRIMARY KEY(ID)
);
1 để hiểu rõ hơn về cách MySQL chuyển đổi điều này thành ký hiệu đầy đủ.

Nếu bạn cần chú ý đến các không gian theo dõi cũng như nhạy cảm trường hợp, hãy sử dụng

CREATE TABLE WORDS (
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
    PRIMARY KEY(ID)
);
2 thay vì
INSERT INTO WORDS(WORD) VALUES('Seth');
INSERT INTO WORDS(WORD) VALUES('seth');
9.

Đã trả lời ngày 1 tháng 6 năm 2015 lúc 16:14Jun 1, 2015 at 16:14

Hướng dẫn are mysql unique keys case - là trường hợp khóa duy nhất của mysql

Phần mềm 700 phần mềm700700 Software

82,8K80 Huy hiệu vàng227 Huy hiệu bạc334 Huy hiệu đồng80 gold badges227 silver badges334 bronze badges

Thử cái này:

ALTER TABLE WORDS CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;

Đã trả lời ngày 1 tháng 12 năm 2020 lúc 9:44Dec 1, 2020 at 9:44

Hướng dẫn are mysql unique keys case - là trường hợp khóa duy nhất của mysql

Tôi đã thực hiện varchar chính duy nhất của mình (1000). Nó đã làm việc.

Sau một số thử nghiệm và lỗi, tôi thấy bất cứ điều gì lớn hơn hoặc bằng 1100 Varchar sẽ thất bại.

Để làm rõ tôi đã không thử từ 1001 đến 1099.

Hi vọng điêu nay co ich.

Đã trả lời ngày 6 tháng 10 năm 2017 lúc 2:25Oct 6, 2017 at 2:25

24.6.1 & NBSP; Khóa phân vùng, khóa chính và khóa duy nhất

Phần này thảo luận về mối quan hệ của các khóa phân vùng với các khóa chính và các khóa duy nhất. Quy tắc quản lý mối quan hệ này có thể được thể hiện như sau: Tất cả các cột được sử dụng trong biểu thức phân vùng cho một bảng được phân vùng phải là một phần của mọi khóa duy nhất mà bảng có thể có.

Nói cách khác, mọi khóa duy nhất trên bảng phải sử dụng mọi cột trong biểu thức phân vùng của bảng. .every unique key on the table must use every column in the table's partitioning expression. (This also includes the table's primary key, since it is by definition a unique key. This particular case is discussed later in this section.) For example, each of the following table creation statements is invalid:

CREATE TABLE t1 (
    col1 INT NOT NULL,
    col2 DATE NOT NULL,
    col3 INT NOT NULL,
    col4 INT NOT NULL,
    UNIQUE KEY (col1, col2)
)
PARTITION BY HASH(col3)
PARTITIONS 4;

CREATE TABLE t2 (
    col1 INT NOT NULL,
    col2 DATE NOT NULL,
    col3 INT NOT NULL,
    col4 INT NOT NULL,
    UNIQUE KEY (col1),
    UNIQUE KEY (col3)
)
PARTITION BY HASH(col1 + col3)
PARTITIONS 4;

Trong mỗi trường hợp, bảng được đề xuất sẽ có ít nhất một khóa duy nhất không bao gồm tất cả các cột được sử dụng trong biểu thức phân vùng.

Mỗi câu sau đây là hợp lệ và thể hiện một cách mà câu lệnh tạo bảng không hợp lệ tương ứng có thể được thực hiện để hoạt động:

CREATE TABLE t1 (
    col1 INT NOT NULL,
    col2 DATE NOT NULL,
    col3 INT NOT NULL,
    col4 INT NOT NULL,
    UNIQUE KEY (col1, col2, col3)
)
PARTITION BY HASH(col3)
PARTITIONS 4;

CREATE TABLE t2 (
    col1 INT NOT NULL,
    col2 DATE NOT NULL,
    col3 INT NOT NULL,
    col4 INT NOT NULL,
    UNIQUE KEY (col1, col3)
)
PARTITION BY HASH(col1 + col3)
PARTITIONS 4;

Ví dụ này cho thấy lỗi được tạo ra trong các trường hợp như vậy:

mysql> CREATE TABLE t3 (
    ->     col1 INT NOT NULL,
    ->     col2 DATE NOT NULL,
    ->     col3 INT NOT NULL,
    ->     col4 INT NOT NULL,
    ->     UNIQUE KEY (col1, col2),
    ->     UNIQUE KEY (col3)
    -> )
    -> PARTITION BY HASH(col1 + col3)
    -> PARTITIONS 4;
ERROR 1491 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function

Câu lệnh

CREATE TABLE WORDS (
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
    PRIMARY KEY(ID)
);
4 không thành công vì cả
CREATE TABLE WORDS (
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
    PRIMARY KEY(ID)
);
5 và
CREATE TABLE WORDS (
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
    PRIMARY KEY(ID)
);
6 đều được bao gồm trong khóa phân vùng đề xuất, nhưng cả hai cột này đều không phải là một phần của cả hai khóa duy nhất trên bảng. Điều này hiển thị một bản sửa lỗi có thể cho định nghĩa bảng không hợp lệ:

mysql> CREATE TABLE t3 (
    ->     col1 INT NOT NULL,
    ->     col2 DATE NOT NULL,
    ->     col3 INT NOT NULL,
    ->     col4 INT NOT NULL,
    ->     UNIQUE KEY (col1, col2, col3),
    ->     UNIQUE KEY (col3)
    -> )
    -> PARTITION BY HASH(col3)
    -> PARTITIONS 4;
Query OK, 0 rows affected (0.05 sec)

Trong trường hợp này, khóa phân vùng được đề xuất

CREATE TABLE WORDS (
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
    PRIMARY KEY(ID)
);
6 là một phần của cả hai khóa duy nhất và câu lệnh tạo bảng thành công.

Bảng sau đây không thể được phân vùng, bởi vì không có cách nào để đưa vào khóa phân vùng bất kỳ cột nào thuộc về cả hai khóa duy nhất:

CREATE TABLE t4 (
    col1 INT NOT NULL,
    col2 INT NOT NULL,
    col3 INT NOT NULL,
    col4 INT NOT NULL,
    UNIQUE KEY (col1, col3),
    UNIQUE KEY (col2, col4)
);

Vì mỗi khóa chính là theo định nghĩa, một khóa duy nhất, hạn chế này cũng bao gồm khóa chính của bảng, nếu nó có. Ví dụ: hai câu tiếp theo không hợp lệ:

CREATE TABLE t5 (
    col1 INT NOT NULL,
    col2 DATE NOT NULL,
    col3 INT NOT NULL,
    col4 INT NOT NULL,
    PRIMARY KEY(col1, col2)
)
PARTITION BY HASH(col3)
PARTITIONS 4;

CREATE TABLE t6 (
    col1 INT NOT NULL,
    col2 DATE NOT NULL,
    col3 INT NOT NULL,
    col4 INT NOT NULL,
    PRIMARY KEY(col1, col3),
    UNIQUE KEY(col2)
)
PARTITION BY HASH( YEAR(col2) )
PARTITIONS 4;

Trong cả hai trường hợp, khóa chính không bao gồm tất cả các cột được tham chiếu trong biểu thức phân vùng. Tuy nhiên, cả hai câu tiếp theo đều hợp lệ:

INSERT INTO WORDS(WORD) VALUES('Seth');
INSERT INTO WORDS(WORD) VALUES('seth');
0

Nếu một bảng không có các phím duy nhất, thì điều này bao gồm không có khóa chính thì việc hạn chế này không áp dụng và bạn có thể sử dụng bất kỳ cột hoặc cột nào trong biểu thức phân vùng miễn là loại cột tương thích với loại phân vùng.

Vì lý do tương tự, sau này bạn không thể thêm một khóa duy nhất vào bảng được phân vùng trừ khi khóa bao gồm tất cả các cột được sử dụng bởi biểu thức phân vùng của bảng. Xem xét bảng được phân vùng được tạo như hiển thị ở đây:

INSERT INTO WORDS(WORD) VALUES('Seth');
INSERT INTO WORDS(WORD) VALUES('seth');
1

Có thể thêm một khóa chính vào

CREATE TABLE WORDS (
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
    PRIMARY KEY(ID)
);
8 bằng cách sử dụng một trong hai câu lệnh này:

INSERT INTO WORDS(WORD) VALUES('Seth');
INSERT INTO WORDS(WORD) VALUES('seth');
2

Tuy nhiên, câu lệnh tiếp theo thất bại, vì

ALTER TABLE WORDS CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
0 là một phần của khóa phân vùng, nhưng không phải là một phần của khóa chính được đề xuất:

INSERT INTO WORDS(WORD) VALUES('Seth');
INSERT INTO WORDS(WORD) VALUES('seth');
3

CREATE TABLE WORDS (
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
    PRIMARY KEY(ID)
);
8 chỉ có
ALTER TABLE WORDS CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
0 trong biểu thức phân vùng của nó, cố gắng thêm một khóa duy nhất trên
ALTER TABLE WORDS CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
3 một mình thất bại. Tuy nhiên, bạn có thể thêm một khóa duy nhất sử dụng cả
ALTER TABLE WORDS CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
0 và
ALTER TABLE WORDS CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
3.

Các quy tắc này cũng áp dụng cho các bảng không phân chia hiện có mà bạn muốn phân vùng bằng cách sử dụng

ALTER TABLE WORDS CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
6. Xem xét một bảng
ALTER TABLE WORDS CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
7 được tạo như hiển thị ở đây:

INSERT INTO WORDS(WORD) VALUES('Seth');
INSERT INTO WORDS(WORD) VALUES('seth');
4

Câu lệnh

CREATE TABLE WORDS (
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
    PRIMARY KEY(ID)
);
9 sau đây không bị lỗi, vì cột
ALTER TABLE WORDS CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
9 không phải là một phần của bất kỳ khóa duy nhất nào trong bảng:

INSERT INTO WORDS(WORD) VALUES('Seth');
INSERT INTO WORDS(WORD) VALUES('seth');
5

Tuy nhiên, câu lệnh này sử dụng cột

CREATE TABLE t1 (
    col1 INT NOT NULL,
    col2 DATE NOT NULL,
    col3 INT NOT NULL,
    col4 INT NOT NULL,
    UNIQUE KEY (col1, col2)
)
PARTITION BY HASH(col3)
PARTITIONS 4;

CREATE TABLE t2 (
    col1 INT NOT NULL,
    col2 DATE NOT NULL,
    col3 INT NOT NULL,
    col4 INT NOT NULL,
    UNIQUE KEY (col1),
    UNIQUE KEY (col3)
)
PARTITION BY HASH(col1 + col3)
PARTITIONS 4;
0 cho cột phân vùng là hợp lệ, như được hiển thị ở đây:

INSERT INTO WORDS(WORD) VALUES('Seth');
INSERT INTO WORDS(WORD) VALUES('seth');
6

Trong trường hợp

ALTER TABLE WORDS CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
7, cột duy nhất có thể được sử dụng như một phần của biểu thức phân vùng là
CREATE TABLE t1 (
    col1 INT NOT NULL,
    col2 DATE NOT NULL,
    col3 INT NOT NULL,
    col4 INT NOT NULL,
    UNIQUE KEY (col1, col2)
)
PARTITION BY HASH(col3)
PARTITIONS 4;

CREATE TABLE t2 (
    col1 INT NOT NULL,
    col2 DATE NOT NULL,
    col3 INT NOT NULL,
    col4 INT NOT NULL,
    UNIQUE KEY (col1),
    UNIQUE KEY (col3)
)
PARTITION BY HASH(col1 + col3)
PARTITIONS 4;
0; Nếu bạn muốn phân vùng bảng này bằng bất kỳ cột hoặc cột nào khác trong biểu thức phân vùng, trước tiên bạn phải sửa đổi bảng, bằng cách thêm cột hoặc cột mong muốn vào khóa chính hoặc bằng cách bỏ hoàn toàn khóa chính.

Các phím độc đáo của MySQL có nhạy cảm không?

Tên khóa duy nhất là nhạy cảm trường hợp.Ví dụ: xem xét một thùng chứa có ràng buộc khóa duy nhất được đặt thành /địa chỉ /mã zipcode.. For example, consider a container with the unique key constraint set to /address/zipcode .

MYSQL có phải là khóa chính duy nhất không?

Biên giới chính bị ràng buộc xác định duy nhất từng bản ghi trong một bảng.Các khóa chính phải chứa các giá trị duy nhất và không thể chứa các giá trị null.Một bảng chỉ có thể có một khóa chính;Và trong bảng, khóa chính này có thể bao gồm một hoặc nhiều cột (trường).Primary keys must contain UNIQUE values, and cannot contain NULL values. A table can have only ONE primary key; and in the table, this primary key can consist of single or multiple columns (fields).

MySQL Varchar có nhạy cảm không?

Các loại char và varchar không nhạy cảm với trường hợp theo mặc định, nhưng có thể được khai báo là nhị phân để làm cho chúng trở nên nhạy cảm.Các cột Enum, Set và văn bản không nhạy cảm trường hợp.not case sensitive by default, but may be declared as BINARY to make them case sensitive. ENUM , SET , and TEXT columns are not case sensitive.

MySQL chọn trường hợp có nhạy cảm không?

Theo mặc định, nó phụ thuộc vào hệ điều hành và độ nhạy trường hợp của nó.Điều này có nghĩa là MySQL không nhạy cảm trường hợp trong Windows và MacOS, trong khi nó nhạy cảm với trường hợp trong hầu hết các hệ thống Linux.Tuy nhiên, bạn có thể thay đổi hành vi bằng cách thay đổi đối chiếu.MySQL is case-insensitive in Windows and macOS, while it is case-sensitive in most Linux systems. However, you can change the behavior by changing collation.