#即在字段类型的基础上添加额外的限制1.unsigned 无符号
create table t1(id tinyint);
create table t2(id tinyint unsigned);
insert into t1 values(255);
insert into t2 values(255);2.zerofill 0填充
#int()里面的数字表示控制展示长度)
create table t3(id tinyint zerofill);
insert into t4 values(1);3.not null 非空
create table t4(name varchar(16)not null);#必须给一个值
insert into t4 values();# insert into t4 values('');不会报错,仍然填充了一个空字符串4.default 默认值
create table t5(name varchar(16),gender varchar(16) default 'male');"""
在插入数据的时候也可以指定字段,不指定默认值就是按照顺序依次传值
insert into t5(name) values(值)
"""5.unique 唯一
#单列唯一
create table t6(id,int,
name varchar(16) unique
);
insert into t6(id,name) values(1,'jason'),(2,'jason');#多列唯一(联合唯一)
create table t7(idint,
host varchar(16),
port int
unique(host,port));
insert into t7 values(2,'127.0.0.1',8080),(1,'127.0.0.2',8080),(3,'127.0.0.1',8080);6.primary key 主键
(1).逐渐在约束条件上相当于是not null+unique(非空且唯一)
create table t8(idint primary key
);# 多列主键(联合主键) 本质上还是一个主键,并且这种情况使用较少
create table t9(
ip char(16),
port int,
primary key(ip,port));(2).由于5.6及之后的版本存储引擎都是innodb
该引擎规定了所有的表都必须有且只有一个主键
#1.没有设置主键,也没有其他约束条件
innoDB为了能够创建出表,会自动采取内部隐藏的字段作为主键
隐藏意味着我们无法使用该主键,是没有意义的
#2.没有设置主键但是有其它约束条件
innoDB会自上而下的将第一个非空且唯一的字段升级为主键使用
create table 12(idint,
name char(16);
age intnot null unique,
addr char(16)not null unique
);
字段将age升级为主键
总结:在自己创建表的时候一定要自己指定主键
并且主键一般都是序号 用来唯一标识数据
所以主键一般情况下都是设置给表中的第一个id字段
uid sid pid cid只要是用来标识数据唯一性即可
7.auto_increment 自增
专门用来给主键使用的,目的是让主键能够自己增加不需要人为计数
create table t13(idint primary key auto_increment,
name char(16));
insert into t13(name) values('jason'),('kevin'),('tony');"""
在创建表的时候固定写序号字段
create table t1(
id int primary key auto_increment,
……
);
在写入数据的时候也不需要考虑主键字段
"""
主键的特点
自增不会因为删除数据而重置
delete from
如果真的想删除数据并重置主键
truncate
外键
外键也属于约束条件,但是功能是用来建立表与表之间的关系
属于特殊的约束条件
#引入
创建一张公司的员工表
id name age dep_name dep_desc
该表的缺陷:
1.表含义不明确(可以忽略)2.数据存在重复,浪费存储空间(可以忽略)3.数据修改繁琐,不便于扩展(不能忽略)
措施:
将员工表一分为二
员工表
id name age
部门表
id dep_name dep_desc
关系字段 外键字段的由来
部门编号 对应的就是部门表里面的主键字段