• 技术文章 >数据库 >mysql教程

    MySQL中的主键以及设置其自增的用法教程_MySQL

    2016-05-27 13:45:39原创473
    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) 
     
    
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:MySQL下常见的启动失败与备份失败问题的解决教程_MySQL 下一篇:对MySQL日志操作的一些基本命令总结_MySQL
    PHP编程就业班

    相关文章推荐

    • MySQL你必须要了解存储引擎• mysql中--是啥意思• mysql怎么增加数据库• mysql中外键和主键有区别吗• 你值得了解的15个Mysql索引失效场景(带你快速避坑)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网