购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 数据表操作

数据表也称为关系数据表,是数据库中的一种组织、管理、存储数据的单元,是数据库系统中的一个重要概念。一般来说,关系数据表可以想象为现实生活中的二维表单,如Excel数据表,只不过数据库环境中的关系数据表一般来说其所存储的数据量远大于日常生活中的表单,可以达到成千上万条,甚至几十万、上百万条。

2.2.1 数据表相关概念

关系数据表是存储业务信息的关键载体,数据表中以字段为最小存储单元,以类型定义数据格式,以记录的形式组织业务信息,以主键的形式标识记录的唯一性,以外键保证数据引用的完整性。

1.主键

2.2.1 数据表相关概念-主键和外键

主键(Primary Key)是数据表中非常重要的一个核心元素,用于标识数据表中记录的唯一性,通过主键能在数据表中找到唯一的相关数据记录,主键由数据表中的一个或多个字段承担。如在一个学生表中,每个学生的学号都是唯一的,这个属性就可以作为学生表的主键字段。

在如图2-6所示的学生表中,字段为:学号(sn)、姓名(name)、年龄(age)、专业(major)、学院(college)、班主任标识(teacher_id),其中学号(sn)字段为表中的主键。通过任一主键值都可以在表中确定唯一的记录。如通过学号(sn)的主键值“20230136”可以在表中找到对应标号为①的唯一记录,通过主键值“20230153”可以在表中找到对应标号为②的唯一记录。

图2-6 学生表

学号(sn)字段作为学生表中的主键字段,该字段的所有值都不能重复,必须保证其唯一性,即表中不能存在两个相同的学号(sn)字段值,如表中的第一行已经有一个为“20230123”的主键值,除此行之外的其他记录中不能存在以该值为主键的记录。转换为表中的业务意义可理解为,每个学生的学号是唯一的,通过学号就可以确定一个学生。

2.外键

外键(Foreign Key)是数据表中另外一个非常重要的核心元素,用于传递数据表之间的关联性,一个数据表的业务字段关联另一个数据表的唯一性字段就构成主外键引用关系,引用关联其他数据表的字段则声明为外键。

如图2-7所示教师表,表中有字段:教工号(teacher_id)、姓名(name)、年龄(age)、职称(rank)、学历(education),其中教工号(teacher_id)字段为表中的唯一性字段,即教工号的值在表中唯一,不能重复。

图2-7 教师表

在如图2-6所示的学生表中,字段班主任标识(teacher_id)的作用是记录表中每个学生所对应的班主任。但学生表中可以看到该字段的记录值为“T10001”“T10005”“T10008”“T10010”,并不是具体的教师,这是因为相关教师信息记录在另一张数据表中,也就是具体的教师信息记录在如图2-7所示的教师表中,必须通过学生表中的班主任标识(teacher_id)字段引用教师表中的唯一性字段(teacher_id)才能确定相关的教师信息,如图2-8所示。

图2-8 外键关联示意

如学生表中学号为“20230123”的“李小明”同学的班主任标识(teacher_id)字段值为“T10001”,对应于教师表的教工号(teacher_id)字段值“T10001”的记录信息为:姓名“刘大军”,年龄“45”,职称“副教授”,学历“本科”。这条记录即为李小明同学所对应的班主任的信息,则教师表中的教工号(teacher_id)字段即为学生表的外键。

外键的作用是为了保证数据引用的完整性,作为外键的字段要满足两方面的要求:一是必须保证外键在原表中的唯一性,如教工号(teacher_id)字段在教师表中必须是唯一的,不能出现重复值;二是引用字段的值必须在被引用表的外键字段值中存在,如学生表中班主任标识(teacher_id)字段值必须在教师表的教工号(teacher_id)字段中存在对应的被引用值。

3.数据类型分类

MySQL数据库支持标准SQL语句中的所有数值类型,根据现实生活中对信息描述的需要,MySQL数据库把数据信息分为整数类型、小数类型、字符串类型、日期类型,以及其他数据类型,具体相关分类如表2-2所示。

2.2.1 数据表相关概念-数据类型分类

表2-2 数据类型分类

(续)

2.2.2 数据表的创建

数据表存在于数据库节点中,所以在创建数据表之前需要先创建好相关的数据库,或直接在已存在的数据库节点中创建数据表。创建数据表的过程是定义数据列的属性过程,同时也是约束数据完整性的过程。

2.2.2 数据表的创建

1.在GUI工具上创建

1)在GUI工具的“Schemata”栏右击“demo”库节点,从弹出的快捷菜单中选择“Create New Table”命令,如图2-9所示。

