修改表结构(alter)
修改表名:alter table tb_name1 rename to new_name2;
修改字段名:alter table tb_name change name new_name data_type;
修改字段类型:alter table tb_name modify field_name data_type;
添加字段:alter table tb_name add field_name data_type;
删除字段:alter table tb_name drop field_name;
约束条件
约束类型: | 默认 | 非空 | 唯一 | 自增长 | 主键 | 外键 |
关键字: | default | not null | unique key | auto_increment | primary key | foreign key |
默认值(default)
create table tb_name(
id int default 20,
name varchar(20)
);
全字段插入时 例:insert into tb_name values (default, default, 20);
非空(not null)
create table tb_name(
id int not null,
name varchar(20)
);
唯一性(unique key)
表中该字段的值不能重复
create table tb_name(
id int unique key,
name varchar(20)
);
主键约束(primary key)
每张表都需要一个主键来体现唯一性,每张表里面只有一个主键。
主键 = 非空 + 唯一
create table tb_name(
id int primary key,
name varchar(20)
);
自增长(auto_increment)
会自动+1 一般是数值类型
自动编号,和主键组合使用
一个表咯只能有一个自增长
create table tb_name(
id int primary key auto_increment,
name varchar(20)
);
插入时:insert into tb_name values (default, 20); 他会自动+1
外键(foreign key)
保持数据的一致性,我有的你一定有,你没有的我绝对没有。
缺点:损耗性能
create table a (
id_a int primary key,
name varchar(20)
);
create table b(
id_b int primary key,
name varchar(20),
foreign key (id_b) references a(id_a)
);
b表中的id_b字段,只能添加id_a中已有的数据。
a表中id_a被参照的数据,不能被修改和删除,删除时必须先删除b表中的数据 再删除a表中数据
表关系
一对一
用外键的方式,把两个表的主键关联
##创建学生信息表
create table student_details (
in int primary key,
sex varchar(20) not null,
age int,
addresss carchar(20),
foreign key (id) reference student(s_id)
);
一对多
通过外键关联来实现这种关系
##创建学院表
create table department(
d_id int primary key auto_increment, ##学院ID
d_name varchar(20) not null ##学院名
);
##创建学生表
create table student(
s_id int primary key auto_increment, ##学生ID
s_name varchar(20) not null, ##学生名
dep_id int not null, ##所属学院
foreign key(dep_id) reference department(d_id) ##外键
);
insert into department values (1, '计算机学院'), (2, '外国语学院');
insert into student values (1, 'Jack', 1), (2, 'Tom', 2);
多对多
对于多对多关系,需要创建中间表实现。
##建立课程表
create table cours (
cours_id int,
cours_name varchar(20) not null,
);
##选课表(中间表)
create table select(
s_id int, #记录学生ID
cours_id int, ##记录课程ID
primary key(s_id, cours_id), ##联合主键
foreign key(s_id) reference student(s_id) , ##关联学生id
foreign key(cours_id) reference cours(cours_id) ##关联课程ID
);
insert into cours values (1, '高等数学'), (2, '大学英语);
insert into select values (1, 2), (2, 2),(1, 1), (2, 1)