数据定义:指对数据库对象的定义、删除和修改操作。

数据库对象主要包括数据表、视图、索引等。

数据定义功能通过CREATE、ALTER、DROP语句来完成。

按照操作对象分类来介绍数据定义的SQL语法。

5.3.1 数据表的创建和删除

  数据表是关系模式在关系数据库中的实例化,是数据库中唯一用于存储数据的数据库对象,它是整个数据库系统的基础。创建数据表是数据库建立的重要组成部分,由SQL语言中的CREATE TABLE语句来完成,其语法格式如下:

CREATE TABLE [schema_name.]table_name(

column1_name data_type [integrality_condition_on_column]

[,column2_namedata_type [integrality_condition_on_column]]

[, integrality_condition_on_TABLE]);

所涉及参数说明如下:

  tanble_name为所定义的数据表的名称,即表名。在一个数据库中表名必须唯一,而且表名应该能够概括该数据表保存数据所蕴涵的主题。

  schema_name为表所属的架构的名称。自SQL Server 2008开始,每数据库对象都属于某一个架构,如果在定义时不指定架构,则使用默认架构dbo。关于架构的作用和意义将在第12章中介绍。

  column1_name、column2_name表示字段名,或者称字段名。在一个表中,字段名也必须唯一,最好能够概括该字段的含义。

  data_type表示数据类型。根据需要,它可以设置为上节介绍的数据类型中某一种。

  integrality_condition_on_column表示字段级的完整性约束条件。这些约束条件只对相应的字段起作用,其取值如下:

    NOT NULL:选取该条件时,字段值不能为空。

    DEFAULT:设定字段的默认值,设置格式为:DEFAULT constant,其中constant表示常量。

    UNIQUE:选取该条件时,字段值不能重复。

    CHECK:用于设置字段的取值范围,格式为:CHECK(expression),其中expression为约束表达式。

    PRIMARY KEY:选取该条件时,相应字段被设置为主码(主键)。

    FOREIGN KEY:选取该条件时,相应字段被设置为外码(外键)。外码的设置涉及到两个表,其格式如下:

FOREIGN KEY column_name REFERENCES

                 foreign_table_name(foreign_column_name)

  integrality_condition_on_TABLE表示表级的完整性约束条件。

    与integrality_condition_on_column不同的是,integrality_condition_on_column仅仅作用于其对应的字段,而不能设置为同时作用于多个字段;integrality_condition_on_TABLE则可以作用多个字段或整个数据表。

    上述的约束条件中,除了NOT NULL和DEFAULT以外,其他的约束条件都可以在integrality_condition_on_TABLE中定义,使它们同时作用多个字段。凡是涉及到多个字段的约束条件都必须在integrality_condition_on_TABLE中定义。

注意: 由两个字段组成的主码必须利用PRIMARY KEY在  
                      integrality_condition_on_TABLE中定义。

SQL语言对大小写不敏感。

【例5.1】 表5.8给出了学生信息表(student)的基本结构。表中列出了所有的字段名及其数据类型和约束条件。

根据上述介绍的内容,我们不难构造出下列的CREATE TABLE语句,用于创建本例设定的学生信息表student:

CREATE TABLE student(

s_no char(8) PRIMARY KEY,

s_name char(8) NOT NULL,

s_sex char(2) CHECK(s_sex = '男' OR s_sex = '女'),

s_birthday smalldatetimeCHECK(s_birthday>='1970-1-1' AND
                                                         s_birthday<='2000-1-1'),

s_speciality varchar(50) DEFAULT  '计算机软件与理论',

s_avgrade numeric(3,1) CHECK(s_avgrade >= 0 AND s_avgrade <= 100),

s_dept varchar(50) DEFAULT  '计算机科学系'

);

本书涉及的SQL代码都是在SQL Server Management Studio(简称SSMS)中的SQL代码编辑器中执行。

【例子】  图5.1是执行上述CREATE TABLE语句来创建表student时的界面。

在以上的CREATE TABLE语句中,约束条件都是在字段级的完整性约束定义上实现的。实际上也可以在表级的完整性约束定义上实现上述的部分或全部约束条件。

下列的CREATE TABLE语句等价于上述语句:

