mysql自增主键 php_MySQL_MySQL中的主键以及设置其自增的用法教程,1、声明主键的方法: 您可以 - phpStudy...

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)相关阅读:

查询json的数据结构的8种方式简介

最新版Win10 Mobille预览版最快一周后发布 10536可直接升级

jsp+servlet+javabean实现数据分页方法完整实例

js中一维数组和二位数组中的几个问题示例说明

Android利用Intent读取和更新通讯录

Android实现整理PackageManager获取所有安装程序信息

基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)

Android应用中仿今日头条App制作ViewPager指示器

Win7系统关机时提示Dwwin.exe初始化失败的解决方法

利用Win+R命令进入Win10安全模式以便对电脑全面检修

CSS设置多行文本垂直居中的方法

JS保存和删除cookie操作 判断cookie是否存在

在文本框中提示用户应该输入内容格式的方法

MAC Safari浏览器如何保留指定标签页关闭其他

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值