转载

[mysql基础文档]-13-主键与自增长

在MySQL数据库中一张表可以定义一个或多个主键(primary key),主键值具有唯一性,能唯一的标识一条记录,便于查询。

文章目录

  • [1].MySQL如何创建Primary Key
  • [2].如何创建自增长列

[1].MySQL如何创建Primary Key

当我们希望某列用于索引且具有唯一值时,可以使用主键;主键各值不允许重复,创建主键的方式有以下两种,效果相同,唯一不同的是,第二种方法创建的主键会自动设定一个默认值0,相当于给主键列还添加了一个default属性:

//方法一:创建表t17,包含两列,其中id列被设定成主键 mysql> create table t17(id int primary key,uname char(20)); //方法二:单独在末尾使用primary key语句,括号中包含哪一列,哪一列就被设置为主键列 mysql> create table t17(id int,uname char(20),primary key(id));  //插入数据测试 mysql> insert into t17 values(1,'qingsword.com');  //当我们对id列插入重复数字1的时候,数据库显示不能有重复的数值,因为id列是主键列 mysql> insert into t17 values(1,'qingsword.com'); ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'  //只有不同的值才能执行成功 mysql> insert into t17 values(2,'qingsword.com');  mysql> select * from t17; +----+---------------+ | id | uname         | +----+---------------+ |  1 | qingsword.com | |  2 | qingsword.com | +----+---------------+

[2].如何创建自增长列

列的自增长属性auto_increment,在创建表时声明,能后期alter添加,一张表只能存在一列拥有auto_increment属性,并且这一列要么具有primary key属性,要么是简单索引列(index或key,后面会介绍到索引,这里先有这个印象即可),自增长列从1开始递增;

auto_increment属性是mysql里面独有的,在oracle里面没有这个属性,自增长效率相对较低,oracle里取而代之的是sequence,能够生成序列号;

auto_increment应用实例:

//创建表t18,id列被设置成主键并且具有自增长属性(只有主键或普通索引列才能配置自增长) mysql> create table t18(id int primary key auto_increment,uname char(20));  //下面这个例子中,直接添加自增长给id列,但id列非主键,也非索引列,所以数据库报错了,表创建失败 mysql> create table t19(id int auto_increment,uname char(20)); ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key  //仅给uname列插入三条数据 mysql> insert into t18(uname) values('qingsword.com'); mysql> insert into t18(uname) values('qingsword.com'); mysql> insert into t18(uname) values('qingsword.com');  //id列自动从1开始填充 mysql> select * from t18; +----+---------------+ | id | uname         | +----+---------------+ |  1 | qingsword.com | |  2 | qingsword.com | |  3 | qingsword.com | +----+---------------+  //如果手动给id列输入数据也是可行的,只要不是重复值 mysql> insert into t18 values(4,'qingsword.com'); mysql> insert into t18 values(6,'qingsword.com');   mysql> insert into t18(uname) values('qingsword.com');  //自增长列会接着手动输入的数据开始递增 mysql> select * from t18; +----+---------------+ | id | uname         | +----+---------------+ |  1 | qingsword.com | |  2 | qingsword.com | |  3 | qingsword.com | |  4 | qingsword.com | |  6 | qingsword.com | |  7 | qingsword.com | +----+---------------+

[**] 注:如文中未特别声明转载请注明出自:QingSword.COM

正文到此结束
Loading...