一、表结构修改(alter)(了解):
-- 修改表名:
alter table tb_name rename to new_name;
-- 修改字段名:
alter table tb_name change name new_name data_type;
-- 修改字段类型:
ALTER TABLE tb_name MODIFY field_name data_type;
-- 添加字段:
ALTER TABLE tb_name ADD [COLUMN] field_name data_type;
-- 删除字段:
ALTER TABLE tb_name DROP [COLUMN] field_name;
二、约束条件:
(一)、概念:约束是一种限制,通过对表中的数据做出限制,来确保表中数据的完整性,唯一性。
(二)、默认约束(default):
CREATE TABLE tb(
id int default ‘a’ , -- a为数值
name varchar(20)
);
注意:插入数据的时候,如果没有明确为字段赋值,则自动赋予默认值;
在没有设置默认值的情况下,默认值为NULL;
(三)、非空约束(not null) :
CREATE TABLE tb(
id int not null,
name varchar(20)
);
注意:1、限制一个字段的值不能为空;
2、 Insert的时候必须为该字段赋值;
3、空字符不等于NULL。
(四)、唯一约束(unique key) :
CREATE TABLE tb(
id int unique key,
name varchar(20)
);
注意:1、限制一个字段的值不重复;
2、该字段的数据不能出现重复的;
3、确保字段中值的唯一。
(五)、主键约束(primary key) :
CREATE TABLE tb(
id int primary key,
name varchar(20)
);
注意: 1、通常每张表都需要一个主键来体现唯一性;
2、每张表里面只能有一个主键;
3、主键 = 非空 + 唯一。
(六)、自增长约束(auto_increment) :
CREATE TABLE tb(
id int auto_increment,
name varchar(20)
);
注意:1、自动编号,和主键组合使用;
2、一个表里面只能有一个自增长;
3、auto_increment 要求用在主键上。
(七)、外键约束(foreign key):
1、特点:①、保持数据的一致性;
②、 我有的你一定有, 你没有的, 我绝对没有。
-- 表a
CREATE TABLE a(
id_a int primary key,
name varchar(20)
);
-- 表b
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 被参照的数据, 不能被修改和删除。
三、表关系:
一对一、一对多、多对多
示例:选课系统(E-R图)
用外键的方式,把两个表的主键关联。
举例:学生表中有学号、姓名、学院,但学生还有些比如电话,家庭住址等比较私密的信息,这些信息不会放
在学生表当中,会新建一个学生的详细信息表来存放。这时的学生表和学生的详细信息表两者的关系就
是一对一的关系,因为一个学生只有一条详细信息。用主键加主键的方式来实现这种关系。
-- 建立详细学生表:
create table student_details(
id int primary key,
sex varchar(20) not null,
age int,
address varchar(20) comment '家庭住址',
parents varchar(20),
home_num varchar(20),
foreign key (id) references 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, -- 学生名字
dept_id int not null, -- 所属学院 id
foreign key(dept_id) references department(d_id) -- 外键
);
insert into department values(1, "外国语学院"), (2, "计算机学院");
insert into student values(1, "小奋", 2),(2, "striver", 1);
(三)、多对多:
举例:学生要报名选修课,一个学生可以报名多门课程,一个课程有很多的学生报名,那么学生表和课程表两者就形
成了多对多关系。
对于多对多关系,需要创建中间表实现。
-- 建立课程表:
create table cours(
cours_id int primary key auto_increment,
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) references student(s_id), -- 关联学生id
foreign key(cours_id) references cours(cours_id) -- 关联 课程id
);
insert into course values (1, "Python程序设计"), (2, "大学英语"), (3, "高等数学");
insert into select_cou values(1, 3); -- 表示学号为一的同学选择了音乐鉴赏这门课程