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

 更新时间:2015年11月18日 17:10:31   作者:stevenjohn  
这篇文章主要介绍了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) 
 

相关文章

  • MySQL Like模糊查询速度太慢如何解决

    MySQL Like模糊查询速度太慢如何解决

    这篇文章主要介绍了MySQL Like模糊查询速度太慢如何解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 五分钟带你搞懂MySQL索引下推

    五分钟带你搞懂MySQL索引下推

    这篇文章主要介绍了Mysql的索引下推,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-09-09
  • MySQL 5.7.30 安装与升级问题详细教程

    MySQL 5.7.30 安装与升级问题详细教程

    这篇文章主要介绍了MySQL 5.7.30 的安装与升级教程(所有可能的坑都在这里),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 安装Mysql时出现错误及解决办法

    安装Mysql时出现错误及解决办法

    因为一时手痒痒更新了一下驱动,结果导致无线网卡出了问题,本文给大家分享安装mysql时出现错误及解决办法,对安装mysql时出现错误相关知识感兴趣的朋友一起学习吧
    2015-12-12
  • MySQL中复制表结构及其数据的5种方式

    MySQL中复制表结构及其数据的5种方式

    在MySQL中,复制表结构及其数据可以通过多种方式实现,每种方法都有其适用场景,选择合适的方法可以提高工作效率,注意处理目标表存在性、大表复制效率及外键等约束,感兴趣的可以了解一下
    2024-09-09
  • 深入了解MySQL中的慢查询

    深入了解MySQL中的慢查询

    什么是MySQL慢查询呢?其实就是查询的SQL语句耗费较长的时间。具体耗费多久算慢查询呢?这其实因人而异,有些公司慢查询的阈值是100ms,有些的阈值可能是500ms。本文将通过示例和大家聊聊慢查询的危害和常用场景,感兴趣的可以了解一下
    2022-10-10
  • MySQL的commit是如何commit源码解析

    MySQL的commit是如何commit源码解析

    这篇文章主要为大家介绍了MySQL的commit是如何commit源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • IDEA使用mybatis-generator及配上mysql8.0.3版本遇到的bug

    IDEA使用mybatis-generator及配上mysql8.0.3版本遇到的bug

    这篇文章主要介绍了IDEA使用mybatis-generator以及配上mysql8.0.3版本遇到的问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • MySQL更新存放JSON的字段、\“ 转义成 “的问题描述

    MySQL更新存放JSON的字段、\“ 转义成 “的问题描述

    本篇介绍在执行MySQL线上变更时遇到的问题,表现为"更新JSON字段时,实际更新的值与SQL语句中的值不一致,JSON格式错误",本文给大家分享问题描述及解决方案,感兴趣的朋友一起看看吧
    2022-12-12
  • MySQL使用命令创建、删除、查询索引的介绍

    MySQL使用命令创建、删除、查询索引的介绍

    今天小编就为大家分享一篇关于MySQL使用命令创建、删除、查询索引的介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03

最新评论