avatar

数据库概论三

SQL

SQL概述

特点
  1. 语言统一
  • 将数据定义语言DDL,数据操纵语言DML,数据控制语言DCL于一体
  • 可以独立完成数据库生命周期的全部活动
  1. 高度非过程化
  • 和非关系模型不同,无需了解数据存储过程
  1. 面向集合的操作方式
  2. 同一语法采用多种使用方式
  3. 语法简介
其他
  1. 三级模式结构
  1. 基本表
  1. 存储文件
    可以理解为内模式中具体数据库实现时的真正数据存储
  2. 视图

数据定义

概念
SQL对象

模式定义 表定义 视图定义 索引定义

举个mysql的例子来说,数据库表示mysql本身,mysql的模式SCHEMA等价于database

1
2
3
CREATE DATABASE XX;
CREATE SCHEMA XX;
#这两个行为时等价的

SCHEMA就是表的集合

数据字典
定义
  1. 模式
  • 定义

CREATE SCHEMA <模式名> AUTHORIZATION <用户名>[<表定义 子句>|<视图定义子句>|<授权定义子句>]

  • 删除
    DROP SCHEMA <模式名> <CASCADE|RESTRICT
    • CASCADE级联:直接删除模式中数据对象
    • RESTRICT限制:当模式中存在数据对象(表,视图等)拒绝删除
      这两个操作中,MYSQL只能使用部分功能
  • 定义
    CREATE TABLE <表名> (<列名> <数据类型> [<列级完整性约束>],...[<表级完整性约束>])
    • <列级完整性约束>仅仅涉及到单一列
    • <表级完整性约束>涉及到多个属性列
  • 例子
    • 建立“学生”表Student。学号是主码,姓名取值唯一。
      CREATE TABLE Student (id INT PRIMARY KEY,name VARCHAR(20) UNIQUE,sex CHAR(20),age TINYINT,dept VARCHAR(20));

    • 建立课程表
      CREATE TABLE Course(id INT PRIMARY KEY ,name VARCHAR(20) UNIQUE ,pId INT, credit SMALLINT ,FOREIGN KEY (pId) REFERENCES Course(id));

    • 建立选课表
      CREATE TABLE SC (sId INT,cId INT, grade SMALLINT, PRIMARY KEY(sId,cId),FOREIGN KEY (cId) REFERENCES Student(id),FOREIGN KEY (cId) references Coures(id));

  • 数据类型
    MYSQL参考
  • 修改表
    ALTER TABLE <表名> [ADD[COLUMN] <新列名> <数据类型> [ 完整性约束 ] ] [ADD <表级完整性约束>] [DROP [ COLUMN ] <列名> [CASCADE| RESTRICT] ] [DROP CONSTRAINT<完整性约束名>[ RESTRICT | CASCADE ] ] [ALTER COLUMN <列名><数据类型> ] ;

MYSQL中使用MODIFY COLUMN <列名><数据类型> CHANGE COLUMN <列名><数据类型> 来修改

  • 例子
    • 向Student添加"入学时间"
      ALTER TABLE Student ADD COLUMN entrance DATE;

    • mysql中将年龄修改为INT类型
      ALERT TABLE Student MODIFY COLUMN age INT;

    • mysql对于主键的添加 删除
      ALTER TABLE 表名 ADD CONSTRAINT PRIMARY KEY(列名)
      ALTER TABLE 表名 DROP PRIMARY KEY
      若要删除的主键被作为外键引用,则不能删除 | 若主键存在auto_increment则要修改该列,覆盖掉该属性,然后才能删除主键

    • 外键约束
      ALERT TABLE 表名 ADD CONSTRAINT FOREIGN KEY (列名) REFERENCES 表名(列名)
      ALERT TABLE 表名 DROP FOREIGN KEY 外键名
      通过show create table 表名可以查看外键名

    • 唯一约束
      ALTER TABLE 表名 ADD CONSTRAINT UNIQUE KEY (列名)
      ALTER TABLE 表名 DROP (KEY|INDEX) 唯一索引名
      唯一约束在mysql中通过索引删除

    • 默认
      ALTER TABLE 表名 ALTER 列名 {SET DEFAULT 值|DROP DEFAULT}

  1. 索引定义
  • 创建和删除
    CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
    ALTER TABLE 表名 DROP INDEX 索引名
  • coures表 name为unique key、自动创建了唯一索引,pid引用了id并且创建了一个非唯一索引
  • sc表中,我不明白为何没有创建sid的非唯一索引,总而言之mysql创建外键时会创建一个非唯一索引
    此处总结一部分实践操作:
  • mysql会给主键|外键创建索引,通过show indexes可查看
  • 主键为唯一索引,在数据查询|插入|修改时都会对B+进行一次查询,也就是说sql语句中使用索引当作条件效率会高
  • mysql会给外键创建一个非唯一索引,也就是说对于外键当查询条件效率也不会低
  • 可以猜测的是当对外键进行操作时,会根据外键约束去查询引用的键,确定是否违反了引用完整性
文章作者: fancylight
文章链接: https://www.fancylight.top/2019/05/09/%E6%95%B0%E6%8D%AE%E5%BA%93%E6%A6%82%E8%AE%BA%E4%B8%89/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 博客
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论