在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 | +----+---------------+
列的自增长属性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