mysql之其他约束与多对一关系

一约束(需要先创建库)

1,非空约束,数据不能为空

not null 

create table student (id int,name char(10) not null);

2,默认值约束,可以指定字段的默认值

default  默认值

create table user(id int,name char(10) not null,sex char(10) default 'woman');

3,唯一性约束,该字段的值不能重复

一张表中可以存在多个唯一性约束

3.1,单列唯一约束

unique 

create table t1(idcard char(18) unique);

3.2,多列联合唯一约束(只限制括号里面的值全部相同)

unique(存放两个以上的字段名)

create table t6(idcard char(18),phonenumber char(11),unique(idcard,phonenumber));

3.3,主键约束(表中一条非空且唯一的信息)=unique not null

primary key

一个表中必须存在主键,如果没有指定,系统会自上而下的搜寻一条非空且且唯一的信息,如果定义的信息不存在非空且唯一的,那么系统会自动建一个7个bytes的隐藏字段做主键

create table stu(stuid int primary key,name char(5));
create table t7(id int unique not null,name char(5));

3.4多列联合主键(限制括号里面的字段全部相同)

primary key(多个字段名)

create table t8(idcard char(18),phonenumber char(11),primary key(idcard,phonenumber));

3.5字段类型属于整数型的可以自动增长

auto_increment 通常搭配主键字段使用,可以自动为你的数据分配

create table t9(id int primary key auto_increment,name char(3));

在插值的时候你可以跳过该字段,也可以插入null

修改自动增长的起始位置:例:把起始位置改为5

alter table 表名 auto_increment=5

二,表与表之间的关系

2.1多对一

foreign key

1,在创建表时,需要先创建被关联的表,才能创建关联表

foreign key(关联表的字段名) references 被关联表名(字段名)
create table dep(
id int prinmary key auto_increment,
dep_name char(10),
dep_comment char(60)
);
create table emp(
id int primary key auto_increment,
name char(5),
geder enum('male','female') not null default 'male',
dep_id int,
foreign key(dep_id) references dep(id)   #外键的主要语句
)

2,在插入记录的时候,必须先插入被关联表的,然后再插入关联表的

帮助思考:想在学校添加一个学生,必须先创建几个班级才能分配学生,要不然学生分配在哪里?

3,更新与删除都需要考虑到关联与被关联的关系

简单的说外键就是另一张表的主键

解决方法:外键约束

1,先删除关联表,再删除被关联表,准备重建

mysql> drop table emp;
Query OK, 0 rows affected (0.11 sec)

mysql> drop table dep;
Query OK, 0 rows affected (0.04 sec)

2,重建,新增功能,级联操作(同步更新,与同步删除)

语法:在创建外键时,后面添加 on update cascade同步更新

                                                  on delete cascade 同步删除

create table class(id int primary key auto_increment,name char(10));
create table student(
              id int primary key auto_increment,
              name char(10),
              c_id int,
              foreign key(c_id) references class(id)
              on update cascade
              on delete cascade
              );
insert into class value(null,"python");
insert into student value(null,"jack",1);

创建完之后,进行更改和删除class,查看效果

2.2多对多

两张表实现多对多的关系建立,是建立第三张表,为了保证关系表中的数据不乱,该表中应该有关联表的id与被关联表的id,然后对这两张表添加外键约束,并且保证存放的都是有效数据,需要给这两个数据添加关联主键关系

create table student(id int,name char(5),sex enum('male','female'));
create table student(id int,name char(5),sex enum('male','female'));
create table t_s(t_id int,
s_id int,
foreign key(t_id) references teacher(id)
on update cascade
on delete casdace,    #为t_id创建外键
foreign key(s_id) references student(id)
on update cascade
on delete casdace,    #为s_id创建外键
primary key(t_id,s_id)      #为两个字段名创建联合主键
)
insert into student value(null,'jack');
insert into teacker value(null,'lily');
insert into t_s value(1,1);

2.3,一对一

一张表中的数据有且仅有的对应另一张表中的一个数据,反之也是一样的

create table customer(
id int primary key auto_increment,
name char(20) not null,
qq char(20) not null,
phone char(16) not null
);

create table student(
id int priment key auto_increment,
name char(20) not null,
customer_id int unique,    #遇上一张表对应的数据必须是惟一的
foreign key(costomer_id) reference customer(id)
on update cascade
on update cascade
)

猜你喜欢

转载自blog.csdn.net/qq_42737056/article/details/82687978
今日推荐