2011-02-16 92 views
0

我目前在大學註冊MYSQL類。我們的老師認爲最好的教學方式是讓學生自學。我需要爲班級創建表格清單,但我有重複錯誤。這是我的代碼。重複錯誤

CREATE TABLE INVENTORY 
(BOOK_CODE CHAR(4) PRIMARY KEY, 
BRANCH_NUM DECIMAL (2,0) NOT NULL, 
ON_HAND DECIMAL (2,0)); 

由於列表很長,因此只有3個項目。如果我能理解這個概念,那麼它真的不應該成爲一個問題。

INSERT INTO INVENTORY 
VALUES 
('079X','2','1'); 
INSERT INTO INVENTORY 
VALUES 
('079X','3','2'); 
INSERT INTO INVENTORY 
VALUES 
('079X','4','3'); 

第一個值指的是書名,其次是分行號,然後是每個分行的可用書籍。

我也必須能夠看到值,所以我不能忽視它們。防爆。我需要從select命令中看到它們。

+0

whats'079X'for? – Matt 2011-02-16 13:31:26

回答

1

BOOK_CODEPRIMARY KEY,它需要是唯一的。

,並嘗試插入相同的值079X

這樣的工作做類似

INSERT INTO INVENTORY 
VALUES 
('079X','2','1'); 
INSERT INTO INVENTORY 
VALUES 
('080X','3','2'); 
INSERT INTO INVENTORY 
VALUES 
('081X','4','3'); 

閱讀more

主鍵是一個獨特的索引,其中, 所有鍵列必須定義爲NOT NULL。如果它們不是明確地 聲明爲NOT NULL,那麼MySQL聲明 它們隱式地(並且默默地)。 A 表只能有一個主鍵。 如果您沒有PRIMARY KEY並且 應用程序要求您的表中的PRIMARY KEY,那麼MySQL將返回 第一個沒有NULL 列的UNIQUE索引作爲PRIMARY KEY。

+0

只是給一個作業問題的答案?多數民衆贊成在沒有樂趣:p – Matt 2011-02-16 13:32:35

+0

079x是書的代碼,所以我不能改變 – TIm 2011-02-16 13:33:13

+0

使鑰匙從兩個字段BOOK_CODE + BRANCH_NUM,看看如何http://www.mysqlfaqs.net/mysql-faqs/Indexes/Primary-Key -Indexes/How-to-create-multi-column-primary-key-index-in-MySQL – 2011-02-16 13:36:09

1

表的PRIMARY KEY表示在該表中只能有一個具有該特定值(或值組合)的單個條目/行。

因此插入'079x' 3次不會使它唯一。

看一看Primary Key Definition

定義:關係表的主鍵唯一地標識 表中的每個記錄。它可以 或者是一個正常的屬性,它是 保證唯一性(如 社會安全號碼與人均 不超過一個記錄表)或 它可以通過DBMS(而生成的此類 作爲一個全球唯一標識符或Microsoft SQL Server中的GUID)。主鍵可以由單個 屬性或 組合中的多個屬性組成。

1

您的BOOK_CODE被標記爲主鍵,因此它需要具有標識每一行的唯一值。

聽起來像BOOK_CODE不能唯一標識一行,但BOOK_CODE和BRANCH_NUM的組合。

然後,您可以這樣做:

CREATE TABLE INVENTORY 
(
BOOK_CODE CHAR(4) , 
BRANCH_NUM DECIMAL (2,0) NOT NULL, 
ON_HAND DECIMAL (2,0), 
PRIMARY KEY (BOOK_CODE,BRANCH_NUM) 
); 

(注意,這可能是更常見的有主鍵只是一個surrogate,如增加對每一行沒有意義的數字。)

1

值在表中的主鍵需要是唯一的。 (否則不能「鍵」關閉它們,因爲單個鍵可以識別多個記錄)。

只是爲了給你一些附加信息,請注意主鍵是聚集索引。這意味着該表通過此索引在磁盤上進行物理排序。 (因此,每個表只能有一個聚集索引。)因此,請小心使用這樣的主鍵。

如果您計劃以任意排列的字符串作爲主鍵插入記錄,則每個插入將重新對錶進行排序。隨着表格的增長,這將影響性能。由於這個原因,主鍵是通常是只是一個自動遞增的整數字段。 (整數是主機的本地字大小,自然易於計算,並且是關於可以具有的「最快」的一段數據。)

您可以將唯一約束添加到非鍵列以維持該限制關於數據。因此,您可以擁有一個主鍵,主鍵主要用於數據存儲目的,實際上並不具有直觀的人類可讀含義來存儲數據。而在另一列中存儲一個唯一的標識符,這意味着業務數據的某些內容,如標識字符串。這具有將「業務邏輯」(識別標籤)與「持久性邏輯」(數據庫的主鍵)分開的附加設計益處。