一、表结构修改(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;

二、约束条件:

   (一)、概念:约束是一种限制,通过对表中的数据做出限制,来确保表中数据的完整性,唯一性。

             

mysql将字段改为非必填 mysql修改字段非必填_字段

  (二)、默认约束(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图)

                            

mysql将字段改为非必填 mysql修改字段非必填_mysql将字段改为非必填_02

用外键的方式,把两个表的主键关联。

举例:学生表中有学号、姓名、学院,但学生还有些比如电话,家庭住址等比较私密的信息,这些信息不会放

                                       在学生表当中,会新建一个学生的详细信息表来存放。这时的学生表和学生的详细信息表两者的关系就

                                       是一对一的关系,因为一个学生只有一条详细信息。用主键加主键的方式来实现这种关系。

-- 建立详细学生表:
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);  -- 表示学号为一的同学选择了音乐鉴赏这门课程