图2-9 选择“Create New Table”命令

2)弹出“MySQL Table Editor”对话框,如图2-10所示。在“Table Name”输入表名“schools”;在“Column Name”栏输入相关的表字段:id、name、address、students、leader;在“Datatype”栏输入相关字段的数据类型,id表字段类型为“INTEGER”,另外4个表字段的类型为“VARCHAR(45)”,最后单击“Apply Changes”按钮,即完成在“demo”库上创建数据表。

图2-10 “MySQL Table Editor”对话框

2.通过SQL语句创建

通过SQL语句创建数据表是一种比较常用的做法,其过程是通过相关命令来实现创建表操作,在创建数据表前已先进入某个库节点,否则将不能执行相关的创建命令。

(1)进入库节点

进入库节点命令格式为:

用法示例:

(2)数据表创建

在创建一张新的数据表前除了要先进入某个库节点之外,还需要先检查该库中是否已存在相同名字的数据表,如已经存在,则不能创建,需要删除该同名表后才能创建。

数据表的创建语法:

SQL语句不区分大小写,每条语句的结尾一般用英文状态下的分号“;”表示语句的结束。创建数据表过程中,数据表名称可以任意,但不能使用SQL语句中的关键字,表中每个字段之间用英文状态下的逗号“,”隔开。如表2-3所示的顾客表中,有主键及其他业务列共8个字段,此表使用SQL语句创建过程具体如下。

表2-3 顾客(CUSTOMER)表字段结构

1)用SQL语句创建一个名称为“mydb”的数据库节点,库节点的名称可任意定义,但不能为SQL语句的关键字。

2)使用SQL语句,进入创建好的数据库节点“mydb”,表示在这个数据库节点上创建相关数据表。

3)按数据表的创建语法编写出顾客表的SQL创建语句。

表2-3中的字段物理名称与数据库环境中数据表的字段名相对应,数据表的字段类型为固定字节空间时,可以不用标出字段的长度,如INT、SMALLINT、DATE、FLOAT等类型,若字段类型为动态字节空间则需要指明字段的长度,如VARCHAR(45)。

在GUI工具中选择菜单“Tools”→“MySQL Command Line Client”命令,如图2-11所示,弹出MySQL的命令行客户端,即SQL语句的执行面板,如图2-12所示。

图2-11 选择“MySQL Command Line Client”命令

在MySQL命令行客户端按顺序执行以上1)~3)步的SQL语句,即可创建顾客表(customer),最后在GUI工具的库节点区刷新库节点,即可看到新创建的顾客表,如图2-13所示。

图2-12 MySQL命令行客户端

图2-13 新创建的顾客表

2.2.3 数据表的查看

数据表在某个数据库节点中创建好后,除了通过GUI工具进行查看外,还可以通过SQL语句进行查看库节点中存在哪些已经创建好的数据表,以及查询每张数据表的列结构、数据类型、约束等。

1.查看库节点中的数据表

库节中数据表查看语句格式为:

进入某个库节点,在SQL语句面板上执行“SHOW TABLES”语句后,即可在命令行面板中看到库节点中已经存在的数据表。

如图2-14所示为在SQL语句执行面板上,进行库节点数据表检索过程操作及相关检索结果。

图2-14 进行库节点数据表检索过程操作及相关检索结果

1)通过“use world”语句进入MySQL自带的库节点“world”。

2)通过“show tables”语句查询到“world”库节点中共有“city”“country”和“countrylanguage”3张数据表。

2.查看数据表结构

数据表的结构除了可以直接在GUI工具上查看外,也可以通过SQL语句来实现。实现查看数据表结构的关键字有“DESC”及“DESCRIBE”两个,前者为后者的缩写,功能作用是相同的。

数据表查看语句格式1:

用法示例:

数据表查看语句格式2:

用法示例:

在SQL语句执行面板上,查询数据表结构的详情展示如图2-15所示。

图2-15 用SQL语句查询数据表结构的详细展示

1)通过“use mydb”语句进入MySQL自带的库节点“mydb”。

2)通过“desc customer”语句查询到“mydb”库节点中的“customer”数据表结构,包括表中的字段“Field”、各字段类型“Type”,以及其他约束条件。

2.2.4 数据表结构的修改

数据表在库节点中创建好后,如果发现与实际需求不一致时可以对表结构进行必要的修改。数据表结构的修改包括数据表名称的变更、字段的增加、删除、更新,数据表结构的删除等操作。

2.2.4 数据表结构的修改

通过如下的SQL脚本在数据库中创建用户订单表(user_order),本节后面将以此数据表为载体来介绍相关内容。

