我目前正在大学注册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 :(得分:1)
BOOK_CODE
是PRIMARY 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次并不会使它独一无二。
定义:关系表的主键唯一标识 表中的每条记录。它可以 或者是正常的属性 保证是独特的(例如 表中的社会安全号码 每人不超过一条记录)或 它可以由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)
表的主键中的值必须是唯一的。 (否则一个人无法“键入”它们,因为一个键会识别多个记录。)
只是为了给您一些额外的信息,请注意主键是聚簇索引。这意味着该表通过此索引在磁盘上进行物理排序。 (因此,每个表只能有一个聚簇索引。)所以要小心这样的主键。
如果您计划插入具有任意排列字符串的记录作为主键,则每个插入将重新排序表。随着表的增长,这将影响性能。因此,主键通常只是一个自动递增的整数字段。 (整数是主机的原始字大小,自然易于计算,是关于“最快”的数据片段。)
您可以向非键列添加唯一约束,以维护对数据的限制。因此,您可以拥有主键,主要用于数据存储目的,并且实际上对存储的数据没有直观的人类可读含义。并且在另一列中存储唯一标识符,该标识符将表示业务数据,例如标识字符串。这具有将“业务逻辑”(标识标签)与“持久性逻辑”(数据库的主键)分离的附加设计优势。