字段的约束条件
创建表: create table t19(id int,name varchar(32)); 往表中添加数据: insert into t19(name,id) values('tom',1); # 可以自定义字段顺序 insert into t19 values(2,'ami'); 查看表数据: select * from t19; # 1.无负号unsigned create table t20(id int unsigned,name varchar(32)); # 2.零填充zerofill create table t20(id int zerofill,name varchar(32)); # 3.非空not null create table t20(id int,name varchar(32) not null); # 所有字段类型不加约束条件的情况下默认都可以为空 # 4.默认值default create table t20(id int,name varchar(32) default 'jason'); # 5.唯一值unique # 单列唯一 : 使用后所在的字段名数据不能重复 create table t20(id int unique,name varchar(32)); # 联合唯一 使用后组合后的数据不能重复 create table t20(id int,name varchar(32) default 'jason');
主键
# 1.主键设置 primary key create table t1(id int primary key,name varchar(32)); # -1. 单从约束层面上而言主键相当于not null + unique(非空且唯一) # -2. InnoDB引擎规定一张表只能有一个主键 - 1.如果创建的表没有设置主键,非空且唯一的字段会被默认设为主键,
非空且唯一的的字段也没有,InnoDB会将隐藏的字段作为主键 id int not null unique - 2.主键可以加快数据查询 - 3.创建表的时候都需要有id字段,并且id字段应设为主键 - 4.单列主键 id int primary key - 5.联合主键 id1 int,id2 int,primary key(id1,id2) # 2.主键自增 auto_increment # -1.主键的自增作为约束条件要跟在键的后面,无法单独使用 create table t(id int primary key auto_increment,name varchar(32)); # -2.特点:在删除数据时,自增操作不会回退与重置,要想重置主键,需要对表格式化 truncate 表名; # # 删除表数据并重置主键值
外键
# 1.外键用于记录表与表之间的数据关系 数据的关系有四种: 1. 一对一的关系 2. 一对多的关系 3. 多对多的关系 4. 没有关系 """对于表关系如何判定呢: 换位思考他们的关系几对几""" # 2.外键的创建位置 1. 针对'一对多'的关系,外键字段建在多的一方 2. 针对'多对多'的关系,外键需要开设第三张关系表存储数据关系 3. 针对'一对一'的关系,外键可以建在任何一方,但是一般选择建在查询频率较高的表 # 3.外键设置的关键字: foreign key - 必须基于多张表关系才可以设置表关系
create table t4(
id int primary key auto_increment,
name varchar(32),
t5_id int,
foreign key(t5_id) references t5(id));
create table t5(
id int primary key auto_increment,
t5_name varchar(32),
t5_desc varchar(64));
表关系创建
# 1.一对多 - 创建一对多的表关系数据 1.先写普通字段 2.然后再写外键字段 create table dep( id int primary key auto_increment, dep_name varchar(32), dep_desc varchar(32) ); create table emp( id int primary key auto_increment, name varchar(32), gender enum('male','female','others') default 'male', dep_id int, foreign key(dep_id) references dep(id) ); 操作可能出现的问题: 1.创建表的时候需要先创建没有外键的表,然后是有外键的表 2.插入表数据的时候,外键字段只能写关联表字段里的数据值 3.被关联字段的操作限制性太强,无法进行修改与删除 如何解决: 使用级联更新,级联删除 on update cascade # 级联更新 on delete cascade # 级联删除 """被关联数据一旦变动,关联的数据同步变动""" create table emp1( id int primary key auto_increment, name varchar(32), gender enum('male','female','others') default 'male', dep_id int, foreign key(dep_id) references dep1(id) on update cascade on delete cascade ); create table dep1( id int primary key auto_increment, dep_name varchar(32), dep_desc varchar(32) ); """ - 在实际工作中,很多时候可能并不会使用外键 因为外键增加了表之间的耦合度 不便于单独操作 资源消耗增加 - 我们为了能够描述出表数据的关系,又不想使用外键 自己通过写SQL,建立代码层面的关系 """ # 2.多对多 - 创建多对多的表关系数据 * 不能直接创建,需要单独开设第三张关系表。存储数据关系 create table book( id int primary key auto_increment, title varchar(32) ); create table author( id int primary key auto_increment, name varchar(32) ); create table bookauthor( id int primary key auto_increment, book_id int, foreign key(book_id) references book(id) on update cascade # 级联更新 on delete cascade, # 级联删除 author_id int, foreign key(author_id) references author(id) on update cascade # 级联更新 on delete cascade # 级联删除 ); # 3.一对一 - 创建一对一的表关系数据 create table userDetail( id int primary key auto_increment, phone bigint ); create table user( id int primary key auto_increment, name varchar(32), detail_id int unique, foreign key(detail_id) references userDetail(id) on update cascade on delete cascade ); # 4.没有关系
标签:约束条件,varchar,int,32,key,MYSQL,table,id From: https://www.cnblogs.com/juzijunjun/p/16922433.html