2011-02-16 80 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

值在表中的主键需要是唯一的。 (否则不能“键”关闭它们,因为单个键可以识别多个记录)。

只是为了给你一些附加信息,请注意主键是聚集索引。这意味着该表通过此索引在磁盘上进行物理排序。 (因此,每个表只能有一个聚集索引。)因此,请小心使用这样的主键。

如果您计划以任意排列的字符串作为主键插入记录,则每个插入将重新对表进行排序。随着表格的增长,这将影响性能。由于这个原因,主键是通常是只是一个自动递增的整数字段。 (整数是主机的本地字大小,自然易于计算,并且是关于可以具有的“最快”的一段数据。)

您可以将唯一约束添加到非键列以维持该限制关于数据。因此,您可以拥有一个主键,主键主要用于数据存储目的,实际上并不具有直观的人类可读含义来存储数据。而在另一列中存储一个唯一的标识符,这意味着业务数据的某些内容,如标识字符串。这具有将“业务逻辑”(识别标签)与“持久性逻辑”(数据库的主键)分开的附加设计益处。