MySQL中的主键以及设置其自增的用法教程
1、声明主键的方法:
您可以在创建表的时候就为表加上主键,如:
CREATETABLEtbl_name([字段描述省略...],PRIMARYKEY(index_col_name));
也可以更新表结构时为表加上主键,如:
ALTERTABLEtbl_nameADDPRIMARYKEY(index_col_name,…); /* 创建一个qq表,将qq_id设为主键,且没有对其进行NOTNULl约束 */ createtableqq( qq_idint(10), nick_namevarchar(255)notnull, primarykey(qq_id)) /* 插入一条数据,将qq号设为10000(咱也幻想一下),昵称设为"simaopig" */ INSERTINTOqq(qq_id,nick_name) VALUES( '10000','simaopig');
主键被认为是NOTNULL和UNIQUE约束最好的结合。如果这些列没有被明确地定义为NOTNULL,MySQL会隐含地定义这些列。
2、主键也是索引:
刚才已经说了,主键其实也是索引,甚至在MySQL的术语里面“键”就等于“索引”,所以“外键”一定要先设为“索引”。所以主键也应该和索引一样,既可以作用于单独的字段,又可以作用于多个字段。
举个简的例子吧,我住3单元,501室,我叫小小子,那么只有3单元501室才能在本小区表里面唯一确定我家。因为2单元,501室住着的可能也是个小小子,所以只有两个字段才能唯一确定我,也就是说可以二者组合作为主键。组合的主键,每个列都会隐含定义NOTNULL约束,且其二者加在一起被定义了UNIQUE惟一约束。
/*
创建防火墙表,将host和port组合设为主键,注意我没有将port设NOTNULL约束
*/
createtablefirewall(
hostvarchar(11)notnull,
portsmallint(4),
accessenum('deny','allow')notnull,
primarykey(host,port))
/*
插入一条新的记录,没有啥问题
1row(s)inserted.
*/
INSERTINTOfirewall(
host,
port,
access)
VALUES(
'202.65.3.87','21','deny');
3、设置主键自增
下面我们通过一个实例来讲解设置主键自增的方法:
首先创建数据库,创建表
mysql>createdatabasessh2;
QueryOK,1rowaffected(0.04sec)
mysql>usessh2;
Databasechanged
mysql>createtableuser( ->idintegerprimarykey, ->firstnamevarchar(200)notnull, ->lastnamevarchar(200)notnull, ->ageinteger ->);
QueryOK,0rowsaffected(0.46sec)
给主键增加一个自增的功能:
mysql>altertableusermodifyidintegerauto_increment;
QueryOK,1rowaffected(0.28sec) Records:1Duplicates:0Warnings:0
这样,上面的user表里面的主键,id可以自增了。
给上面的主键id增加默认值和自增功能。
mysql>altertableusermodifyidintegerauto_increment;
QueryOK,0rowsaffected(0.39sec) Records:0Duplicates:0Warnings:0
mysql>altertableusermodifyidintegerdefault'1';
QueryOK,0rowsaffected(0.16sec) Records:0Duplicates:0Warnings:0
mysql>altertableusermodifyidintegerauto_increment;
QueryOK,1rowaffected(0.28sec) Records:1Duplicates:0Warnings:0
MySql获取系统时间:
mysql>altertableuseraddcreatetimetimestampdefaultcurrent_timestamp;
QueryOK,2rowsaffected(0.17sec) Records:2Duplicates:0Warnings:0
MySql设置主键不能为空,还要自动增长(这里没有设置默认值,但是默认是1,从1开始增长。),还要得到系统默认日期:
mysql>createtabledd( ->idintprimarykeynotnullauto_increment, ->namevarchar(20), ->timetimestampdefaultcurrent_timestamp ->);
QueryOK,0rowsaffected(0.10sec)
mysql>insertintodd(name)values('fhihgifds');
QueryOK,1rowaffected(0.14sec)
mysql>insertintodd(name)values('steven');
QueryOK,1rowaffected(0.08sec)
mysql>select*fromdd;
+----+-----------+---------------------+ |id|name|time| +----+-----------+---------------------+ |1|fhihgifds|2011-03-2701:58:46| |2|steven|2011-03-2701:59:35| +----+-----------+---------------------+ 2rowsinset(0.08sec)
mysql>insertintodd(name)values('anthony');
QueryOK,1rowaffected(0.09sec)
mysql>select*fromdd;
+----+-----------+---------------------+ |id|name|time| +----+-----------+---------------------+ |1|fhihgifds|2011-03-2701:58:46| |2|steven|2011-03-2701:59:35| |3|anthony|2011-03-2702:00:07| +----+-----------+---------------------+ 3rowsinset(0.00sec)
热门推荐
10 八一幼儿祝福语大全简短
11 公司乔迁食堂祝福语简短
12 婚礼结束聚餐祝福语简短
13 儿媳买车妈妈祝福语简短
14 毕业送礼老师祝福语简短
15 同事辞职正常祝福语简短
16 恭贺新婚文案祝福语简短
17 金店立秋祝福语简短英文
18 婆婆高寿祝福语大全简短