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
, 主键
, 教程
MySQL教程
mysql 设置主键自增、mysql自增主键、mysql创建表主键自增、mysql非主键自增、mysql增加自增主键,以便于您获取更多的相关知识。

时间: 2024-11-02 22:41:41

MySQL中的主键以及设置其自增的用法教程_Mysql的相关文章

sql-ERP中,工厂日历主键的设置

问题描述 ERP中,工厂日历主键的设置 我想问一下,工厂日历表的主键应该设置哪些项. 现在表里有:年份.计划期.开始日期.结束日期.备注. 我想着,如果主键设置成年份.计划期.开始日期 三项的话,会不会太麻烦了.可不可以只设置年份和计划期呢? 解决方案 主键完全没有必要和你的业务相关,任何表都应该有主键. 如果你觉得你的字段是唯一的,应该加唯一约束.

visual studio-vs怎么样代码获取Mysql数据库中的主键

问题描述 vs怎么样代码获取Mysql数据库中的主键 100C 我正在做代码生成器,其中要获取数据库中的主键和外键以及自动增加列.下面是具体的代码,给位大神们我应该怎样升级这个代码 解决方案 解决方案二: 解决方案三: SELECT k.column_nameFROM information_schema.table_constraints tJOIN information_schema.key_column_usage kUSING (constraint_nametable_schemat

MySQL 处理插入过程中的主键唯一键重复值的解决方法_Mysql

本篇文章主要介绍在插入数据到表中遇到键重复避免插入重复值的处理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE:接下来就分别看看这三种方式的处理办法. IGNORE 使用ignore当插入的值遇到主键(PRIMARY KEY)或者唯一键(UNIQUE KEY)重复时自动忽略重复的记录行,不影响后面的记录行的插入, 创建测试表 CREATE TABLE Tignore (ID INT NOT NULL PRIMARY KEY , NAME1 INT )d

mybatis数据表(mysql)的主键非自增长,如何插入数据(需插入主键)实现主键自增长?

问题描述 mybatis数据表(mysql)的主键非自增长,如何插入数据(需插入主键)实现主键自增长? 举例来说就是有表person,person有id(mysql数据库,主键,非自增),和name,pswd三个字段.如果是自增的情况,我们通常是这样处理 insert into person(name,pswd) values(#{name},#{pswd}) 这种情况不许要插入主键,因为person表主键是自增长的.但如果主键不是增长的情况呢?如何处理.主键不是自增长就应该必须插入主键. 在步

oracle主键的设置方法

 主键: 1.主键约束: 一个表只能有一个主键约束.主键可以是单个字段,也可以是多个字段.无论是哪种情况,其所有字段都是NOT NULL. 2.Unique约束:一个表可以有多个Unique约束,Unique的字段可以为NULL. 3.主键与Unique:不同点在于一个表只能有一个主键约束,但是可以有多个Unique约束:主键所有字段都是not null,unique可以是 null:相同点在于都能保证唯一性. 4.主键.Unique与索引:主键约束与Unique约束默认会成为索引.当主键和Un

MySQL添加删除主键的方法

  mysql添加删除主键操作是非常基本的操作,下面就将教您mysql添加删除主键的方法,如果您是刚刚接触mysql数据库的新人,不妨一看. 修改mysql的字符集: 在安装mysql5.0时可以设置好mysql的字符集,一般使用utf8的字符集 1.查看建立表"tablename"的sql语句 Show create table tablename;//查看建立表"tablename"的sql语句 | maos_mail_batch | CREATE TABLE

FAQ系列 | MySQL索引之主键索引

导读 在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别? 上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别. 1.主键索引 主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录.一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL. 在MySQL中,InnoDB数据表的主键设计我们通常遵循几个原则: 采用一个没有业务用途的自增属性列作为主键: 主键字段值总是不更新,只有新增或者

Mysql的联合主键

mysql的联合主键:用2个字段(或者多个字段,后面具体都是用2个字段组合)来确定一条记录,说明,这2个字段都不是唯一的,2个字段可以分别重复,这么设置的好处,可以很直观的看到某个重复字段的记录条数. 在mysql当中我们经常认为主键只能设置一个,那如果我们想设置两个呢?如下图: CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `date` varchar(25) DEFAULT NULL, `sess_id` varcha

深入理解Redis中的主键失效及其实现机制

   作为一种定期清理无效数据的重要机制,主键失效存在于大多数缓存系统中,Reids也不例外.在Redis提供的诸多命令中,EXPIRE.EXPIREAT.PEXPIRE.PEXPIREAT以及SETEX和PSETEX均可以用来设置一条Key-Value对的失效时间,而一条Key-Value对一旦被关联了失效时间就会在到期后自动删除(或者说变得无法访问更为准确).可以说,主键失效这个概念还是比较容易理解的,但是在具体实现到Redis中又是如何呢?最近本博主就对Redis中的主键失效机制产生了几个