MySQL-表的约束、多表关系、多表查询

约束

概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性。
分类:

  1. 主键约束:PRIMARY KEY
    含义:非空且唯一
    一张表只能有一个字段为主键,主键就是表中记录的唯一标识
       
 -- 在创建表时,添加主题约束
     CREATE TABLE stu(
         id INT PRIMARY KEY,
         age int
     );
 -- 删除主键
     ALTER TABLE stu DROP PRIMARY KEY
 -- 创建表后,添加主键
     ALTER TABLE stu MODIFY id INT PRIMARY KEY
 -- 自动增长:
     1.概念:如果某一列是数值类型的,使用AUTO_INCREMENT可以完成值的自动增长
     2.在创建表时,添加主键约束,并且完成主键自增长
         CREATE TABLE stu(
             id INT PRIMARY KEY AUTO_INCREMENT,
             name VARCHAR(10)
         );
     3.删除自动增长
         ALTER TABLE stu MODIFY id INT ;
     4.添加自动增长
         ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
  1. 非空约束:NOT NULL
-- 创建表时添加约束:
  CREATE TABLE stu(
       id int,
        name varchar(10) NOT NULL
      );
-- 创建表后,添加非空约束:
   ALTER TABLE stu modify name varchar(10) NOT NULL;
-- 删除非空约束:
   ALTER TABLE stu MODIFY name varchar(10);      
  1. 唯一约束:UNIQUE
-- 创建表时,添加唯一约束
    CREATE TABLE STU(
        id INT,
        phone_number VARCHAR(10) UNIQUE -- 添加唯一约束
    )
    注意MySQL中,唯一约束限定的列的值可以有多个null
-- 删除唯一约束
    ALTER TABLE stu DROP INDEX phone_number;
-- 在创建表后,添加唯一约束
     ALTER TABLE stu MODIFY phone_number VARCHAR(10) UNIQUE;
  1. 外键约束:FOREIGN KEY,让表与表产生关系,从而保证数据的正确性
-- 在创建表时,可以添加外键
  语法:
  CREATE TABLE 表名(
    ...
    外键列名 类型,
    CONSTRAINT 外键名称 FOREIGN KEY (外键列名称) REFERENCES 主表名称(主表列称)
    );
-- 删除外键
    ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
-- 创建表之后,添加外键
    ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表名称(主键列名称)
-- 级联操作
  -- 添加级联操作:
       语法: ALTER TABLE 表名 ADD  CONSTRAINT 外键名称
              FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE
  -- 分类:
       1.级联更新:ON UPDATE CASCADE
       2.级联删除:ON DELETE CASCADE

注意主键约束、唯一约束、外键约束的删除方式

多表之间的关系:
1.分类
    1.一对一:
        如:人和身份证
        分析:一个人只有一个身份证,一个身份证只能对应一个人
    2.一对多||多对一:
        如:部门和员工
        分析:一个部门可以有多个员工,一个员工只能所属一个部门
    3.多对多:
        如:学生和课程
        分析:一个学生可以选择多门课程,一门课程可以被很多学生选择
2.实现关系:
    1.一对多:
        在多的一方创建外键,指向一的主键
    2.多对多:
        多对多关系实现需要借助第三张中间表,中间表至少包含两个字段,这两个字段作为第三张表的外键
        分别指向两张表的主键,--联合主键
    3.一对一:
        一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键。
        一般直接放予一张表中
多表查询:

分类:

  1. 内连接查询
 1.隐式内连接:使用WHERE条件消除无用数据
        SELECT
            列名列表
        FROM
            表名列表
        WHERE.....
2.显式内连接:SELECT 字段列表 FROM 表名1 [INNER] JOIN 表名2 ON 条件
       INNER可省略
        SELECT
            列名列表
        FROM
            表名1
        INNER JOIN 表名2 ON 条件
内连接查询注意事项:
   1.从哪些表中查询数据
   2.条件是什么
   3.查询哪些字段
  1. 外链接查询
1.左外连接:
        语法: 
	        SELECT 
	          字段列表 
	        FROM1 
	        LEFT [OUTER] JOIN2 ON 条件;
	OUTER可省略
        查询的是左表所有数据以及其交集部分
2.右外连接:
        语法: 
        	SELECT 
        	  字段列表 
        	FROM1 
        	RIGHT [OUTER] JOIN2 ON 条件;
     查询的是右表所有数据以及其交集部分

一般使用左表较多,左外与右外可以随意切换,只需要将表1和表2位置互换即可

  1. 子查询:
    子查询不同情况

    1.子查询的结果是单行单列的
        子查询可以作为条件,使用运算符去判断。 运算符 > < >= <= =
        
    2.子查询的结果是多行单列的
        子查询可以作为条件,使用运算符IN来判断
        
    3.子查询的结果是多行多列的
        子查询可以作为一张虚拟表参与查询
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值