• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

mysql 搞代码 4年前 (2022-01-09) 25次浏览 已收录 0个评论

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) ins<strong style="color:transparent">来源gaodai#ma#com搞@代~码$网</strong>erted.*/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)  

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySQL中的主键以及设置其自增的用法教程_MySQL

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址