Bỏ ràng buộc duy nhất từ ​​bảng MySQL


Câu trả lời:


344

Một ràng buộc duy nhất cũng là một chỉ số.

Đầu tiên sử dụng SHOW INDEX FROM tbl_nameđể tìm ra tên của chỉ mục. Tên của chỉ mục được lưu trữ trong cột được gọi key_nametrong kết quả của truy vấn đó.

Sau đó, bạn có thể sử dụng DROP INDEX :

DROP INDEX index_name ON tbl_name

hoặc cú pháp ALTER TABLE :

ALTER TABLE tbl_name DROP INDEX index_name

1
Xin lỗi ngài, tôi đã thử nó trước khi đưa ra câu hỏi, nhưng nó không hoạt động
Ankur Mukherjee

@Ankur Mukherjee: Tôi quên đề cập: Bạn phải thay đổi tbl_name và index_name thành tên của bảng thực tế của bạn và tên của chỉ mục thực tế, tương ứng. Bạn có thể thấy tên trong Trình duyệt truy vấn MySQL. Bạn cũng có thể làm SHOW CREATE TABLE tbl_name.
Mark Byers

Thông báo lỗi: "Bạn có lỗi trong cú pháp SQL của mình; hãy kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn để biết đúng cú pháp để sử dụng gần '(player_id, năm, giải đấu)' ở dòng 1"
Ankur Mukherjee

1
@Ankur Mukherjee: Theo cách tôi đã đề xuất là theo cách tốt nhất để làm điều đó.
Mark Byers

1
Tôi đã đọc ở đâu đó trong câu hỏi bằng cách sử dụng phpMyAdmin ... Câu trả lời được cung cấp bởi @systemovich phải được đánh dấu là câu hỏi được chấp nhận.
Pere

123

Bạn có thể DROPmột ràng buộc duy nhất từ ​​một bảng bằng cách sử dụng phpMyAdmin theo yêu cầu như được hiển thị trong bảng bên dưới. Một ràng buộc duy nhất đã được đặt trên trường Sải cánh. Tên của ràng buộc giống như tên trường, trong trường hợp này.

văn bản thay thế


34
Điều quan trọng cần lưu ý là phần chỉ mục được thu gọn theo mặc định và được mở rộng bằng một liên kết nhỏ, tinh tế trong phông chữ 12px trong đó phần nằm trong ảnh chụp màn hình. Nhưng nhờ có bạn, tôi đã tìm thấy nó. Ban phước cho khuôn mặt của bạn +1
Jack

11

Các chỉ mục có khả năng đặt một ràng buộc khóa duy nhất trên một bảng là PRIMARYUNIQUEcác chỉ mục.

Để loại bỏ ràng buộc khóa duy nhất trên một cột nhưng vẫn giữ chỉ mục, bạn có thể xóa và tạo lại chỉ mục với loại INDEX.

Lưu ý rằng tất cả các bảng đều có một chỉ mục được đánh dấu PRIMARY.


2
Được nâng cấp bởi vì @thomasrutter đã chạm vào thực tế là việc loại bỏ một ràng buộc duy nhất có thể ảnh hưởng xấu đến hiệu suất truy vấn - và điều này có thể được giảm thiểu bằng cách thay thế UNIQUEchỉ mục bằng một quy tắc thông thường INDEX.
Alex

4

Để thêm ràng buộc UNIITE bằng phpmyadmin, hãy đi đến cấu trúc của bảng đó và tìm bên dưới và nhấp vào đó,

nhập mô tả hình ảnh ở đây

Để loại bỏ ràng buộc UNIITE, theo cách tương tự, đi đến cấu trúc và cuộn xuống cho đến Tab Indexes và tìm bên dưới và nhấp thả, nhập mô tả hình ảnh ở đây

Hy vọng điều này làm việc.

Thưởng thức ;)


giải pháp này chính xác là những gì tôi đang tìm kiếm.
Aryeh Beitz

2

Đối với WAMP 3.0: Nhấp vào Cấu trúc bên dưới Thêm 1 cột bạn sẽ thấy '- Chỉ mục nhấp chuột - Chỉ mục và thả bất kỳ chỉ mục nào bạn muốn.


2

