请参见下面的代码以了解我的问题
CREATE TABLE seller (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`status` INT(11) UNSIGNED NOT NULL,
`phone` VARCHAR(20) UNIQUE NOT NULL,
PRIMARY KEY (`id`),
KEY `phone` (`phone`),
KEY `status` (`status`)
)
是我添加了这些
键phone
(phone
),
在代码末尾有status
(status
)行吗?
答案 0 :(得分:0)
UNSIGNED
和UNIQUE
是不相关的属性。
UNSIGNED
表示您只会在该字段中输入非负数。存储在数据库中的大多数就是这种情况-计数器,长度等。INT SIGNED
的范围约为+/- 20亿。 INT UNSIGNED
可以容纳0到大约40亿。
UNIQUE
包含两点:“唯一性约束”和“索引”。
如果您为该列插入具有相同值的行,则INSERT
将收到错误,因为您违反了“唯一性约束”。您使用诸如此类来捕获编程错误。如果您的表中每个小部件都有一行,那么如果尝试为同一小部件插入第二行,则很容易出错。
INDEX
是使数据库运行更快的关键工具。它提供了一种通过其“ id”查找小部件的快速方法。
虽然我在讨论,但我们来讨论NULL
与NOT NULL
。将NULL
视为一列的“额外值”。根据您的业务逻辑,这可能意味着“尚未设置”,“未知值”或其他任何事情。另一方面,通常必须提供 列(再次基于业务逻辑),因此您通常希望将列声明为NOT NULL
。
一个表可以(并且应该是)一个PRIMARY KEY
。它唯一地标识每一行。
PRIMARY KEY
是 UNIQUE
键是 INDEX
(又名KEY
)。所有这些的结构都为BTrees
(在MySQL中)。
回到您的问题:
是不是我在代码末尾添加了这些KEY电话(电话)和KEY状态(状态)行?
语法正确。它们的作用值得商bat。如果您从不说WHERE phone = '...'
,那么KEY(phone)
是没有用的。拥有它没有害处(除了浪费磁盘空间和使INSERTs
减慢一小步之外。)