本节以用户订单表(user_order)为操作对象讲解数据表结构的修改操作。右键单击用户订单表user_order,在弹出的快捷菜单中选择“Edit Table”命令,如图2-16所示,弹出表结构窗体,在其上可直接修改数据表结构。

图2-16 选择“Edit Table”命令

除了GUI操作外,更多的时候是要使用SQL语句来修改数据表结构的,现以如图2-17所示的用户订单表(user_order)为例,讲解修改数据表结构的SQL语法,修改数据表结构要使用SQL语句的中“ALTER TABLE”关键字。

图2-17 用户订单表(user_order)结构

1.添加数据表字段

如果数据表在创建时所设定的字段不够全面,则可以在创建完成后依据实际需要进行添加、补充。给数据表添加字段,要使用SQL语句中的“ADD COLUMN”“AFTER”等关键字。

添加数据表字段语句格式为:

在SQL命令行窗体下进入到对应数据表的库节点,并执行下面SQL语句。

以上SQL语句表示在用户订单表的“order_time”字段的后面添加一个数据类型为VARCHAR、长度为45的新字段“order_address”。“AFTER”为可选关键字,如省略此关键字则默认添加在数据表中所有字段的最后面。

SQL修改表结构语句执行完毕后,可以看到用户订单表中的“order_time”字段后,多了一个新字段“order_address”,如图2-18所示。

图2-18 添加新字段“order_address”后用户订单表(user_order)结构

2.修改数据表字段

数据表中的字段在数据表创建完成以后,还可以进行实际的变动、更新。字段的修改包括字段数据类型修改、默认值修改等方面。修改数据表字段,要使用SQL语句中的“MODIFY”关键字。

修改数据表字段语句格式为:

在SQL命令行窗体下进入到对应数据表的库节点,并执行下面SQL语句。

SQL语句执行完毕,则可以看到数据表中的“money”字段,原类型由FLOAT变为新类型DECIMAL(6,2),如图2-19所示。

图2-19 修改字段“money”后用户订单表(user_order)结构

3.删除数据表字段

数据表中的字段在数据表创建完成以后,如果发现表中有多余的字段,可以对相关字段进行删除。删除数据表字段,要使用SQL语句中的“DROP”关键字。

删除数据表字段语句格式为:

在SQL命令行窗体下进入到对应数据表的库节点,并执行下面SQL语句。

SQL语句执行完毕,则可以看到用户订单数据表中的“order_address”字段已经被删除,如图2-20所示。

图2-20 删除字段“order_address”后用户订单表(user_order)结构

4.修改数据表的名称

数据表的名称除在创建表时定义之外,在数据表创建完成以后也是可以进行必要、适当的修改、变更,以更好地满足实际的业务需求。修改数据表名称,要使用SQL语句中的“RENAME TO”关键字。

修改数据表名称语句格式为:

在SQL命令行窗体下进入到对应数据表的库节点,并执行修改表名SQL语句。

SQL语句执行完毕,则可以把用户订单表的名称由原来的“user_order”修改为新名称“new_user_order”,如图2-21所示。

图2-21 用户订单表名称修改

2.2.5 数据表结构的删除

数据表在库节点中创建好后,如果发现数据表的功能与实际需求不一致,甚至认为数据表是多余的,从数据库的管理及运行性能角度出发,则可以考虑对相关数据表进行删除。

数据表结构的删除操作可以通过GUI工具实现。右键单击数据表,在弹出的快捷菜单中选择“Drop Table”命令,如图2-22所示,可直接删除已经存在的数据表结构。

图2-22 GUI工具删除数据表结构

除了GUI操作外,更多的时候是使用要SQL语句来删除数据表结构,现以2.2.4节中的用户订单表(new_user_order)为例,来讲解删除数据表结构的SQL语法,删除数据表结构要使用SQL语句的中“DROP TABLE”关键字。

删除数据表结构语句格式为:

在SQL命令行窗体下进入到对应数据表的库节点,并执行删除数据表SQL语句。

SQL语句执行完毕,则数据表“new_user_order”被删除,此时执行“SHOW TABLES”语句,发现已经没有对应的数据表,再执行“DESC NEW_USER_ORDER”语句则直接抛出操作异常,提示数据表已经不存在,如图2-23所示。

图2-23 用户订单表(new_user_order)被删除 mX1xCxIHqQZv5gpMgt9feLL5C9bx087hC9roP0owH8Yl3ZYOdp4g65TE3HZN4VMY

点击中间区域
呼出菜单
上一章
目录
下一章
×