重复错误

时间:2011-02-16 13:28:21

标签: mysql

我目前正在大学注册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命令中看到它们。

4 个答案:

答案 0 :(得分: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

  

PRIMARY KEY是一个独特的索引   所有键列必须定义为NOT   空值。如果他们没有明确   声明为NOT NULL,MySQL声明   他们是如此含蓄(而且默默地)。一个   表只能有一个PRIMARY KEY。   如果你没有PRIMARY KEY和   申请要求PRIMARY   在表中的KEY,MySQL返回   第一个没有NULL的UNIQUE索引   列作为PRIMARY KEY。

答案 1 :(得分:1)

表的PRIMARY KEY意味着表中只能有一个具有该特定值(或值组合)的条目/行。

所以insertint '079x' 3次并不会使它独一无二。

查看Primary Key Definition

  

定义:关系表的主键唯一标识   表中的每条记录。它可以   或者是正常的属性   保证是独特的(例如   表中的社会安全号码   每人不超过一条记录)或   它可以由DBMS生成(例如   作为全球唯一标识符,或   GUID,在Microsoft SQL Server中)。   主键可以由单个键组成   属性或多个属性   组合

答案 2 :(得分: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可能更常见,例如每行增加无意义的数字。)

答案 3 :(得分:1)

表的主键中的值必须是唯一的。 (否则一个人无法“键入”它们,因为一个键会识别多个记录。)

只是为了给您一些额外的信息,请注意主键是聚簇索引。这意味着该表通过此索引在磁盘上进行物理排序。 (因此,每个表只能有一个聚簇索引。)所以要小心这样的主键。

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

您可以向非键列添加唯一约束,以维护对数据的限制。因此,您可以拥有主键,主要用于数据存储目的,并且实际上对存储的数据没有直观的人类可读含义。并且在另一列中存储唯一标识符,该标识符将表示业务数据,例如标识字符串。这具有将“业务逻辑”(标识标签)与“持久性逻辑”(数据库的主键)分离的附加设计优势。