文章目录
1 空属性
- 两个值:null(默认的)和not null(不为空)
- 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算
- 例
create database db2;
use db2;
create table myclass(
class_name varchar(30) not null comment'班级名',
class_room varchar(10) not null comment'教室号');
desc myclass;
insert into myclass(class_name) values('高一6班');
//ERROR: Field 'class_room' doesn't have a default value
注:一旦在表约束里设置了not null,插入数据时,就必须给not null 的字段都插上
2 默认值(default)
- 一开始就指定好某个数据常出现的值作为默认值,在需要真实数据的时候,用户可以选择性的使用默认值。
- 默认值的生效:数据在插入的时候不给该字段赋值,就使用默认值
- 例:
create table tt1(
name varchar(20) not null comment'姓名',
age tinyint default 0 comment'年龄',
gender char(1) default '男' comment'性别'
);
insert into tt1(name) values('哒哒哒');
3 列描述(comment)
- 列描述无法通过查看表结构
desc 表名;
得到 - 用查看表创建语句
show create table 表名/G
4 zerofill
- 数字类型后面的长度,在没有zerofill这个属性,括号内的数字是毫无意义的
- 例:
//原始:select* from tt3;输出 a :1
a int(10)unsigned DEFAULT NULL,
//改变后:select* from tt3;输出 a :00001
//改变方法1:alter...change
alter table tt3 change a a int(5) unsigned zerofill;
//改变方法2:alter...modify
alter table tt3 modify a int(5) unsigned zerofill;
- 作用: 如果宽度小于设定的宽度,自动填充0;只是显示00001,内部存储还是1,通过
select a, hex(a) from tt3;
可查看
5 主键 (primary key/ PRI)
- 特点:
一张表只能有一个字段被主键修饰;
被主键修饰的字段不能重复,不能为空;
主键所在的列通常是整数类型。 - 复合主键
例:
create table tt5(
id int(10) unsigned comment'学号',
course char(10) comment'课程代码',
score tinyint unsigned default 60 comment'成绩',
//复合主键在表里设置
primary key(id,course)
);
- 表创建完成后,追加主键
alter table 表名 add primary key(字段列表)
- 删除主键(只删除主键约束,不删除主键列)
6 自增长(auto_increment)
- 特点:
任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
自增长字段必须是整数
一张表最多只能有一个自增长(一般配合主键使用,作为逻辑主键) - 插入数据注意:
可以不给逻辑主键插入数据,因为会自增长
7 唯一键(unique/ UNI)
- 特点:数据不能重复
-
- 与主键区别:
1)唯一键可以为空,空字段不做唯一性比较
2)唯一键在一张表内可以有多个
- 与主键区别:
8 外键(MUL)
-
作用:定义主表和从表之间的关系
-
- 1)外键约束定义在从表上
2)主表必须有主键(primary key)约束或唯一键(unique)约束
- 1)外键约束定义在从表上
-
要求:
外键列数据必须在主表的主键列存在或为null -
语法
//外键字段参考主表
foreign key (字段名) references 主表(列)
-
注:
1)从表字段与主表关联字段的数据类型一定要相同
2)主表关联字段为主键,从表相应的字段出数据时是否可以为空,看从表相应字段的定义
例:
//创建主表
create table myclass(
id int(2) unsigned primary key comment'id');
//创建从表
create table stu(
class_id int(2) unsigned,
foreign key (class_id) references myclass(id));
//给从表stu插入null成功
insert into stu values(null);