zoukankan      html  css  js  c++  java
  • mysql约束

    默认约束(default)

    CREATE TABLE tb(
        id int default ‘a’ ,
        name varchar(20)
    );

    插入数据的时候,如果没有明确为字段赋值,
    则自动赋予默认值

    在没有设置默认值的情况下,默认值为NULL

    非空约束(not null)

    CREATE TABLE tb(
        id int not null,
        name varchar(20)
    );

    限制一个字段的值不能为空,
    Insert的时候必须为该字段赋值
    空字符不等于NULL

    唯一约束(unique key)

    CREATE TABLE tb(
        id int unique key,
        name varchar(20)
    );

    限制一个字段的值不重复,
    该字段的数据不能出现重复的
    确保字段中值的唯一

    主键约束(primary key)

    CREATE TABLE tb(
        id int primary key,
        name varchar(20)
    );

    通常每张表都需要一个主键来体现唯一性
    每张表里面只能有一个主键
    主键  =  非空 + 唯一

    自增长约束(auto_increment)

    CREATE TABLE tb(
        id int auto_increment,
        name varchar(20)
    );

    指定由哪个位置开始自增:

    CREATE TABLE tb(
        id int auto_increment,
        name varchar(20)
    )auto_increment=100;

    自动编号,和主键组合使用,
    一个表里面只能有一个自增长
    auto_increment 要求用在主键上

    外键约束(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)
    );

    1. B表中的id_b字段,只能添加 id_a中已有的数据。
    2. A表中id_a  被参照的数据, 不能被修改和删除

    那么到这里,约束就这些啦,我们写简单的表结构游戏;

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

    # 学生表(一对一字段)

    create table student(
    id int primary key auto_increment,
    name varchar(20) not null
    );

    #  学生详细信息表(一对一字段)

    create table student_datailes(
    id_x int primary key,
    sex varchar(20),
    age int,
    height int not null,
    foreign key (id_x) references student(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)   #外键
    );

    多对多关系(学生选课)

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

    #建立课程表:

    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
    );

     那么 现在 :学院表,学生表,课程表,选课表, 4张表已经关联在一起了,我们可以插入参数了。

    # 插入学院表数据

    insert into department(d_id, d_name) VALUES(1,'机点'),(2,'计算机'),(3,'外语')

    # 插入学生表数据

    insert into student(s_id, s_name, depy_id) VALUES(1, '李牧', 2),(2, '测试', 3),(3, '吃啥', 3),(4, '长度', 2),(5, '地方', 1),(6, '答复', 1)

    # 插入课程表数据

    insert into cours(cours_id, counr_name) values (1,'python'),
    (2,'英语史'),
    (3,'java'),
    (4,'古英语'),
    (5,'机械设计'),
    (6,'机械原理')

    # 插入选课表  (中间表)数据

    insert into testKey(s_id, cours_id) values(1,1),(1,3),(2,2),(2,4),(3,5),(3,6)

    到这里,数据就插入完成了。

    查询一下看看:

    SELECT d_name as '学科',s_name as '姓名' from student inner join department on student.depy_id = department.d_id 
    inner join testKey on testKey.s_id=student.s_id
    inner join cours on cours.cours_id=testKey.cours_id
    where d_name = '外语'

    结果如下:

    以上做为学习总结,思路有点乱。

    作者:含笑半步颠√

    博客链接:https://www.cnblogs.com/lixy-88428977

    声明:本文为博主学习感悟总结,水平有限,如果不当,欢迎指正。如果您认为还不错,欢迎转载。转载与引用请注明作者及出处。

  • 相关阅读:
    网站访问量大 怎样优化mysql数据库
    BootStrap 模态框禁用空白处点击关闭
    常用SQL语句
    诅咒JavaScript之----ArcGIS JavaScript 点聚合 ClusterLayer
    模态框与 天地图地图控件冲突
    FXK Javascript
    从列表中或数组中随机抽取固定数量的元素组成新的数组或列表
    wangEditor
    手把手教你用vue-cli构建一个简单的路由应用
    解决eclipse端口被占用的问题
  • 原文地址:https://www.cnblogs.com/lixy-88428977/p/9557371.html
Copyright © 2011-2022 走看看