CREATE TABLE student(

s_no char(8) ,

s_name char(8) NOT NULL,

s_sex char(2) ,

s_birthday smalldatetime,

s_speciality varchar(50) DEFAULT  '计算机软件与理论',

s_avgrade numeric(3,1) CHECK(s_avgrade >= 0 AND s_avgrade <= 100),

s_dept varchar(50) DEFAULT  '计算机科学系',

PRIMARY KEY(s_no),

CHECK(s_birthday>='1970-1-1' AND s_birthday<='2000-1-1'),

CHECK(s_sex ='男' OR s_sex ='女')

);

当涉及到多字段的约束条件时,则必须使用表级的完整性约束定义来实现。

如果需要将字段s_name和字段s_birthday设置为主键,则必须通过表级的完整性约束定义来实现,相应的语句如下:

CREATE TABLE student(

s_no char(8) ,

s_name char(8) NOT NULL,

s_sex char(2) CHECK(s_sex = '男' OR s_sex = '女'),

s_birthday smalldatetimeCHECK(s_birthday>='1970-1-1' AND s_birthday<='2000-1-1'),

s_speciality varchar(50) DEFAULT  '计算机软件与理论',

s_avgrade numeric(3,1) CHECK(s_avgrade >= 0 AND s_avgrade <= 100),

s_dept varchar(50) DEFAULT  '计算机科学系',

PRIMARY KEY(s_name, s_birthday)

);

【例5.2】  表5.9给出了导师信息表(supervisor)的基本结构,其中c_hour表示导师的工作量,其取值由其指导的学生数量s_n确定:每指导一位学生计15个课时。

根据上述要求,用AS将c_hour定义为计算列,结果CREATE TABLE语句代码如下:

CREATE TABLE supervisor(

t_noint PRIMARY KEY,

t_namevarchar(8) NOT NULL,

s_nint NOT NULL CHECK(s_n>=0 and s_n<=20),

c_hour AS s_n*15

);

当数据表已经确认不需要时,可将其删除。删除格式如下:

DROP TABLE table1_name [,table2_name,…];

【例子】 删除以上创建的表student,可用下列的SQL语句:

DROP TABLE student;

当一个数据表被删除时,其中的数据也将全部被删除。在使用删除语句的时候要特别慎重。

5.3.2 数据表的修改

  数据表的修改是指对数据表结构的修改,包括修改字段名和完整性约束条件、增加和删除字段等。这些操作主要由ALTER TABLE语句来完成。

(1)增加字段

在数据表中增加新字段的语法格式为:

ALTER TABLE table_name  

ADD new_column  data_type  [integrality_condition]

【例5.3】  在表student中增加一个新字段——nationality(民族),其长度为20个字符。

可由下列语句完成:

ALTER TABLE student

Add nationality varchar(20);

如果要使得新增加的字段为非空,则可在上述语句后添加“NOT NULL”来完成:

ALTER TABLE student

Add nationality varchar(20) NOT NULL;

但在执行上述语句时,表student必须为空。

(2)删除字段

删除某一个字段的语法格式如下:

ALTER TABLE table_name  

DROP COLUMN column_name

【例5.4】 删除表student中的字段nationality。

可以用下列语句完成:

ALTER TABLE  student

DROP COLUMN nationality

(3)修改字段的数据类型

  在数据表中,修改一个字段的数据类型的语法格式如下:

ALTER TABLE table_name  

ALTER COLUMN  column_name  new_data_type

column_name为待修改的字段,new_data_type为新的数据类型。

【例5.5】 将表student中的字段s_dept的长度由原来的50改为80。

该要求可下列语句实现:

ALTER TABLE student

ALTER COLUMN s_dept varchar(80);

将字段s_no由原来的字符型改为整型,则可用下列的语句:

ALTER TABLE student

ALTER COLUMN s_no int;

