2012-11-25 23 views
5

Hiện nay tôi có bảng này trong DB của tôi:MySQL độc đáo cột chuỗi

CREATE TABLE `twMCUserDB` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `mc_userName` text NOT NULL, 
    `mc_userPass` text NOT NULL, 
    `tw_userName` text NOT NULL, 
    `tw_userPass` text NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; 

Bây giờ những gì tôi muốn làm là cột mc_userName sẽ là duy nhất để (giống như id). Nhưng mc_userName phải là một chuỗi.

Bây giờ đã làm tôi đã cố gắng để làm cho nó cũng khóa chính, nhưng điều đó không làm việc ...

Vì vậy, câu hỏi của tôi đến với bạn là như sau:

Khi tôi thêm dữ liệu vào bảng, trước tiên tôi có phải kiểm tra xem mc_userName đã tồn tại chưa? Hoặc là có bất kỳ chức năng được xây dựng trong Mysql, mà tôi có thể sử dụng (như trong truy vấn chèn hoặc ở một nơi khác)

Trả lời

6

chỉ cần thêm UNIQUE

`mc_userName` text NOT NULL UNIQUE, 

hoặc

CREATE TABLE `twMCUserDB` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `mc_userName` text NOT NULL, 
    `mc_userPass` text NOT NULL, 
    `tw_userName` text NOT NULL, 
    `tw_userPass` text NOT NULL, 
    PRIMARY KEY (`id`), 
    CONSTRAINT tb_uq UNIQUE (mc_userName) 
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; 
+0

Làm thế nào tôi có thể thêm rằng UNIQUE để colum hơn? Tôi đang sử dụng Navicat làm trình soạn thảo cơ sở dữ liệu và phpmyadmin, nhưng không thể tìm thấy thứ gì có thể xử lý được ... – Mathlight

+0

bạn có thể thử thay đổi bảng bằng cách chạy DDL này: 'ALTER TABLE twMCUserDB ADD UNIQUE tb_uq (mc_userName)' –

+0

Điều đó trả về điều này: '[Err] 1170 - BLOB/TEXT cột 'mc_userName' được sử dụng trong đặc tả khóa không có độ dài khóa ' – Mathlight

1

Tại sao bạn không đặt 'mc_userName' là khóa chính thay vì id? Bạn sẽ phải thay đổi kiểu dữ liệu của mc_userName thành VARCHAR như được mô tả trong bài đăng này: MySQL error: key specification without a key length. Ngoài ra, hãy tạo khóa chính bao gồm id và tên người dùng.

Nếu bạn không thể thực hiện việc này do thiết kế cơ sở dữ liệu, hãy sử dụng từ khóa EXISTS trong truy vấn. Có một cái nhìn vào đây để biết thêm thông tin: http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html

+0

Tôi không thể làm điều đó, bởi vì tôi nhận được lỗi 'MySQL Lỗi 1170: BLOB/TEXT Cột được sử dụng trong Thông số kỹ thuật chính Nếu không có độ dài khóa ... Và tôi sẽ xem xét liên kết đó – Mathlight

+0

Bạn không thể làm gì? – w0051977

+0

xin lỗi, tôi có nghĩa là phần đầu tiên ... Làm mc_userName khóa chính thay vì id .... tôi nhận được lỗi tôi nói trên – Mathlight