篇幅较长O(∩_∩)O,内容主要分为三个部分:准备工作、模式的定义与删除、基本表的定义、删除与修改
引入:

关系数据库系统支持三级模式结构,其模式、外模式和内模式中的基本对象有模式、基本表、视图和索引等。因此SQL的数据定义功能包括模式定义、表定义、视图和索引的定义。一个关系数据库管理系统的实例中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象。

一、准备工作
1.新建数据库
create database stutest
2.在该库下新建用户,展开stutest库—> 安全性—> 用户—> 新建(没有用户又何来为用户定义模式呢)

二、模式的定义与删除

在SQL中,模式定义语句为

CREATE SCHEMA 模式名 AUTHORIZATION 用户名

若未指定模式名,则默认是dbo

1.为用户fmmpmo定义一个学生-课程模式S-T
create schema "S-T" authorization fmmpmo

执行后发现架构下多了一个模式S-T,创建成功

2.为用户fmmpmo创建一个模式test,并在该模式下新建表tab1,刷新展开表后会发现多了一个test.tab1,而不是dbo.tab1
create schema test authorization fmmpmo;
create table tab1(id int,username varchar(20),pwd varchar(20)
)

3.删除模式

注意,不能加关键字CASCADE和RESTRICT,因为本版本的SQL Server不支持。但仍要说一下:二者只能选其一,选择了CASCADE(级联),表示在杉树模式的同时把该模式中所有的数据库对象全部删除;选择了RESTRICT(限制),表示如果该模式中已经定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。只有当该模式中没有了任何下属的对象时才能执行

drop schema test

但输入该SQL语句后,发现仍然报错,内容如下:

这是因为我在当前模式下新建了一张名为tab1的表,他不允许我这样直接删除,需要把该模式下的内容都删除后才能执行删除模式的操作,直接默认是RESTRICT操作了,挺好。

drop table test.tab1


执行删除表操作后会发现该表没有了,再执行删除模式操作,发现test模式被删除


4.补充:

SQL语句可以以分号结尾,当然也可以不写,但并不是什么时候不写都是对的。当要执行的命令不止一个时,需要在命令与命令之间加上分号,否则报错。当然你也可以选中某个命令,表明只针对当前语句执行,此时不加分号也是可以的,因为已经确定了范围。还有关于模式,他必须作为命令语句的第一句,就像java中的super和this一样,否则即便你加了分号也无济于事。把第一行注释掉或者删除即可。

三、基本表的定义、删除与修改

说明:以下操作均为在stutest库下的dbo(默认)模式下的操作。

1.定义基本表
1.1 建立一个“学生”表Student
create table Student(Sno char(9) primary key, -- 列级完整性约束条件,Sno为主码Sname varchar(10), -- 表中的Sname不可有重复值Ssex char(2),Sage smallint,Sdept char(20)
)
1.2 建立一个课程表

Cpno是外码,被参照表和参照表是同一个表,都为Course,被参照列时Cno

create table Course(Cno char(4) primary key,Cname char(40) not null,Cpno char(4),Ccredit smallint,foreign key(Cpno) references Course(Cno)
)
1.3 建立学生选课表SC
create table SC(Sno char(9),Cno char(4),Grade smallint,primary key(Sno,Cno), -- 主码由两个属性构成foreign key(Sno) references Student(Sno),-- Sno是外码,被参照表是Studentforeign key(Cno) references Course(Cno) -- Cno是外码,被参照表是Course
)
2.补充:char与varchar的对比

两者都用于字符串类型,并且都可以指定最大长度,但char是定长字符串,即在不不超过最大长度的前提下,字符串无论长度多少,分配的空间都是最大长度那么大,此种适用于恒定不变的数据,比如学生学号。
varchar是可变字符串,即它的空间分配大小是随着该字符串的长度而变化的,就像c++中的vector,可以实现动态扩展,前提也是不能超过最大长度。我个人习惯用varchar,几乎没用过char。

3.模式与表

每一个基本表都属于某一个模式,默认是dbo,而一个模式可以包含多个基本表,定义表时一般可以有三种方式定义它所属的模式
①在表名中明显地给出模式名

create table "S-T".Student(...); -- Student所属模式为S-T

②在创建模式语句中同时创建表

create schema test authorization fmmpmo;
create table tab1(id int,username varchar(20),pwd varchar(20)
)

③设置所属的模式,这样在创建表时表名中不必给出模式名,系统根据搜索路径来确定,默认是$user,PUBLIC,即与用户名相同的模式名,当然也可以指定搜索路径

4.修改基本表

一律采用ALTER关键字开头:ADD用于增加新列,即增加新的属性;ALTER COLUMN用于修改某一列;DROP COLUMN用于删除某一列

4.1 向Student表中增加“入学时间”列,其类型为日期
alter table Student add Sentrance date;
4.2 将年龄的数据类型由字符型改为整数
alter table Student
alter column Sage int;
4.3 增加课程名必须取唯一值的约束条件
alter table Course
add unique(Cname)
5.删除基本表

同样不能写CASCADE和RESTRICT,因为不支持,还是一样的原理,RESTRICT表名删除有限制条件

drop table Student;

表上建立视图,若执行删除表操作也会有依赖

