目录
1.not null
作用:不能填入null
用法:在对应类型中添加not null,若填入null则报错
create table t1(id int,name char not null);
insert into t1 values(null); # 报错
2.unsigned
作用:存入整型改为无符号
用法:
create table t1(id tinyint unsigned);
insert into t1 values(-1),(256); # 输入数据
select * from t1; # 返回结果:0 255
3.zerofill
作用:存入整型不足设置宽度时,把默认空格补位改为以0补位
用法:
create table t1(id int(8) unsigned zerofill); # 用0为补位填充至8位
insert into t1 values(22); # 输入数据
select * from t1; # 返回结果:00000022
4.default
作用:设置默认值
用法:
1.补充:顺序可以以输入时位置对应
create table t1(
id int,
name char(16)
);
insert into t1(name,id) values('zcy',1);
2.设置默认值,常常以多数为主
create table t2(
id int,
name char(16),
gender enum('teacher','principal') default 'student'
);
insert into t2(id,name) values(1,'zcy'); # 1 zcy student
insert into t2 values(2,'mxg','teacher'); # 2 mxg teacher
5.unique
作用:输入值设成唯一
用法:
1.单列唯一
create table t3(
id int unique,
name char(16)
);
insert into t3 values(1,'zcy'),(1,'mxg'); # 报错,id不唯一
insert into t3 values(1,'zcy'),(2,'mxg'); # 正确
2.联合唯一(两个以上排列唯一)
举例:
ip和port,单个都可以重复 但是加载一起必须是唯一的
create table t4(
id int,
ip char(16),
port int,
unique(ip,port)
);
insert into t4 values(1,'127.0.0.1',8080);
insert into t4 values(2,'127.0.0.1',8081);
insert into t4 values(3,'127.0.0.2',8080);
insert into t4 values(4,'127.0.0.1',8080); # 报错
6.primary key :主键
1.单单从约束效果上来看primary key等价于not null + unique,即非空且唯一!!!
create table t5(id int primary key);
insert into t5 values(null); # 报错
insert into t5 values(1),(1); # 报错
insert into t5 values(1),(2);
2.它除了有约束效果之外 它还是Innodb存储引擎组织数据的依据
Innodb存储引擎在创建表的时候必须要有primary key
因为它类似于书的目录 能够帮助提示查询效率并且也是建表的依据
a.一张表中有且只有一个主键 如果你没有设置主键 那么会从上往下搜索直到遇到一个非空且唯一的字段将它自动升级为主键
create table t6(
id int,
name char(16),
age int not null unique,
addr char(32) not null unique
);
b.如果表中没有主键也没有其他任何的非空且唯一字段
那么Innodb会采用自己内部提供的一个隐藏字段作为主键(隐藏意味着你无法使用到它 就无法提示查询速度)
c.一张表中通常都应该有一个主键字段 并且通常将id/uid/sid字段作为主键
# 单个字段主键
create table t5(
id int primary key
name char(16)
);
# 联合主键(多个字段联合起来作为表的主键 本质还是一个主键)
create table t7(
ip char(16),
port int,
primary key(ip,port)
);
3.总结:以后在创建表的时候id字段一定要加primary key
7.auto_increment:自增
1.用法
create table t8(
id int primary key auto_increment,
name char(16)
);
insert into t8(name) values('zcy'),('mxg'),('wsx');
2.注意:
auto_increment通常都是加在主键上的 不能给普通字段加
create table t9(
id int primary key auto_increment,
name char(16),
cid int auto_increment
);
报错:ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
3.结论:
以后在创建表的id(数据的唯一标识id、uid、sid)字段的时候
id int primary key auto_increment
4.补充:
delete from t1 :删除表中数据后 主键的自增不会停止
truncate t1 :清空表数据并且重置主键