1、
Unique Key与primey Key有什么区别么?2、
另外创建key的时候,起的名字有什么用处?
eg.UNIQUE KEY `别名有什么用处?` (`列一`,`列二`) 3、
在已经有key的情况下,创建自动增长的索引有无必要
eg.`ID` int(11) NOT NULL auto_increment,一个问题20分,谢谢~
Unique Key与primey Key有什么区别么?2、
另外创建key的时候,起的名字有什么用处?
eg.UNIQUE KEY `别名有什么用处?` (`列一`,`列二`) 3、
在已经有key的情况下,创建自动增长的索引有无必要
eg.`ID` int(11) NOT NULL auto_increment,一个问题20分,谢谢~
解决方案 »
- mysql算法问题--大流量下找不同点
- mysql和sybase安装一起有没有冲突?
- 这个数据库为何无法删除?如何处理?
- 用phpMyAdmin查看表结构,发现有的表有"关系查看",有的表没有
- mysql administratator 在 Query Browser里使用中文查询 显示重叠
- 新手,请高手相助
- 版本5.0有一个很奇怪的XML支持特性
- 如何查询多字段不重复记录
- Mysql 临时表 Drop 太慢
- MySql数据库 里面怎么查询一个字符串是否包涵 在一个数据表的字段里面?
- mysql 外键是否创建很不稳定
- mysql.exe -uroot -p123 MYSQL < D:\TEMP\QQ.SQL
Unique Key与primey Key有什么区别么? Unique Key:唯一KEY,
primey Key:主键,主键可以是多个字段组合,必须是唯一的2、
另外创建key的时候,起的名字有什么用处?
eg. 就是约束名,以后修改、删除、违反KEY时有提示,方便一些UNIQUE KEY `别名有什么用处?` (`列一`,`列二`) 3、
在已经有key的情况下,创建自动增长的索引有无必要
eg.`ID` int(11) NOT NULL auto_increment, 一个表只能有一个auto_increment,如果KEY是唯一的,没有必要。
Unique Key与primey Key有什么区别么?
primey Key 主键 (主键:具有唯一标识表中每条记录的值的一个或多个域(列)。主键不允许为 Null,并且必须始终具有唯一索引。主键用来将表与其他表中的外键相关联。)
Unique Key 和 primary key 基本类似,但一个表中只能定义一个主键,其余的只能定义成unique key 了,另外unique 中允许空值
2、
另外创建key的时候,起的名字有什么用处?
eg.
UNIQUE KEY `别名有什么用处?` (`列一`,`列二`) 删除的时候方便,或者强制使用索引时方便,如果你不定义索引的名字,则MYSQL会自动创建一个名字。
3、
在已经有key的情况下,创建自动增长的索引有无必要
eg.`ID` int(11) NOT NULL auto_increment,你上面这句,并没有创建什么索引,只是指定ID为自动增长,你所谓的已经有KEY是指什么?
另外MYSQL中自动增长列必须包函在主键或唯一键中。
忘了主键还与其它表的外键关联了二、
有点理解的样子,分别为key name和column name,原来key name是用于管理key的(删除,添加,修改之类的,有点像句柄的感觉)三、
不呀,自动增长的索引,放在key也可以
我是看到项目中有些表,已经有联合索引(unique key),但还有自动增长的索引,我觉得没有必要,看了你的解释,现在我把它去掉了。
忘了主键还与其它表的外键关联了是的,但unique key 也同样可以做为外键的参照 三、
不呀,自动增长的索引,放在key也可以
这个字段必须包函在主键或唯一键中我是看到项目中有些表,已经有联合索引(unique key),但还有自动增长的索引,我觉得没有必要
是的,但为了方便,比如表中可以以(col1,col2,col3,col4)做为主键,但并不方便删除,更新,你需要 where col1=... col2=.. and ....不如直接一个 id方便,也方便做为外键参照。
-> id int primary key,
-> f1 int unique key,
-> f2 int
-> );
Query OK, 0 rows affected (0.08 sec)mysql>
mysql> create table tx2 (
-> id int primary key,
-> f1 int,
-> FOREIGN KEY (f1) REFERENCES tx1(f1)
-> );
Query OK, 0 rows affected (0.19 sec)mysql> -- ACMAIN , UNIQUE KEY `f1` (`f1`) 自动加上了索引名
mysql> show create table tx1;
+-------+-----------------------------------------------------------------------
| Table | Create Table
+-------+-----------------------------------------------------------------------
| tx1 | CREATE TABLE `tx1` (
`id` int(11) NOT NULL,
`f1` int(11) DEFAULT NULL,
`f2` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `f1` (`f1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+-----------------------------------------------------------------------
1 row in set (0.00 sec) -- ACMAIN ,外键参照 FOREIGN KEY (`f1`) REFERENCES `tx1` (`f1`)
mysql> show create table tx2;
+-------+-----------------------------------------------------------------------
| Table | Create Table
+-------+-----------------------------------------------------------------------
| tx2 | CREATE TABLE `tx2` (
`id` int(11) NOT NULL,
`f1` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `f1` (`f1`),
CONSTRAINT `tx2_ibfk_1` FOREIGN KEY (`f1`) REFERENCES `tx1` (`f1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+-----------------------------------------------------------------------
1 row in set (0.00 sec)mysql>
mysql> create table tx3 (
-> f1 int auto_increment,
-> f2 int,
-> f3 int
-> );
ERROR 1075 (42000): Incorrect table definition; there can be only one auto colum
n and it must be defined as a key
mysql>
-- ACMAIN ,auto_increment 必须是 KEY 的一部分,这一点上你是正确的!
mysql> create table tx3 (
-> f1 int auto_increment,
-> f2 int,
-> f3 int,
-> key (f1,f2)
-> );
Query OK, 0 rows affected (0.08 sec)mysql>
-> fd1 int auto_increment,
-> fd2 int,
-> key(fd1)
-> );
Query OK, 0 rows affected (0.08 sec)mysql>
mysql> insert into tx1 values (1,11);
Query OK, 1 row affected (0.02 sec)mysql> insert into tx1 values (2,22);
Query OK, 1 row affected (0.03 sec)mysql> insert into tx1 values (1,33);
Query OK, 1 row affected (0.02 sec)mysql> select * from tx1;
+-----+------+
| fd1 | fd2 |
+-----+------+
| 1 | 11 |
| 2 | 22 |
| 1 | 33 |
+-----+------+
3 rows in set (0.00 sec)mysql>