-- Student表上建立视图
create view IS_Student
as
select Sno,Sname,Sage
from Student
where Sdept = 'IS'
感想

一说SQL,脑海里经常想到删库跑路四个字,哪个程序员删库跑路并被传开后,估计他的程序生涯也快到头了,RESTRICT表明删除有限制条件,那么有没有一种方法,可以让有这些删库跑路的程序员不能得逞呢,比如某个公司的所有这种操作的最后一步是CEO,即便数据库人员可以一路删删删,改改改,到最后一步也需要经过CEO的同意,否则前边的一路猛如虎的操作也将失效,即做了一堆无效操作。。哈哈,这个想法很美好,但。。

SQL Server数据定义——模式与基本表操作相关推荐

  1. 数据库技术与应用(SQL Server)——【SQL Server数据定义功能】

    目录 数据库的创建 使用SQL语句创建 表的创建 添加约束 添加主键约束 外键约束 唯一值约束UNIQUE 非空约束NOT NULL 默认值约束DEFAULT CHECK约束 数据库的创建 使用SQL ...

  2. SQL Server 2005系列教学(6) 多表操作及子查询

    多表查询:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 人事 ...

  3. 如何将Excel数据导入到MS SQL Server已定义的数据表中

    1. 前提:已经在SQL Server中定义了所要导入数据的表(如stock,salvaging和out_stock三张表)的结构. 2. 如图,选择要导入数据的数据库(例如dlqx数据库),右键-& ...

  4. 学习SQL:SQL Server数据透视表

    In the previous few articles in this series, we've set the foundations on how to create a report. We ...

  5. SQL Server数据表中数据的增加(插入)、查询、修改、删除

    目录 零.码仙励志 一.数据表中数据的增加(插入) 二.数据表中数据的查询 三.数据表中数据的修改 四.数据表中数据的删除 零.码仙励志 伟人所达到并保持着的高处,并不是一飞就到的,而是他们在同伴们都 ...

  6. 如何使用SQL Server数据工具中的“可见性”选项降低报告的复杂性

    介绍 (Introduction) Far too often we encounter clients that are really too keen to establish all inclu ...

  7. 【数据库系统】第一部分 数据库基础(3) 关系数据库标准语言SQL(3) 数据定义

    本文属于「数据库系统」系列文章之一,这一系列着重于「数据库系统知识的学习与实践」.由于文章内容随时可能发生更新变动,欢迎关注和收藏数据库系统系列文章汇总目录一文以作备忘.需要特别说明的是,为了透彻理解 ...

  8. 两台SQL Server数据同步解决方案

    复制的概念 复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式.使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可 ...

  9. mysql对所有列的数据进行修改6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句 (3)...

    添加和删除列 使用ADD向表中添加新列,使用DROP删除现有列.DROP col_name是对标准SQL的MySQL扩展. 若要在表行的特定位置添加列,请使用FIRST col_name 或者 AFT ...

  10. SQL SERVER 数据库主键和外键的思考

    SQL SERVER 数据库主键和外键的思考 什么是主键: 主键是指表中一个列或者列的组合,其值能够唯一的标识表中的每一个行.这样的一列或者多列成为表的主键,通过它可以强制表的实体完整性.当创建或者更 ...

最新文章

  1. linux shell编程时报:bad substitution错误的解决办法
  2. 怎么修复手机服务器,新手机怎么恢复旧手机上的所有数据?
  3. SRM596 DIV2 250
  4. LeetCode Power of Three
  5. 06. 用css实现三角形
  6. 2 使用_索尼黑卡RX100M6的使用指南2
  7. java的svn插件maver_项目版本管理工具---MAVENSVN
  8. spring freemarker 获取后端的值
  9. Android开发:菜单栏Menu用法讲解
  10. UML快速指南(摘要)转载
  11. table导出excel php_php导出excel表格的方法分享(代码)
  12. (经典中的经典!)IT学生解惑真经(转),真会有人看完这15万字吗
  13. 报错 Duplicate keys detected
  14. 什么是CI/CD?它们与敏捷开发和devops的关系?
  15. word文档docx解密方法,word文档docx不能复制打印怎么办?
  16. 诺奖经济大师,数学天才赌徒,和“神秘的股市财富公式”
  17. 淘宝客订单查询API参数说明
  18. 解决Anaconda安装包时报错CondaVerificationError: The package for pytorch located at...
  19. 《企业大数据系统构建实战:技术、架构、实施与应用》——2.2 大数据职位构建体系...
  20. 驱动精灵 v9.61 去广告最终版绿色清爽单文件

热门文章

  1. netware php_Linux中NetWare客户端简易安装说明(转)
  2. 圣诞节到了,写一个炫酷的圣诞树和平安果,送给你最爱的人吧
  3. app开发人员配置【职责】
  4. wilcoxon秩和检验--学习笔记
  5. 数据结构重点选择题(高分必备)
  6. Android中免Root实现Hook的Dexposed框架实现原理解析以及如何实现应用的热修复
  7. MT6573台开发分支下配置多个项目的规范说明_mi
  8. 如何用计算机录制视频教程,电脑怎么利用软件录制视频教程
  9. 本科有计算机应用吗,计算机应用专业自考本科
  10. Activiti工作流程详解