这篇文章主要介绍了MySQL中的主键以及设置其自增的用法教程,是MySQL入门学习中的基础知识,需要的朋友可以参考下

1、声明主键的方法:您可以在创建表的时候就为表加上主键,如: CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name)); 也可以更新表结构时为表加上主键,如:


ALTER           TABLE          tbl_name           ADD          PRIMARY          KEY           (index_col_name,…);         
          /*         
          创建一个qq表,将qq_id设为主键,且没有对其进行          NOT          NULl          约束         
          */         
          create           table          qq(         
          qq_id           int          (10),         
          nick_name           varchar          (255)           not          null          ,         
          primary           key          (qq_id))         
          /*         
          插入一条数据,将qq号设为10000(咱也幻想一下),昵称设为          "simaopig"         
          */         
          INSERT           INTO          qq( qq_id, nick_name )         
          VALUES           (         
          '10000'          ,           'simaopig'          );


主键被认为是NOT NULL和UNIQUE约束最好的结合。如果这些列没有被明确地定义为NOT NULL,MySQL会隐含地定义这些列。

2、主键也是索引:刚才已经说了,主键其实也是索引,甚至在MySQL的术语里面“键”就等于“索引”,所以“外键”一定要先设为“索引”。所以主键也应该和索引一样,既可以作用于单独的字段,又可以作用于多个字段。 举个简的例子吧,我住3单元,501室,我叫小小子,那么只有3单元501室才能在本小区表里面唯一确定我家。因为2单元,501室住着的可能也是个小小子,所以只有两个字段才能唯一确定我,也就是说可以二者组合作为主键。组合的主键,每个列都会隐含定义NOT NULL约束,且其二者加在一起被定义了UNIQUE 惟一约束。


/*         
          创建防火墙表,将host 和port组合设为主键,注意我没有将port设          NOT          NULL          约束         
          */         
          create           table          firewall(         
          host           varchar          (11)           not          null          ,         
          port           smallint          (4),         
          access enum(          'deny'          ,           'allow'          )           not          null          ,         
          primary           key          (host,port))         
          /*         
          插入一条新的记录,没有啥问题         
          1 row(s) inserted.         
          */         
          INSERT           INTO          firewall (         
          host ,         
          port ,         
          access)         
          VALUES           (         
          '202.65.3.87'          ,           '21'          ,           'deny'          );


3、设置主键自增下面我们通过一个实例来讲解设置主键自增的方法: 首先创建数据库,创建表


mysql> create database ssh2;


 Query OK, 1 row affected (0.04 sec)

 


mysql> use ssh2;


 Database changed


mysql>           create          table          user          (          
                    -> id           integer          primary          key          ,          
                    -> firstname           varchar          (200)           not          null          ,          
                    -> lastname           varchar          (200)           not          null          ,          
                    -> age           integer         
                    -> );



Query OK, 0 rows affected (0.46 sec)

给主键增加一个自增的功能:


mysql>           alter          table          user           modify          id           integer          auto_increment ;



Query OK, 1 row affected (0.28 sec)          
          Records: 1 Duplicates: 0 Warnings: 0


这样,上面的user表里面的主键,id可以自增了。

给上面的主键id增加默认值和自增功能。


mysql>           alter          table          user           modify          id           integer          auto_increment ;



Query OK, 0 rows affected (0.39 sec)          
          Records: 0 Duplicates: 0 Warnings: 0


 


mysql>           alter          table          user           modify          id           integer          default          '1'          ;



Query OK, 0 rows affected (0.16 sec)          
          Records: 0 Duplicates: 0 Warnings: 0


mysql>           alter          table          user           modify          id           integer          auto_increment ;



Query OK, 1 row affected (0.28 sec)          
          Records: 1 Duplicates: 0 Warnings: 0


MySql获取系统时间:


mysql>           alter          table          user           add          createtime           timestamp          default          current_timestamp          ;



Query OK, 2 rows affected (0.17 sec)          
          Records: 2 Duplicates: 0 Warnings: 0


MySql设置主键不能为空,还要自动增长(这里没有设置默认值,但是默认是1,从1开始增长。),还要得到系统默认日期:


mysql>           create          table          dd(          
                    -> id           int          primary          key          not           null          auto_increment,          
                    ->           name          varchar          (20),          
                    ->           time          timestamp          default          current_timestamp         
                    -> );



Query OK, 0 rows affected (0.10 sec)


mysql>           insert          into          dd(          name          )           values          (          'fhihgifds'          );


  


Query OK, 1 row affected (0.14 sec)


 


mysql>           insert          into          dd(          name          )           values          (          'steven'          );


Query OK, 1 row affected (0.08 sec)

 


mysql>           select          *           from           dd;



+----+-----------+---------------------+          
          | id | name   | time        |          
          +----+-----------+---------------------+          
          | 1 | fhihgifds | 2011-03-27 01:58:46 |          
          | 2 | steven  | 2011-03-27 01:59:35 |          
          +----+-----------+---------------------+          
          2 rows in set (0.08 sec)


 


 mysql>           insert          into          dd(          name          )           values          (          'anthony'          );


 Query OK, 1 row affected (0.09 sec)

 


 mysql>           select          *           from           dd;


+----+-----------+---------------------+       
       | id | name   | time        |       
       +----+-----------+---------------------+       
       | 1 | fhihgifds | 2011-03-27 01:58:46 |       
       | 2 | steven  | 2011-03-27 01:59:35 |       
       | 3 | anthony  | 2011-03-27 02:00:07 |       
       +----+-----------+---------------------+       
       3 rows in set (0.00 sec)