zoukankan      html  css  js  c++  java
  • 02 mysql 基础二 (进阶)

    mysql 基础二

    阶段一 表约束

    1、not null 非空约束

    例子:

    create table tb1(
        id int,
        name varchar(20) not null
    );

    注意 空字符不等于null

    #手动,添加非空约束 (必须这个字段,没有NULL值)
    mysql> alter table tb1
        -> modify id int not null;
     
    # 取消非空约束
    mysql> alter table tb1
        -> modify id int ;
    2、unique key 唯一约束

    例子:

    create table tb2(
        id int unique key,
        name varchar(20)
    );
    ​
    # 确保字段中的值的唯一 
    
    
    #添加唯一约束
    ​
    mysql> alter table tb2
        -> add unique key(name)
        ->;
    
    
    #删除唯一约束
    ​
    mysql> alter table tb2
        -> drop key name;
    3、主键约束 primary key

    主键的作用:可以唯一标识一条数据,每张表里面只能有一个主键,。主键的主要目的是帮助MySQL以最快的速度查找到表中的某一条信息

    主键特性:非空且唯一。当表里没有主键的时,第一个出现的非空且为唯一的列,被当成主键。

    例子:

    create table tb3( 
       id int primary key,
       name varchar(20) not null
    ); 
    
    
    #删除主键约束
    ​
    mysql -> alter table tb3
          -> drop primary key;
    4、自增长 auto_increment

    auto_increment :自动编号,一般与主键组合使用。一个表里面只有一个自增默认情况下,起始值为1,每次的增量为1。

    例子:

    create table tb5(
       id intprimary key auto_increment,
       name varchar(20)
    )auto_increment=100;
    
    
    #删除自动增长
    ​
    mysql> alter table tb5
        -> modify id int;
    
    
    #增加自动增长auto_increment
    ​
    mysql> alter table tb5
        -> modify id int auto_increment;
    5、默认约束 default

    default :初始值设置,插入记录时,如果没有明确为字段赋值,则自动赋予默认值。

    例子:

    create table tb6(
      id int primary key auto_increment,
      name varchar(20) not null,
      age int not null default 18
    );
    
    
    # 删除default
    ​
    mysql> alter table tb6
        -> modify age int;
    
    
    # 手动添加default
    ​
    mysql> alter table tb6 
        -> modify age int default 20;
    6、外键约束 foreign key

    外键约束 :保持数据一致性,完整性实现一对多关系。

    外键必须关联到键上面去,一般情况是,关联到另一张表的主键

    (因为一个表只存一类信息。用外键来做参照,保证数据的一致性,可以减少数据余)

    ##表a
    ​
    create table a( 
       a_id int primary key auto_increment,
       a_name varchar(20) not null
    );
    ​
    insert into a values(1,'a1'),(2,'a2');
    ​
    ##表b
    ​
    create table b(
       b_id int primary key,
       b_name varchar(20) not null,
       fy_id int not null,
       constraint AB_idforeign key(fy_id)references  a(a_id)
    );
    ​
    insert into b value(1,'aa',2);
    
    
    #删除外键
    ​
    alter table  b drop foreign key AB_id;
    
    
    #增加外键
    ​
    mysql> alter table b
        -> add constraint AB_id foreign key(fy_id) references  a(a_id);

    # B表中的fy_id 字段,只能添加 a_id中已有的数据。
    # A表中a_id 被参照的数据,不能被修改和删除

    阶段二 表关系

    1、一对一关系 (学生详细)

    一对一 : 用外键的方式,把两个表的主键关联

    举例,学生表中有学号、姓名、学院,但学生还有些比如电话,家庭住址等比较私密的信息,这些信息不会放在学生表当中,会新建一个学生的详细信息表来存放。这时的学生表和学生的详细信息表两者的关系就是一对一的关系,因为一个学生只有一条详细信息。用主键加主键的方式来实现这种关系。

    # 学生表
    mysql> create table student(
        -> s_id int primary key,
        -> sex varchar(20),
        -> age int);
    # 插入数据 
    mysql> insert into student value(1,'',22);
    ​
    # 学生详细表
    mysql> create table student_x(
        -> id int primary key,
        -> name varchar(20),
        -> foreign key (id) references student(s_id)
        -> );
    # 插入数据
    mysql> insert into student_x value(1,'zcm');
     
    # 查看
    mysql> select * from student_x;
    +----+------+
    | id | name |
    +----+------+
    |  1 | zcm  |
    +----+------+
    ​
    mysql> select * from student;
    +------+------+------+
    | s_id | sex  | age  |
    +------+------+------+
    |    1 | nan  |   22 |
    2、一对多关系 (学生所属学院)

    ​ 举例,通常情况下,学校中一个学院可以有很多的学生,而一个学生只属于某一个学院。学院与学生之间的关系就是一对多的关系,通过外键关联来实现这种关系。

    注意:学生表中 只能添加 ,已有的学院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
       constraint SD_id foreign key(dept_id) references department(d_id)   #外键
    );
    ​
    # 插入数据
    insert into department values(1,'外语学院'),(2,'计算机学院');
    insert into student values(1,‘张三',2),(2,‘李四',1);
    ​
    # 查看
    mysql> select * from department;
    +------+-----------------+
    | d_id | d_name          |
    +------+-----------------+
    |    1 | 外语学院        |
    |    2 | 计算机学院      |
    +------+-----------------+
    ​
    mysql> select * from student_1;
    +------+--------+---------+
    | s_id | s_name | dept_id |
    +------+--------+---------+
    |    1 | 张三   |       2 |
    |    2 | 李四   |       1 |
    +------+--------+---------+
    3、 多对多关系 (学生选课)

    ​ 举例,学生要报名选修课,一个学生可以报名多门课程,一个课程有很多的学生报名,那么学生表和课程表两者就形成了多对多关系。对于多对多关系,需要创建中间表 实现。

    # 建立学生表
    mysql> create table student_d(
        -> s_id int primary key auto_increment,
        -> s_name varchar(20) not null
        -> );
    ​
    # 建立课程表
    mysql> create table cours(
        -> cours_id int primary key auto_increment,
        -> cours_name varchar(20) not null
        -> );
    ​
    # 选课表(中间表)
    mysql> create table ele(
        -> 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 student_d values(1,'张三'),(2,'李四'),(3,'王六');
    insert into cours values(1,'python编程'),(2,'大学英语'),(3,'音乐鉴赏');
    insert into ele values(1,3),(2,1),(3,2);
    ​
    # 查看
    mysql> select * from student_d;
    +------+--------+
    | s_id | s_name |
    +------+--------+
    |    1 | 张三   |
    |    2 | 李四   |
    |    3 | 王六   |
    +------+--------+
    3 rows in set (0.00 sec)
    ​
    mysql> select * from cours;
    +----------+--------------+
    | cours_id | cours_name   |
    +----------+--------------+
    |        1 | python编程   |
    |        2 | 大学英语     |
    |        3 | 音乐鉴赏     |
    +----------+--------------+
    3 rows in set (0.00 sec)
    ​
    mysql> select * from ele;
    +------+----------+
    | s_id | cours_id |
    +------+----------+
    |    2 |        1 |
    |    3 |        2 |
    |    1 |        3 |
    +------+----------+
    3 rows in set (0.00 sec)
  • 相关阅读:
    21天学通 C++(第8版) 内涵目录
    Python Linux系统管理与自动化运维
    零起点PYTHON足彩大数据与机器学习实盘分析
    Elasticsearch探索之路的障碍
    WEB程序设计 第7版
    Qt使用电容屏
    Hi3531D 交叉编译 Qt5.12.8
    Hi3531D 静态交叉编译 Qt5.13.2
    Qt 常用JSON解析示例
    Windows下搭建UBuntu + Qt 5开发环境
  • 原文地址:https://www.cnblogs.com/zcmq/p/9165223.html
Copyright © 2011-2022 走看看