各位用户为了找寻关于MySQL中的主键以及设置其自增的用法教程的资料费劲了很多周折。这里教程网为您整理了关于MySQL中的主键以及设置其自增的用法教程的相关资料,仅供查阅,以下为您介绍关于MySQL中的主键以及设置其自增的用法教程的详细内容
1、声明主键的方法: 您可以在创建表的时候就为表加上主键,如: CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name)); 也可以更新表结构时为表加上主键,如:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14ALTER
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 惟一约束。
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18/*
创建防火墙表,将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、设置主键自增 下面我们通过一个实例来讲解设置主键自增的方法: 首先创建数据库,创建表
? 1mysql> create database ssh2;
?
1
Query OK, 1 row affected (0.04 sec)
? 1
mysql> use ssh2;
?
1
Database changed
?
1
2
3
4
5
6
mysql>
create
table
user
(
-> id
integer
primary
key
,
-> firstname
varchar
(200)
not
null
,
-> lastname
varchar
(200)
not
null
,
-> age
integer
-> );
?
1
Query OK, 0 rows affected (0.46 sec)
给主键增加一个自增的功能:
? 1mysql>
alter
table
user
modify
id
integer
auto_increment ;
?
1
2
Query OK, 1 row affected (0.28 sec)
Records: 1 Duplicates: 0 Warnings: 0
这样,上面的user表里面的主键,id可以自增了。
给上面的主键id增加默认值和自增功能。
? 1mysql>
alter
table
user
modify
id
integer
auto_increment ;
?
1
2
Query OK, 0 rows affected (0.39 sec)
Records: 0 Duplicates: 0 Warnings: 0
? 1
mysql>
alter
table
user
modify
id
integer
default
'1'
;
?
1
2
Query OK, 0 rows affected (0.16 sec)
Records: 0 Duplicates: 0 Warnings: 0
? 1
mysql>
alter
table
user
modify
id
integer
auto_increment ;
?
1
2
Query OK, 1 row affected (0.28 sec)
Records: 1 Duplicates: 0 Warnings: 0
MySql获取系统时间:
? 1mysql>
alter
table
user
add
createtime
timestamp
default
current_timestamp
;
?
1
2
Query OK, 2 rows affected (0.17 sec)
Records: 2 Duplicates: 0 Warnings: 0
MySql设置主键不能为空,还要自动增长(这里没有设置默认值,但是默认是1,从1开始增长。),还要得到系统默认日期:
? 1 2 3 4 5mysql>
create
table
dd(
-> id
int
primary
key
not
null
auto_increment,
->
name
varchar
(20),
->
time
timestamp
default
current_timestamp
-> );
?
1
Query OK, 0 rows affected (0.10 sec)
?
1
mysql>
insert
into
dd(
name
)
values
(
'fhihgifds'
);
? 1
Query OK, 1 row affected (0.14 sec)
? 1
mysql>
insert
into
dd(
name
)
values
(
'steven'
);
?
1
Query OK, 1 row affected (0.08 sec)
? 1
mysql>
select
*
from
dd;
?
1
2
3
4
5
6
7
+----+-----------+---------------------+
| 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)
? 1
mysql>
insert
into
dd(
name
)
values
(
'anthony'
);
?
1
Query OK, 1 row affected (0.09 sec)
? 1
mysql>
select
*
from
dd;
?
1
2
3
4
5
6
7
8
9
+----+-----------+---------------------+
| 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)