30441数据定义语言DDL的更多相关文章

  1. MySQL之数据定义语言(DDL)

    写在前面 本文中 [ 内容 ] 代表啊可选项,即可写可不写. SQL语言的基本功能介绍 SQL是一种结构化查询语言,主要有如下几个功能: 数据定义语言(DDL):全称Data Definition L ...

  2. ODPS SQL <for 数据定义语言 DDL>

    数据定义语言:(DDL) 建表语句: CREATE TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment ...

  3. <MySQL>入门三 数据定义语言 DDL

    -- DDL 数据定义语言 /* 库和表的管理 一.库的管理:创建.修改.删除 二.表的管理:创建.修改.删除 创建:create 修改:alter 删除:drop */ 1.库的管理 -- 库的管理 ...

  4. oracle 数据定义语言(DDL)语法

    DDL语言包括数据库对象的创建(create).删除(drop)和修改(alter)的操作 1.创建表语法 create table table_name( column_name datatype  ...

  5. 【MySQL笔记】数据定义语言DDL

    1.创建基本表   create table <表名> (<列名><数据类型>[列级完整性约束条件]                                 ...

  6. SQLite基础-4.数据定义语言(DDL)

    目录 一.创建数据库 1. 创建方式 2. 数据库命名规范 二. 创建表 1. 基本用法 2. 数据表命名规范 3. 字段命名规范 三. 删除表 一.创建数据库 1. 创建方式 在第二章中我们讲了如何 ...

  7. mysql数据库-mysql数据定义语言DDL (Data Definition Language)归类(六)

    0x01 创建数据库并指定字符集和排序规则 -- 三种实例写法 create database temptab2 character set utf8 collate utf8_general_ci; ...

  8. mysql数据定义语言DDL

    库的管理 创建 create 语法:create database 库名 [character set 字符集] # 案例:创建库 create database if not exists book ...

  9. SQL语句整理(二) 数据定义语言DDL

    前言: 这是我学数据库时整理的学习资料,基本上包括了所以的SQL语句的知识点. 我的教材是人大王珊老师的<数据库系统概论>. 因为是手打的,所以会用一些细节打错了,但都挺明显也不多(考完试 ...

随机推荐

  1. 实战caffe多标签分类——汽车品牌与车辆外观(C++接口)[详细实现+数据集]

    前言 很多地方我们都需要用到多标签分类,比如一张图片,上面有只蓝猫,另一张图片上面有一只黄狗,那么我们要识别的时候,就可以采用多标签分类这一思想了.任务一是识别出这个到底是猫还是狗?(类型)任务二是识 ...

  2. Backbone Collection

    http://yujianshenbing.iteye.com/blog/1748826 如果将一个Model对象比喻成数据库中的一条记录,那么Collection就是一张数据表.它表示为一个模型集合 ...

  3. Python中 如何将一个字符串分成一个个字符

    其实   一个字符串  实质也是 一个列表 就很简单了: a = ' for item in a: print(item) 打印结果: 121512 如果进而要统计字符出现的次数 , 那就很简单了.

  4. centos 6 防火墙开启端口无效问题

    昨天尝试redis在centos的安装,配置文件都检查了,外网就是不能访问 #添加端口开启 $ iptables -A INPUT -p tcp --dport 6379 -j ACCEPT #保存配 ...

  5. 利用Adorner制作用于图像裁切的选择框

    原文:利用Adorner制作用于图像裁切的选择框 前天,我写了一篇"使用Adorner显示WPF控件的边界点"的文章.这次,使用从Adorner继承来写一个用于图像裁切的选择框. ...

  6. Windows Presentation Foundation (WPF)中的命令(Commands)简述

    原文:Windows Presentation Foundation (WPF)中的命令(Commands)简述 ------------------------------------------- ...

  7. keras 的使用

    theano 以及 TensorFlow 是 keras 的 backend(后端支持),因此,keras 本质上是对 thenao 或者 TensorFlow 的进一步封装(wrapper). ke ...

  8. java堆 (转)

     Java栈和堆 ----这两个概念未知很长一段时间,终于找到了一个很好的文本.使用和共享 1. 堆(stack)堆(heap)他们是Java使用Ram本地存储的数据. 与C++不同,Java主动管理 ...

  9. ‘3 sigma’rule(68–95–99.7 rule)

    不限标准正太分布,任一正太分布(normal distribution)均可. 围绕均值附近求得的区间概率: (μ−k⋅σ,μ+k⋅σ) Pr(μ−σ≤x≤μ+σ)≈0.6827Pr(μ−2σ≤x≤μ ...

  10. HTML5 课程

    http://www.w3school.com.cn/html5/html_5_geolocation.asp HTML5 教程 HTML5 教程 HTML5 简单介绍 HTML5 视频 HTML5 ...