• MySQL数据约束和关联查询


     1 默认值deafult:在建表的时候字段后使用 default ,默认值字段允许为null。

    2 非空 not null:在建表的时候字段后使用  not null。

    非空字段必须赋值,并且不能是null。

    3 唯一:主键和unique 字段必须唯一。

    注意:unique 对 null 值不起作用。只对有值的字段数据进行约束。

    4 主键primary key:就是not null 和 nuique的联合。

    5 自增长auto_increment:

    6 外键:约束两张表,主要是解决数据冗余。

    alter table tablename1

    add foreign key column name1

    references tablename2 column name2

    on delete restrict/cascade/set null;

    在建表的时候创建外键,在添加完字段后 foreign key(column ame) reference table name2  (column name2) on delete cascade/restrict/set null。

    注意:

    1)被约束的表为附表,约束别人的表是主表,外键设置在附表上。

    2)添加数据是先添加主表数据,再添加附表数据

    3)不能直接修改主表,先修改附表数据。

    4)删除数据,先删除附表数据,再删除主表数据。

    二、数据库表的设计原则,三大范式

    第一范式:要求表中的每个字段必须是不可分割的独立单元,第一范式(确保每列保持原子性)

    第二范式:要求每张表表达一个思想,表的每个字段都和主键有依赖,第二范式(确保表中的每列都和主键相关)

    第三范式:要求每张表主键之外的每个字段都只能和主键有直接依赖关系,第三范式(确保每列都和主键列直接相关,而不是间接相关)

    三、关联查询

    查询规则:1)确定查询那些表 2)确定查询哪些字段 3)表与表之间的连接条件

    例如:

    表1: student

    CREATE TABLE student(
    id INT PRIMARY KEY AUTO_INCREMENT,
    sname VARCHAR(20) NOT NULL,
    sgender CHAR(2) NOT NULL,
    sage SMALLINT NOT NULL,
    sphone VARCHAR(11),
    address VARCHAR(400));

    表2:englishScore

    CREATE TABLE englishScore(
    id INT PRIMARY KEY AUTO_INCREMENT,
    sscore SMALLINT,
    sid INT NOT NULL,
    FOREIGN KEY(sid) REFERENCES student(id) ON DELETE CASCADE
    );

    查询学生姓名和成绩

    3.1 内连接查询,两张表或多张表的连接条件都非空

    SELECT sname, sscore
    FROM student S, englishScore ES
    WHERE S.id = ES.sid;

    相当于是使用下面语句执行查询

    SELECT sname, sscore
    FROM student S
    INNER JOIN englishScore ES
    ON S.id = ES.sid;

    3.2 左外连接

    SELECT S.sname, ES.sscore
    FROM student S
    LEFT JOIN englishScore ES
    ON S.id = ES.sid;

    3.3 右外连接

    SELECT S.sname, ES.sscore
    FROM student S
    RIGHT JOIN englishScore ES
    ON S.id=ES.sid;
  • 相关阅读:
    UVA 11776
    NEFU 117
    hihocoder 1331
    NEFU 84
    虚拟机类加载机制
    动态规划 -- 01背包问题和完全背包问题
    动态规划 ---- 最长回文子串
    动态规划 ---- 最长公共子序列(Longest Common Subsequence, LCS)
    动态规划 ---- 最长不下降子序列(Longest Increasing Sequence, LIS)
    动态规划(Dynamic Programming, DP)---- 最大连续子序列和 & 力扣53. 最大子序和
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/6672387.html
Copyright © 2020-2023  润新知