SQL基本语法规则(1)

本文详细介绍了数据库管理系统中模式的定义与删除,基本表的创建、修改和删除,以及索引的建立与删除。内容涵盖创建模式、定义基本表、数据类型、修改表结构、删除表及索引的操作,提供了丰富的示例来说明各种操作的语法和使用场景。
摘要由CSDN通过智能技术生成

1 数据定义

1.1 模式的定义与删除

1.1.1 定义模式

create schema <模式名> authorization <用户名>;

  1. 为用户WANG定义一个学生-课程模式S-T
create schema “S-T” authorization WANG;
  1. 语句没有指定<模式名>,<模式名>隐含为<用户名>
create schema authorization WANG;
  1. 为用户ZHANG创建了一个模式TEST,并且在其中定义一个表TAB1
create schema TEST authorization ZHANG
create table TAB1(COL1 smallint,
                  COL2 int,
                  COL3 char(20),
                  COL4 numeric(10, 3),
                  COL5 decima(5,2));
1.1.2 删除模式

drop schema <模式名> <cascade|restrict>

  • cascade(级联)

    • 删除模式的同时把该模式中所有的数据库对象全部删除
  • restrict(限制)

    • 如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。
    • 仅当该模式中没有任何下属的对象时才能执行。
  1. 删除模式ZHANG,同时该模式中定义的表TAB1也被删除
drop schema ZHANG cascade;

1.2 基本表的定义、删除和修改

1.2.1 定义基本表

create table <表名>(<列名> <数据类型> [列级完整性约束条件], <列名> <数据类型> [列级完整性约束条件], … , [<表级完整性约束条件>]);

  • 列级完整性约束条件:涉及相应属性列的完整性约束条件。
  • 表级完整性约束条件:涉及一个或多个属性列的完整性约束条件
  • 如果完整性约束条件设计到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
  1. 建立Student表。学号是主码,姓名取值唯一。
create table Student(Sno char(9) primary key,
                    Sname char(20) unique,
                    Ssex char(2),
                    Sage smallint,
                    Sdept char(20));
  1. 建立一个Course表
create table Course(Cno char(4) primary key,
                   Cname char(40),
                   Cpno char(4),									/*Cpno表示先修课*/
                   Ccredit smallint,
                   foreign key (Cpon) references Course (Cno));		/*Cpno是外码,被参照表是Course,被参照列是Cno*/
  1. 建立一个学生选课表SC
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));
1.2.2 数据类型

不同的关系数据库管理系统支持的数据类型不完全相同。

数据类型含义
char(n)长度为n的定长字符串
varchar(n)最大长度为n的变长字符串
clob字符串大对象
blob二进制大对象
int整型(4字节)
smallint短整型(2字节)
bigint大整形(8字节)
numeric(p, d)定点数,由p位数字(不包括符号、小数点)组成,小数点后面有d位数字
decimal(p, d), dec(p, d)同numeric
real取决于机器精度的单精度浮点数
double precision取决于机器精度的双精度浮点数
float(n)可选精度的浮点数,精度至少为n位数字
bollean逻辑布尔量
date日期,包含年、月、日,格式为YYYY-MM-DD
time时间,包含一日的时、分、秒,格式为HH:MM:SS
timestamp时间戳类型
interval时间间隔类型
1.2.3 模式与表
  • 法一:在表名中明显地给出模式名

    create table "S-T".Student(...);

  • 法二:在创建模式语句中同时创建表

  • 法三:设置所属地模式,这样在创建表时表名中不必给出模式名

1.2.3 修改基本表

alter table <表名> [add [column] <新列名> <数据类型> [完整性约束]]
[add <表级完整性约束>]
[drop [column] <列名> [cascade|restrict]]
[drop constraint <完整性约束名> [cascade|restrict]]
[alter column <列名> <数据类型>];

  • add子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件
  • drop constraint子句用于删除指定的完整性约束条件
  • alter column子句用于修改原有的列定义,包括修改列名和数据类型
  1. 向Student表增加“入学时间”列,其数据类型为日期型。
alter table Student add S_entrance date;
  1. 将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。
alter table Student alter column Sage int;
  1. 增加课程名称必须取唯一值的约束条件。
alter table Course add unique(Cname);
1.2.4 删除基本表

drop table <表名> [restrict|cascade];

  • 若选择restrict,则该表的删除是有限制条件的。欲删除的基本表不能被其他表的约束所引用(如check、foreign key等约束),不能有视图,不能有触发器,不能有存储过程或函数等。如果存在这些依赖该表的对象,则此表不能被删除。
  • 若选择cascade,则该表的删除没有限制条件。在删除基本表的同时,相关的依赖对象,例如视图,都将一起删除。
  • 默认情况是restrict
  1. 删除Student表
drop table Student cascade;

1.3 索引的建立与删除

1.3.1 建立索引

create [unique] [cluster] index <索引名> on <表名> (<列名> [<次序>], <列名> [<次序>] …);

  • 次序可选asc(升序)或desc(降序),默认值为asc。(物理存储不变,按关键字重新排序)
  • unique表明此索引的每一个索引值只对应唯一的数据记录。
  • cluster表示要建立的索引是聚簇索引
  1. 为Student、Course和SC三个表建立索引。其中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);
1.3.2 修改索引

alter index <旧索引名> rename to <新索引名>

  1. 将SC表的SCno索引名改为SCSno。
alter inted SCno rename to SCSno;
1.3.3 删除索引

drop index <索引名>

  • 删除索引时,系统会同时从数据字典中删去有关该索引的描述。
  1. 删除Student表的Stusname索引
drop index Stusname;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值