Nếu bạn muốn loại bỏ các ràng buộc duy nhất khỏi bảng cơ sở dữ liệu mysql, hãy sử dụng bảng thay đổi với chỉ mục thả.

Thí dụ:

tạo bảng unique_constraint (unid int, Activity_name varchar (100), CONSTRAINT activty_uqniue UNIQUE (Activity_name), khóa chính (unid));

alter table unique_constraints drop index activty_uqniue;

Trong đó activty_uqniue là ràng buộc ĐỘC ĐÁO cho cột Activity_name .


0

Trong khi thả khóa duy nhất, chúng tôi sử dụng chỉ mục

ALTER TABLE tbl
DROP INDEX  unique_address;

0

Các ràng buộc có thể được loại bỏ bằng cú pháp:

BẢNG BẢNG

Kể từ MySQL 8.0.19, ALTER TABLE cho phép cú pháp chung hơn (và tiêu chuẩn SQL) để loại bỏ và thay đổi các ràng buộc hiện có của bất kỳ loại nào, trong đó loại ràng buộc được xác định từ tên ràng buộc: ALTER TABLE tbl_name DROP CONSTRAINT symbol;

Thí dụ:

CREATE TABLE tab(id INT, CONSTRAINT unq_tab_id UNIQUE(id));

-- checking constraint name if autogenerated
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'tab';

-- dropping constraint
ALTER TABLE tab DROP CONSTRAINT unq_tab_id;

db <> fiddle demo


-3

Tên bảng của tôi là người mua có cột ràng buộc duy nhất emp_id bây giờ tôi sẽ bỏ emp_id

Bước 1: thực hiện người mua sp_helpindex, xem tệp hình ảnh

Bước 2: sao chép địa chỉ chỉ mục

nhập mô tả hình ảnh ở đây

bước 3: thay đổi ràng buộc thả người mua bảng [UQ__buyers__1299A860D9793F2E] thay đổi người mua bảng thả cột emp_id

Ghi chú:

Blockquote

thay vì người mua thay đổi nó thành tên bảng của bạn :)

Blockquote

đó là tất cả tên cột emp_id với các ràng buộc bị loại bỏ!


-5
  1. Bảng xóa đầu tiên

  2. đi đến SQL

Sử dụng mã này:

CREATE  TABLE service( --tablename 
  `serviceid` int(11) NOT NULL,--columns
  `customerid` varchar(20) DEFAULT NULL,--columns
  `dos` varchar(30) NOT NULL,--columns
  `productname` varchar(150) NOT NULL,--columns
  `modelnumber` bigint(12) NOT NULL,--columns
  `serialnumber` bigint(20) NOT NULL,--columns
  `serviceby` varchar(20) DEFAULT NULL--columns
)
--INSERT VALUES
INSERT INTO `service` (`serviceid`, `customerid`, `dos`, `productname`, `modelnumber`, `serialnumber`, `serviceby`) VALUES
(1, '1', '12/10/2018', 'mouse', 1234555, 234234324, '9999'),
(2, '09', '12/10/2018', 'vhbgj', 79746385, 18923984, '9999'),
(3, '23', '12/10/2018', 'mouse', 123455534, 11111123, '9999'),
(4, '23', '12/10/2018', 'mouse', 12345, 84848, '9999'),
(5, '546456', '12/10/2018', 'ughg', 772882, 457283, '9999'),
(6, '23', '12/10/2018', 'keyboard', 7878787878, 22222, '1'),
(7, '23', '12/10/2018', 'java', 11, 98908, '9999'),
(8, '128', '12/10/2018', 'mouse', 9912280626, 111111, '9999'),
(9, '23', '15/10/2018', 'hg', 29829354, 4564564646, '9999'),
(10, '12', '15/10/2018', '2', 5256, 888888, '9999');
--before droping table
ALTER TABLE `service`
  ADD PRIMARY KEY (`serviceid`),
  ADD  unique`modelnumber` (`modelnumber`),
  ADD  unique`serialnumber` (`serialnumber`),
  ADD unique`modelnumber_2` (`modelnumber`);
--after droping table
ALTER TABLE `service`
  ADD PRIMARY KEY (`serviceid`),
  ADD  modelnumber` (`modelnumber`),
  ADD  serialnumber` (`serialnumber`),
  ADD modelnumber_2` (`modelnumber`);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.