首页 > 数据库 > MySQL > 正文

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

2024-07-24 13:08:14
字体:
来源:转载
供稿:网友

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

1、声明主键的方法:

您可以在创建表的时候就为表加上主键,如:

CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name));

也可以更新表结构时为表加上主键,如:

 

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

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

2、主键也是索引:

刚才已经说了,主键其实也是索引,甚至在MySQL的术语里面“键”就等于“索引”,所以“外键”一定要先设为“索引”。所以主键也应该和索引一样,既可以作用于单独的字段,又可以作用于多个字段。

举个简的例子吧,我住3单元,501室,我叫小小子,那么只有3单元501室才能在本小区表里面唯一确定我家。因为2单元,501室住着的可能也是个小小子,所以只有两个字段才能唯一确定我,也就是说可以二者组合作为主键。组合的主键,每个列都会隐含定义NOT NULL约束,且其二者加在一起被定义了UNIQUE 惟一约束。

 

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

3、设置主键自增

下面我们通过一个实例来讲解设置主键自增的方法:

首先创建数据库,创建表

 

 
  1. mysql> create database ssh2;  

 

 
  1. Query OK, 1 row affected (0.04 sec)  

 

 
  1. mysql> use ssh2;  

 

 
  1. Database changed  

 

 
  1. mysql> create table user(  
  2. -> id integer primary key,  
  3. -> firstname varchar(200) not null,  
  4. -> lastname varchar(200) not null,  
  5. -> age integer 
  6. -> );  

 

 
  1. Query OK, 0 rows affected (0.46 sec)  

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

 

 
  1. mysql> alter table user modify id integer auto_increment ;  

 

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

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

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

 

 
  1. mysql> alter table user modify id integer auto_increment ;  

 

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

 

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

 

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

 

 
  1. mysql> alter table user modify id integer auto_increment ;  

 

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

MySql获取系统时间:

 

 
  1. mysql> alter table user add createtime timestamp default current_timestamp;  

 

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

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

 

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

 

 
  1. Query OK, 0 rows affected (0.10 sec)  

 

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

 

  
  1. Query OK, 1 row affected (0.14 sec)  

 

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

 

 
  1. Query OK, 1 row affected (0.08 sec)  

 

 
  1. mysql> select * from dd;  

 

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

 

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

 

 
  1. Query OK, 1 row affected (0.09 sec)  

 

 
  1. mysql> select * from dd;  

 

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


注:相关教程知识阅读请移步到MYSQL教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表