一约束(需要先创建库)
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 )