枚举与集合类型
枚举(enum) 限制某个字段能够存储的数据内容
集合(set) 限制某个字段能够存储的数据内容
create table user( id int, name char(16), gender enum(‘male‘,‘female‘,‘others‘) ); insert into user values(1,‘jason‘,‘xxx‘) # 报错 insert into user values(2,‘egon‘,‘female‘) # 正确! create table teacher( id int, name char(16), gender enum(‘male‘,‘female‘,‘others‘), hobby set(‘read‘,‘sleep‘,‘sanna‘,‘dbj‘) ); insert into teacher values(1,‘egon‘,‘male‘,‘read,sleep,dbj‘) # 集合也可以只存一个
约束条件
not null 不能为空
default 给某个字段设置默认值(当用户写了的时候用用户的,当用户没有写就用默认值)
create table t17(id int,name char(16) default ‘jason‘);
往表中插入数据的时候 可以指定字段进行插入 不需要全部都插
insert into t17(name,id) values(‘egon‘,2);
unique 唯一
单列唯一 限制某一个字段是唯一的
联合唯一(在语句的最后 用括号的形式 表示哪几个字段组合的结果是唯一的)
ip
port
create table server(
id int,
ip char(16),
port int,
unique(ip,port)
)
primary key 主键
限制效果跟 not null + unique 组合效果一致 非空且唯一
create table t18(id int primary key);
primary key也是innodb引擎查询必备的索引
索引你就把当成书的目录
innodb引擎在创建表的时候 必须要有一个主键
当你没有指定主键的时候
1.会将非空切唯一的字段自动升级成主键
2.当你的表中没有任何的约束条件 innodb会采用自己的内部默认的一个主键字段
该主键字段你在查询时候是无法使用的
查询数据的速度就会很慢
类似于一页一页的翻书
create table t19(
id int,
name char(16),
age int not null unique,
addr char(16) not null unique
);
主键字段到底设置给谁呢???
通常每张表里面都应该有一个id字段
并且应该将id设置为表的主键字段
联合主键:多个字段联合起来作为表的一个主键,本质还是一个主键!!!
!!!!!!!!!!!!!!!!!ps:innodb引擎中一张表有且只有一个主键!!!!!!!!!!!!!!!!!!!!!!!
create table t20(
ip char(16),
port int,
primary key(ip,port)
);
desc t20;
主键字段应该具备自动递增的特点
每次添加数据 不需要用户手动输入
auto_increment 自动递增
create table t21(id int primary key auto_increment,name varchar(16));
create table t22(id int primary key,name varchar(16));
delete from 仅仅是删除数据 不会重置主键
truncate 初始化表 会重置主键
原文地址:https://www.cnblogs.com/lddragon/p/11380616.html