2012-08-09 37 views
6

Tôi mới dùng h2.I chỉ sử dụng h2 ở chế độ nhúng mùa xuân với hibernate.I đang cố gắng thực thi các tập lệnh sau bằng h2.Tạo bảng với cơ sở dữ liệu h2

CREATE TABLE acct_authority (
    id bigint(20) NOT NULL auto_increment, 
    name varchar(255) NOT NULL default '', 
    value varchar(255) NOT NULL, 
    PRIMARY KEY (id), 
    UNIQUE KEY name (name) 
); 

Bảng acct_authority được tạo mà không có bất kỳ lỗi nào. Nhưng nếu tôi tạo một bảng khác với tập lệnh sau.

CREATE TABLE acct_role (
    id bigint(20) NOT NULL auto_increment, 
    name varchar(255) NOT NULL default '', 
    PRIMARY KEY (id), 
    UNIQUE KEY name (name) 
); 

Nó hiển thị lỗi như tên hạn chế allready tồn tại.Điều gì sai lầm tôi đã làm.

Trả lời

10

Bạn đã cố gắng tạo hai ràng buộc có cùng tên. Như bạn thấy, cả hai CREATE TABLE báo cáo chứa sau:

UNIQUE KEY name (name) 

Kết quả là người đầu tiên tạo ra hạn chế tên tên, và thứ hai thất bại vì ngại tên đã tồn tại. Vấn đề có thể được giải quyết bằng cách sử dụng tên duy nhất. Nói chung, nó có ý nghĩa có tên mô tả ít hơn một chút cho các đối tượng cơ sở dữ liệu. Có thể bạn có thể sử dụng ví dụ như một cái gì đó như sau:

UNIQUE KEY acct_authority_name_UNIQUE (name) 
    ... 
    UNIQUE KEY acct_role_name_UNIQUE (name) 
+2

Vâng, đó là vấn đề. Tôi chỉ muốn thêm vào, cơ sở dữ liệu duy nhất mà tôi biết hỗ trợ các tên ràng buộc không duy nhất là MySQL (ở đó, các tên ràng buộc chỉ cần duy nhất trong một bảng). Tất cả các cơ sở dữ liệu khác yêu cầu các tên ràng buộc là duy nhất trong một lược đồ. –

Các vấn đề liên quan