列属性是指定义或创建一个列的时候,可以给列额外增加的“附加特性”。
形式如下:
create table 表名 (列名 列类型 [列属性...] );
说明:
1,一个列可以有多个列属性;
多个列属性空格隔开就行;
列属性包括以下这些:
null,not null
设定为空,或非空,表明该列数据是否可为空值(null)。
default
用于设定列默认值(不给值或给空值null并not null,就会自动使用该值)。
使用形式:default 默认值 。
primary key
用于设定主键。
主键就是一个表中数据的“关键值”,通过该关键值就可以找到该特定的数据行。
一个表的主键值不能重复(相等),比如文章表中的文章编号id,比如用户表中的用户名。
主键字段必须有值(不能为空)。
一个表只能有一个主键(但一个主键可以是1个字段或2个以上的字段联合构成)
auto_increment
用于设定一个整数字段的值是“自增长的”,通常用于一个表中的数据行的编号(比如文章编号)。
默认情况下自增长值从1开始。
一个表只能设定一个字段为自增长特性。
unique key
用于设定“唯一键”的特性。
唯一键表示一个表中的某字段的值是“唯一的”,“不重复的”。
唯一键有点类似primay key,但其值可以为空(null)。
一个表可以有多个唯一键。
comment
用于设定字段的说明性内容,类似注释,但又不是注释(属于有效的代码)。
使用形式: comment ‘文字内容’
列属性演示1
---演示null/not null, default, primary key 三个字段属性:
create table shuxing_test1 (
id int primary key,
userName varchar(10) not null,
sex enum('男','女') default '男' not null,
f4 float null -- 其实null可以不写,因为每个字段默认就是null
);
数据测试如下:
insert into shuxing_test1(id, userName) values(1,'user1');
insert into shuxing_test1(id, userName, sex, f4) values(2,'user2','女',10000);
//下面演示错误的数据
1,跟primary 冲突:
insert into shuxing_test1(id, userName, sex, f4) values(1,'user3','男',20000);
2,跟 not null 冲突:
insert into shuxing_test1(id, userName,sex, f4)values(3, null, '男',15000);
insert into shuxing_test1(id,sex, f4)values(3, '男',15000);
列属性演示2
创建一个表,并用上以上所有字段属性。字段可包括:id, kecheng, keshi, intro.
//综合演示所有字段属性:
创建一个表,并用上以上所有字段属性。字段可包括:id, kecheng, keshi, intro.
create table shuxing_test2(
id int auto_increment primary key comment '编号值',
kecheng varchar(20) not null unique key comment '课程名称,不能重复',
keshi tinyint unsigned default 1 comment '课时',
intro varchar(1000) comment '课程介绍,应该限制在1000个字符以内为妥'
);
insert into shuxing_test2 values(null, 'PHP', 6, 'web领域最流行的后端语言');
联合主键演示
有关primary key 的进一步探讨:
1,主键的另一种设定方式:
create table tab1 (
id int auto_increment,
name varchar(10),
primary key(id) -- 这就是主键的另一种设定方式!
);
2,多字段主键的含义及设定:
数据样例(成绩表):
学员id 科目 成绩
1 mysql 88
2 PHP 90
1 js 77
2 mysql 85
这种情况,就需要设置“多字段主键”,具体做法如下:
create table chengji (
学员ID int,
科目 varchar(20),
成绩 tinyint unsigned,
primary key(学员ID,科目)
);