首页 > 数据库 >(数据库系统概论|王珊)第三章关系数据库标准语言SQL-第二、三节:数据定义

(数据库系统概论|王珊)第三章关系数据库标准语言SQL-第二、三节:数据定义

时间:2023-02-14 19:00:28浏览次数:57  
标签:删除 Course 王珊 CREATE 索引 关系数据库 Student SQL Cno

在这里插入图片描述

零:有关说明

(1)安装数据库与建表

(2)一些语法说明

由于我们使用的MYSQL所以有些语法和可能和SQL标准有所差异,甚至无法实现,总结如下

①:关于语法中的括号

  • <>:尖括号用于分隔字符串
  • []:方括号表示规则中的可选元素,可以选择也可以省略
  • {}:花括号表示聚集规则中的元素,必须明确指定

②:其它

  • 在SQLserver中我们可以用 CREATE DATABASE来创建数据库,而用CREATE SCHEMA来创建架构。但是在MYSQL中两者是同等作用的,可以认为没有区别。所以下面介绍时没有实际的演示例子
  • 在MYSQL中字符串用的不是单引号,而是``(键盘上数字1左边的那个)
  • 在MYSQL中创建模式时是没有后面的AUTHROIZATION <用户名>
  • MYSQL中大小写均可行

回归正题,SQL的数据定义主要包括以下内容

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

在这里插入图片描述

  • 注意修改视图和修改模式时只能删除重建

一:模式的定义和删除(SCHEMA)

注意:在SQLserver中我们可以用 CREATE DATABASE来创建数据库,而用CREATE SCHEMA来创建架构。但是在MYSQL中两者是同等作用的,可以认为没有区别。所以下面介绍时没有实际的演示例子

(1)定义模式

语法CREATE SCHEMA <模式名> AUTHORIZATION <用户名>(注意上面语法说明)

  • 如果没有指定 <模式名>, 那么<模式名>隐含为<用户名>
  • 定义模式本质是定义了一个命名空间
  • 创建模式的同时也可以创建其它东西:CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句> | <视图定义子句> | <授权定义子句>]

(2)删除模式

语法DROP SCHEMA <模式名><CASCADE|RESTRICT>(注意上面语法说明)

  • CASCADE:表示级联,也即删除模式时会删除该模式中所有数据库对象
  • RESTRICT:表示限制,也即在删除时如果该模式下定义了其它对象,则拒绝

二:基本表的定义、删除和修改(TABLE)

(1)定义基本表

语法
在这里插入图片描述

  • 建表的同时通常还可以定义与该表有关的完整性约束条件(参照前几节内容)
  • 如果完整性约束条件涉及该表的多个属性列,则必须定义在表级上,否则既可以在列级上也可以在表级上

演示
【例1】:建立学生表Student,其中Sno是主码,且Sname不能重复

CREATE TABLE Student
(
	Sno CHAR(9) PRIMARY KEY, //主码
	Sname CHAR(20) UNIQUE,	//唯一值
	Ssex	CHAR(2),
	Sage SMALLINT,
	Sdept CHAR(20)
);

在这里插入图片描述
【例2】:建立课程表Course,其中Cno是主码,Cname不能取空值,Cpno代表先修课(意思是学习该课前必须先学习某个课程),它是外码,需要参照本表,参照列为Cno

CREATE TABLE Course
(
	Cno CHAR(4) PRIMARY KEY,//主码
	Cname CHAR(20) NOT NULL,//非空
	Cpno CHAR(4),
	Credit SMALLINT,
	FOREIGN KEY (Cpno) REFERENCES Course(Cno)//表级完整性,Cpno是外码,被参照表示Course,被参照列是Cno
);

在这里插入图片描述
【例3】:建立学生选课表SC,其中SnoCno是外码,分别参照Student表的Sno列和Course表的Cno

  • SnoCnoSC的主码,必须使用表级完整性定义
CREATE TABLE SC
(
	Sno CHAR(9),
	Cno CHAR(4),
	Grade SMALLINT,

	PRIMARY KEY(Sno,Cno),//必须使用表级完整性定义
	FOREIGN KEY(Sno) REFERENCES Student(Sno),
	FOREIGN KEY(Cno) REFERENCES Course(Cno)
)

在这里插入图片描述

(2)修改基本表

语法
在这里插入图片描述

  • ADD:用于增加新列,新的列级完整性约束条件和新的表级完整性约束条件
  • DROP COLUMN:用于删除表中的列
  • DROP CONSTRAINT:用于删除指定的完整性约束条件
  • ALTER COLUMN:用于修改原有的列定义

演示

【例4】:向Student表中增加“入学时间”列,数据类型为“日期型”

ALTER TABLE Student ADD Sentrance DATE;

在这里插入图片描述
【例5】:将Student表“年龄”这一列的数据类型由改为 INT

ALTER TABLE Student ALTER COLUMN Sage CHAR;

【例6】:Course表中的Cname必须取唯一值

ALTER TABLE Course ADD UNIQUE(Cname);

【例7】:删除Student表中的“入学时间”列

ALTER TABLE Student DROP COLUMN Sentrance CASCADE;

