数据表的创建与修改管理实验
实 验 目 的 (1) 掌握表的基础知识。
(2) 掌握使用Navicat或其他第三方管理工具和SQL语句创建表的方法。
(3) 掌握表的修改、查看、删除等基本操作方法。
(4) 掌握表中完整性约束的定义。
(5) 掌握完整性约束的作用
实验仪器、材料 一台安装了MySQL5.7的台式电脑
一、实验内容
(一) 表定义与修改操作
在schoolInfo数据库中创建一个 teacherInfo 表,表结构如下:
字段名 字段描述 数据类型 主键 外键 非空 唯一 自增
id 编号 INT(4) 是 否 是 是 是
num 教工号 INT(10) 否 否 是 是 否
name 姓名 VARCHAR(20) 否 否 是 否 否
sex 性别 VARCHAR(4) 否 否 是 否 否
birthday 出生日期 DATETIME 否 否 否 否 否
address 家庭住址 VARCHAR(50) 否 否 否 否 否
按照下列要求进行表定义操作:
(1)首先创建数据库schoolInfo。
CREATE DATABASE schoolInfo;
(2)创建 teacherInfo 表。
CREATE TABLE teacherInfo (
id INT(4) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,
num INT(10)NOT NULL UNIQUE ,
Name VARCHAR(20)NOT NULL,
Sex VARCHAR(4)NOT NULL,
Birthday DATETIME,
Address VARCHAR(50)
);
(3)将 teacherInfo 表的name字段的数据类型改为 VARCHAR(30)。
ALTER TABLE teacherInfo MODIFY name VARCHAR(30) NOT NULL;
(4)将birthday宁段的位置改到sex字段的前面。
ALTER TABLE teacherInfo MODIFY birthday DATETIME AFTER name;
(5)将num字段改名为t_id。
ALTER TABLE teacherInfo CHANGE num tid INT(10)NOT NULL;
(6)将 teacherInfo 表的address字段删除。
ALTER TABLE teacherInfo DROP address;
(7)在 teacherInfo 表中增加名为wages的字段,数据类型为FLOAT。
ALTER TABLE teacherInfo ADD wages FLOAT;
(8)将 teacherInfo 表改名为 teacherInfo Info。
ALTER TABLE teacherInfo RENAME to teacherInfolnfo;
(9)将 teacherInfo 表的存储引擎更改为MyISAM类型。
ALTER TABLE teacherInfolnfo ENGINE=MyISAM;
(二)创建staffinfo数据库,并在定义department表和worker表,完成两表之间的完整性约束。
Department表的结构
字段名 字段描述 数据类型 主键 外键 非空 唯一 自增
d_id 部门号 INT(4) 是 否 是 是 否
d_name 部门名 VARCHAR(20) 否 否 是 是 否
function 部门职能 VARCHAR(50) 否 否 否 否 否
address 部门位置 VARCHAR(20) 否 否 否 否 否
Worker表的结构
字段名 字段描述 数据类型 主键 外键 非空 唯一 自增
id 编号 INT(4) 是 否 是 是 是
num 员工号 INT(10) 否 否 是 是 否
d_id 部门号 INT(4) 否 是 否 否 否
name 姓名 VARCHAR(20) 否 否 是 否 否
sex 性别 VARCHAR(4) 否 否 是 否 否
birthday 出生日期 DATE 否 否 否 否 否
address 家庭住址 VARCHAR(50) 否 否 否 否 否
按照下列要求进行表操作:
(1)在staffinfo数据库下创建department表和worker表。
(2)删除department表。
操作如下:
(1)创建department表,代码如下:
CREATE TABLE department(
d_id INT(4)NOT NULL UNIQUE PRIMARY KEY,
d_name VARCHAR(20)NOT NULL UNIQUE ,
function VARCHAR(50),
address VARCHAR(50)
);
(2)创建worker表,代码如下:
CREATE TABLE worker(
id INT(4)NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,
numINT(10)NOT NULL UNIQUE ,
d_id INT(4),
name VARCHAR(20) NOT NULL,
sex VARCHAR(4) NOT NULL,
birthday DATE,
address VARCHAR(50),
CONSTRAINT worker_fk FOREIGN KEY(d_id)
REFERENCES department(d_id)
);
(3)删除department表,代码如下:
DROP TABLE department;
(4)删除worker表的外键约束,代码如下:
ALTER TABLE worker DROP FOREIGN KEY worker_fk;
(5)重新删除department表,代码如下:
DROP TABLE department;
二、实验原理与步骤
1.表定义与修改操作
(1)创建数据库schoolInfo
打开MySQL Command Line Cline,输入sql语句:create database schoolInfo;
创建成功。输入:show databases;查看如下:
(2)创建 teacherInfo 表
使用:use shoolInfo;选中数据库,再输入相应的sql语句创建teacherInfo表,如图所示:
(3)将 teacherInfo 表的name字段的数据类型改为 VARCHAR(30)。
ALTER TABLE teacherInfo MODIFY name VARCHAR(30) NOT NULL;
(4)将birthday宁段的位置改到sex字段的前面。
ALTER TABLE teacherInfo MODIFY birthday DATETIME AFTER name;
(5)将num字段改名为t_id。
ALTER TABLE teacherInfo CHANGE num tid INT(10)NOT NULL;
(6)将 teacherInfo 表的address字段删除。
ALTER TABLE teacherInfo DROP address;
(7)在 teacherInfo 表中增加名为wages的字段,数据类型为FLOAT。
ALTER TABLE teacherInfo ADD wages FLOAT;
(8)将 teacherInfo 表改名为 teacherInfo Info。
ALTER TABLE teacherInfo RENAME to teacherInfolnfo;
(9)将 teacherInfo 表的存储引擎更改为MyISAM类型。
ALTER TABLE teacherInfolnfo ENGINE=MyISAM;
2.创建staffinfo数据库,并在定义department表和worker表,完成两表之间的完整性约束。
打开MySQL Command Line Cline,输入sql语句:create database staffinfo;
(1)在staffinfo数据库下创建department表和worker表。
(2)删除department表。
操作如下:
(1)创建department表,代码如下:
CREATE TABLE department(
d_id INT(4)NOT NULL UNIQUE PRIMARY KEY,
d_name VARCHAR(20)NOT NULL UNIQUE,
‘function’ VARCHAR(50),
address VARCHAR(50)
);
(2)创建worker表,代码如下:
CREATE TABLE worker(
id INT(4)NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,
Num INT(10)NOT NULL UNIQUE ,
d_id INT(4),
name VARCHAR(20) NOT NULL,
sex VARCHAR(4) NOT NULL,
birthday DATE,
address VARCHAR(50),
CONSTRAINT worker_fk FOREIGN KEY(d_id)
REFERENCES department(d_id)
);
(3)删除department表,代码如下:
DROP TABLE department;
显示无法删除:
(4)删除worker表的外键约束,代码如下:
ALTER TABLE worker DROP FOREIGN KEY worker_fk;
(5)重新删除department表,代码如下:
DROP TABLE department;
删除成功。
三、实验总结与体会
1、关于NOT NULL
(1) 在定义基本表语句时,NOT NULL参数的作用是什么?
答:NOT NULL表示字段是否可以为空值。
(3)主码列修改成允许NULL能否操作?为什么?
答:不能。一张表只允许设置一个主键,这个主键可以是一个字段,也可以是一个字段组,即主键分为两种类型:单字段主键和多字段联合主键。在录入数据时,必须在所有主键字段中输入数据,即任何主键字段的值都不允许为NULL。
2、关于外码
(1) 根据下面设计的表结构,Employee表的外键能否设置成功?思考外码设置需要注意哪些问题?
Department表的结构
字段名 字段描述 数据类型 主键 外键
dno 部门号 INT(4)
dname 部门名 VARCHAR(20)
Employee表的结构
字段名 字段描述 数据类型 主键 外键
eno 员工号 INT(10)
dno 所在部门号 Char(10) √
name 姓名 VARCHAR(20)
答:可以设置成功。外键用来在两个表的数据之间建立联系,它可以是一列或者多列。一个表可以有一个或者多个外键。子表外键字段的取值,要么是NULL,要么是父表主键字段的取值,且关联字段的数据类型必须匹配。
(2)如果主表无数据,从表的数据能输入吗?
答:如果试图直接插入(insert)或者修改(update)子表的“外键值”,子表中的“外键值”必须是父表中的“主键值”,要么是NULL,否则插入(insert)或者修改(update)将操作失败。
(3)先创建从表,再创建主表是否可以?
答:可以。主表与从表之间,以关联值为关键字,建立相关表之间的联系。与创建顺序无关。
3、关于主码和唯一约束
(1) 唯一约束列是否允许NULL值?
答:唯一性约束要求该列唯一,允许为空,但只能出现一个空值。如果某个字段满足唯一性约束要求,则可以向该字段添加唯一性约束。与主键约束不同,一张表中可以存在多个唯一性约束,并且满足唯一性约束的字段可以取NULL值。
(2) 一张表可以设置几个主码,可以设置几个唯一约束?
答:一张表只能设置一个主码,可以设置多个唯一约束。