文章目录
总结
学习到的知识如下
create table stu(stu_id int primary key auto_increment,
name varchar(20),
age tinyint,
ins_id int not null);
表结构操作
1、修改表名
alter table tb_name rename to new_tb_name;
把原表名为tb_name的修改为new_tb_name;
2、修改字段
alter table new_tb_name change name sut_name datetime;
将表名为new_tb_name中字段为name的名字修改为stu_name,并且字段值的类型修改为datetime类型,
注:修改字段,必须带上修改后的字段类型
3、修改字段类型
alter table new_tb_name modify stu_name varchar(20);
将表名为new_tb_name中字段为sut_name的字段类型修改为varchar(20)
注:如果将字符类型的字段修改为类型为数值型,那么修改前需确认字符中是否是全部是数字,如果不是,会出现不匹配报错```
4、添加字段
alter table new_tb_name add sex varchar(10);
在表new_tb_name中添加一个新字段sex,且字段类型为varchar,长度为10的字段。
5、删除字段
alter table new_tb_name drop sex;
将表new_tb_name中字段为sex的字段删除
约束条件
是一种限制,通过对表中的数据做出限制,来确保数据的完整性,唯一性
1、默认约束
default
创建时约束
create table tb_name (id int default 0);
创建tb_name时制定字段id类型为int,默认值为0
加字段时制定
alter table tb_name add name varchar(20) default "name";
增加字段name时制定默认值为name
2、非空约束
not null
创建时制定
create table tb_name (id int not null,name varchar(20));
创建表tb_name时字段类型为int,插入数据时不能为空值,所以一般非空和默认约束配合使用。
同样可以在修改或者增加字段时指定。
3、唯一约束
unique key
创建时制定
create table tb_name(id int unique key);
创建表tb_name 时字段id唯一,插入值时id不能重复,否则会报错。
同样可以在修改或者增加字段时指定。
4、主键约束
primary key
一个表只能有一个主键
创建时指定
create table tb_name(id int primary key);
创建表tb_name时字段id为主键,主键是非空加唯一
删除主键约束
alter table tb_name drop primary key;
删除表tb_name的主键约束
5、自增长约束
auto_increment
一般和主键配合使用一个表只能有一个
创建时指定
create table tb_name(id int primary key auto_increment,name varchar(20));
创建表tb_name时,字段id类型int,且为主键,没插入一个数据,id会自动加1.
所以插入数据时,如果数据为空,必须制定主键值,或者加上default
insert into tb_name values(default,"jiuchen");
insert into tb_name values(null,"jiuchen");
6、外键约束
foreign key … references
外键约束是连接两个表,所以外键约束必须有两个表以上才行
创建时指定
表1:
create table tb_name1(tb1_id int primary key auto_increment,name varchar(20));
表2:加上外键约束
create table tb_name2(tb2_id int primary key,phone int,foreign key(tb2_id) references tb_name1(tb1_id));
上述表tb_name1和tb_name2其中都是以id为主键。且表2中的tb2_id为外键,与表tb_name1中tb1_id相关联。
注:
- 表tb_name2的tb2_id值表tb_name1中绝对有,单表tb_name1中有的tb1_id的值,表tb_name2不一定有。
- 删除表tb_name1中的数据时,如果表tb_name2中有id与表1对应,只有先删除tb_name2中对应id的数据,才能删除表tb_name1中的数据。
- 修改同样如此,即表tb_name2中有与表tb_name1中有相对应的id数据,那么直接修改表1的tb1_id,会报错。
修改外键约束
先查表的外键名
SHOW CREATE TABLE course;
然后删除
alter table course drop foreign key course_ibfk_1;
添加外键约束
alter table course add foreign key(col_id) reference college(col_id);
表关系
1、一对一
用主键加主键来实现一对一
表1:
create table stu_out(stu_id int primary key ,
name varchar(20),
age tinyint,
sex varchar(20));
表2:
create table stu_in(stu_id int primary key ,
grade varchar(20),
phone int,
address varchar(50)
foreign key(stu_id) references stu_out(stu_id));
以上的两个表stu_out和stu_in通过主键id形成了一对一的关系。
2、一对多关系
主键加主键,外键关联
表3:
create table deparment(dep_id int primary key auto_increment,
dep_name varchar(20));
表1:一对一关系中的表1加一个dep_id为非主键
create table stu_out(stu_id int primary key ,
name varchar(20),
age tinyint,
sex varchar(20)
dep_id int not null
foreign key(dep_id) references deparment(dep_id));
表1的主键stu_id已经与表2的主键关联起来了,但是表1中的dep_id又与表3中的主键
dep_id关联起来,这种情况就是一对多。
即一个主键可以用来对应多个主键
3、多对多
需要通过中间表来实现
通过中间表来联合主键,分别关联两个表(通过外键关联)
表4:
create table cours(cou_id int primary key auto_increment,
cou_name varchar(20) not null);
中间表:
create table select(stu_id int ,
cou_id int,
primary key(stu_id,cou_id),
foreign key(stu_id) references stu_out(stu_id),
foreign key(cou_id) references cours(cou_id));
其中 primary key(stu_id,cou_id),为联合主键,下面的两个foreign key分别关联两个表:表1 stu_out和表4 cours的主键。
即中间表的联合主键分别对应两个表的多个主键,即中间表的
stu_id 可以对应多个表1的stu_id;
cou_id可以对应多个表4的cou_id;
这样就形成了多对多的关系