在这里插入图片描述
【例8】:删除Course表中Cname的唯一约束

ALTER TABLE Course DROP INDEX Cname;

MYSQL在删除约束时有一些不一样,请点击查看:链接

(3)删除基本表

语法
在这里插入图片描述

  • 选择RESTRICT:欲删除的基本表不能被其他表的约束所引用(比如CHECK、FOREIGN KEY等)、不能有视图、不能有触发器(trigger),不能有存储过程或函数等
  • 选择CASCADE:没有限制条件,所有相关依赖对象连同基本表一起删除

演示

【例9】:删除Student表,使用RESTRICT

  • 由于SC表参照的是Student,所以删除不成功
DROP TABLE student RESTRICT;

在这里插入图片描述

三:索引的建立与删除(INDEX)

当表的数据量较大时,查询操作就会十分耗时。建立索引是加快查询速度的有效手段

  • 数据库索引类似于图书后面的索引,能快速定位需要查询的内容

在这里插入图片描述

用户可以根据应用环境的需要在基本表上建立一个或多个索引,类型有

  • 顺序文件上的索引
  • B+树索引
  • 散列索引
  • 位图索引

索引虽然能加快查询速度,但也有缺点

  • 需要占用一定的存储空间
  • 会提高查询速度但是会降低更新速度

(1)建立索引

语法
在这里插入图片描述

  • <表名>:要建立索引的基本表的名字
  • 索引可以建立在该表的一列或多列上,各列之间使用逗号分隔
  • 每个<列名>后面还可以用<次序>指定索引值的排列次序,可选ASC-升序(默认)或DESC-降序
  • UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录
  • CLUSTER:表示需要建立聚簇索引(第七章会讲到)

演示

【例10】:请按以下要求建立索引

  • Student表按学号升序建立唯一索引
  • Course表按课程号升序建立唯一索引
  • SC表按学号升序和课程号降序建立唯一索引
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);

(2)修改索引

语法
在这里插入图片描述
演示

【例11】:将SC表的SCno索引改名为SCSno

ALTER INDEX SCno RENAME TO SCSno

(3)删除索引

语法
在这里插入图片描述

演示
【例12】:删除SC表的SCSno索引

DROP INDEX SCSno

//如果失败,也可这样写
DROP INDEX SCSno on SC;
DROP INDEX SC.SCSno;

标签:删除,Course,王珊,CREATE,索引,关系数据库,Student,SQL,Cno
From: https://www.cnblogs.com/zhangxing-tech/p/17120609.html

相关文章

  • 在EF中执行SQL语句
    在EF中执行SQL语句 你可能要问,我用EF不就为了避免写SQL吗?如果要写SQL我不如直接用ADO.NET得了。话虽然这么说没错,可有些时候使用EF操作数据还是有一些不方便,例如让你......
  • 在EF中执行SQL语句新
    在EF中执行SQL语句 一、为什么要在EF中执行SQL语句 使用EF操作数据库,可以避免写SQL语句,完成使用Linq实现,但为什么还要在EF中执行SQL语句呢。如果要写SQL语句,完全可......
  • mysql交互式外部执行sql语句
    之前一直纠结mysql如何编写交互式脚本,像Oracle那样进行交互式输出,通过Oracle的方式交互式输出在mysql中格式是乱的,最后在网上发现了mysql原来有一个-e选项编写相关脚本如......
  • 常见的SQL注入绕过身份验证
    or1=1or1=1–or1=1#or1=1/*admin”or“1”=”1″–admin”or“1”=”1″#admin”or“1”=”1″/*admin”or1=1or“”=”admin”or1=1admin”or1=1–admin......
  • Mysql数据库安全防护
    1.禁止mysql以管理员的账号权限运行加固方法:在mysql的配置文件my.cnf中配置user=mysql2.设置root用户口令并修改登录名,且不存在空密码账户检查方法:登录mysql之后,输入这个......
  • 通过sql给数据库字段设置默认值
    #添加新字段并设置默认值altertable`user_tb`addcolumn`user_name`varchar(20)notnullDEFAULT'默认值';#修改原有默认值altertable`user_tb`altercolumn......
  • sql的常用语句
    增加表中数据:insertinto表名(列名1,列名2,...,列名n)values(值1,值2,...,值n);//按列名插入全部数据insertinto表名values(值1,值2,...,值n);//按列名顺序插入数据......
  • win10安装sql server2008遇到 无法安装.net 3.5 错误
        如图所示,多次安装无效。用镜像安装Dism/online/enable-feature/featurename:NetFX3/All/Source:H:\sources\sxs/LimitAccess也无效,出现错误为错误:0......
  • sqlServer 2019 开发版(Developer)下载及安装
    下载软件官网只有2022的,2019使用百度网盘进行下载安装下崽器选择自定义安装选择语言、以及安装位置点击“安装”安装SQLServer可能的故障以上步骤......
  • sqlsugar的行专列提示未将对象引用设置到对象实力,也就是null 情况的解决方法
    把开源内的方法扒过来加断点调吧  ToPivotList1因其方法内参数有thisIEnumerable<T>source,这样在使用的时候是可以在原查询中tolist后边点出来的.参数columnSel......