1、
Unique Key与primey Key有什么区别么?2、
另外创建key的时候,起的名字有什么用处?
eg.UNIQUE KEY `别名有什么用处?` (`列一`,`列二`) 3、
在已经有key的情况下,创建自动增长的索引有无必要
eg.`ID` int(11) NOT NULL auto_increment,一个问题20分,谢谢~

解决方案 »

  1.   

    1、 
    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是唯一的,没有必要。
      

  2.   

    1、
    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中自动增长列必须包函在主键或唯一键中。
      

  3.   

    一、
    忘了主键还与其它表的外键关联了二、
    有点理解的样子,分别为key name和column name,原来key name是用于管理key的(删除,添加,修改之类的,有点像句柄的感觉)三、
    不呀,自动增长的索引,放在key也可以
    我是看到项目中有些表,已经有联合索引(unique key),但还有自动增长的索引,我觉得没有必要,看了你的解释,现在我把它去掉了。
      

  4.   

    一、
    忘了主键还与其它表的外键关联了是的,但unique key 也同样可以做为外键的参照 三、
    不呀,自动增长的索引,放在key也可以
    这个字段必须包函在主键或唯一键中我是看到项目中有些表,已经有联合索引(unique key),但还有自动增长的索引,我觉得没有必要
    是的,但为了方便,比如表中可以以(col1,col2,col3,col4)做为主键,但并不方便删除,更新,你需要 where col1=... col2=.. and ....不如直接一个 id方便,也方便做为外键参照。
      

  5.   

    下面的例子更容易了解mysql> create table tx1 (
        -> 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>
      

  6.   

    既然自动增长就不会重复auto_increment 只是提供默认值而已,并不起任何约束作用。mysql> create table tx1(
        ->  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>