当前位置 博文首页 > mataodehtml的博客:java学习之路——第四十三天

    mataodehtml的博客:java学习之路——第四十三天

    作者:[db:作者] 时间:2021-08-11 09:46

    12.21

    MySQL day05

    -- 完整性约束

    ## 唯一约束:unique

    -- 指定字段为唯一约束的时候,它的值不能重复,一张表中可以有多个唯一约束

    -- 将student表中的tel和ID设置为唯一约束

    DROP TABLE student;

    CREATE TABLE student(

    ?? sid INT PRIMARY KEY AUTO_INCREMENT,

    ?? sname CHAR(10),

    ?? tel CHAR(11) UNIQUE,

    ?? ID CHAR(18) UNIQUE

    );

    ?

    INSERT INTO student(sname,tel,ID) VALUES('张三','11111111111','124578963124578963');

    INSERT INTO student(sname,tel,ID) VALUES('李四','12','14578963124578963');

    ?

    ## 外键约束

    -- 外键和主键是建立表与表之间关系的唯一途径,往往一张表的主键是另一张表的外键

    -- 外键是另一张表的主键,例如员工表与部门表就存在关系,部门表的主键就是员工表的外键

    -- 语法:1.创建表的时候创建 2.通过修改表的结构创建外键

    -- constraint 外键名 foreign key(字段名) reference 相对于哪张表的外键(表主键);

    -- 创建一个用户表

    CREATE TABLE t_user(

    ? uid INT PRIMARY KEY AUTO_INCREMENT,

    ? uname CHAR(10)

    );

    -- 创建一个版块表,没一个版块都是由用户表中的用户管理

    CREATE TABLE t_section(

    ? sid INT PRIMARY KEY AUTO_INCREMENT,

    ? sname CHAR(10),

    ? u_id INT,

    ? CONSTRAINT fk_t_user FOREIGN KEY(u_id) REFERENCES t_user(uid)

    );

    ?

    INSERT INTO t_user(uname) VALUES('zs');

    INSERT INTO t_user(uname) VALUES('ls');

    INSERT INTO t_user(uname) VALUES('ww');

    ?

    INSERT INTO t_section(sname,u_id) VALUES('java',1);

    INSERT INTO t_section(sname,u_id) VALUES('.net',1);

    INSERT INTO t_section(sname,u_id) VALUES('php',2);

    ?-- 报错 ,u_id的值必须是t_user中的主键

    -- 查询zs管理哪个版块

    SELECT sname FROM t_section WHERE t_section.`u_id`=1;

    ?

    ## 表与表之间的关系

    -- 一对一? 一对多(多对一) 多对多

    ?CREATE DATABASE angStudent;

    ?USE angStudent;

    ?

    ## 多表之间的查询操作

    ## 内连接:多表中的公共部分,就是数学中的集合的交集

    -- 语法1:select 列名,列名。。。from 表名1,表名2 where 表名1.列名=表名2.列名;

    -- 语法2:select * from 表名1 inner join 表名2 on 条件;

    ?

    -- 外链接:1.左外连接:左表数据不动,右边表的数据往左表添加,不管是否找到,都将左边表全部数据

    -- select * from A left outer join B on A.A_id = B.B_id;

    -- 2.右外连接:右表数据不动,左边表的数据往右表添加,不管是否找到,都将右边表全部数据

    -- select * from A right outer join B on A.A_id = B.B_id;

    ?

    ## 全外连接:左外连接和右外连接的结果合并,且会去掉重复的记录

    -- 语法:select * from 表1 full outer join 表2 on 条件;但是mysql数据库不支持

    ?

    ## SQL语句子查询

    -- 子查询:把一个sql的查询结果作为另一个查询的参数存在

    -- 常见的子查询有where型子查询(将查询结果当成条件来用)

    -- from型子查询(将禅熏结果当成表来用)

    ?

    cs