《SQL入门经典》笔记(第三章:建立数据库之管理数据库对象)

本文深入探讨了数据库对象的概念,包括表、规划、完整性约束等,并详细解释了如何创建、修改、删除表以及理解主键、唯一性约束、外键等关键概念。同时介绍了如何在不同的规划下创建和管理具有相同名称的表。

1. 什么是数据库对象?

数据库对象用于存储或引用数据,需要被定义,例如表、试图、簇、序列、索引和异名(让表具有另一个名称)。

 

2. 什么是规划?

规划是与数据库某个用户名相关联的数据库对象集合。相应的用户名被称为“规划所有人”/“关联对象组的所有人”。

同一个数据库中可以在不同规划下有相同表名的不同表。如果没有指定规划,数据库默认选择所有同名的表。

一个数据库可以有多个规划人。例如“user1”登录到数据库创建了EMPLOYEE_TBL时,从数据库角度,这个表应该叫做“USER1.EMPLOYEE_TBL”。

在自己的规划里不必引用规划名称,两种表达均可:

EMPLOYEE_TBL
USER1.EMPLOYEE_TBL

 

 

3. 表:

是关系型数据库里最主要、最简单的数据存储形式。

列=字段,命名时学会合理使用下划线。

 

(1) 在create table table_name前,应学会花时间思考表的设计。就像写程序一样。

一个示例:

CREATE TABLE table_name
(field1 data_type [not null],
 field2 data_type [null]
);

CREATE TABLE EMPLOYEE_TBL
(EMP_ID CHAR(9) NOT NULL,
 EMP_PHONE INTEGER NULL
);

 

(2)ALTER TABLE可以添加删除列、修改列定义、添加和去除约束,在某些实现中还可以修改表SOTRAGE值。

 

修改表元素(列的属性,包含:数据类型、长度、有效位数、标度、列值能否为空):

ALTER TABLE EMPLOYEE_TBL MODIFY
EMP_ID VARCHAR(10);

 

添加列的一条基本规则是:如果表中已经有数据,不能添加为NOT NULL的列。原因:如果现有记录没有包含新列所需要的所有数据,就会自相矛盾。我们可以选择强行添加一个为NULL的列,然后挨个插入记录,再把列的属性改为NOT NULL。可以看到,很麻烦了。

 

添加自动增加的列:很多时候需要这个功能,比如没有合适的主键,自己增加一个ID需要作为主键。MYSQL提供了SERIAL方法为表生成真正的唯一值:

CREATE TABLE TEST_INCREAMENT(
ID SERIAL,
TEST_NAME VARCHAR(20));

 

修改列的一些通用规则:

  • 列长可增加到特定数据类型所允许的最大长度;
  • 缩短列长需要所有数据的长度都小于等于新长度;
  • 数值数据的位数可增加;想要缩短,要求同上;
  • 数值的小数位数可以增加或减少;
  • 列的数据类型一般是可以改变的

 

(3) 从现有表新建另一个表:

利用CREATE TABLE和SELECT语句可以复制现有的表。

CREATE TABLE NEW_TABLE_NAME AS
SELECT [*|column1, column2]
FROM TABLE_NAME
[WHERE]

 

(4)删除表:

使用restrict并且表被视图或约束所引用,DROP语句会报错。

CASCADE选项能成功删除,全部引用视图和约束全部删除。

drop table table_name [restrict\cascade]

删表尽量带上规划名,否则容易误删。

 

4. 完整性约束:

完整性约束用于确定关系型数据库的准确性和一致性。在关系型数据库中,数据完整性通过引用完整性实现。

 

5. 引用完整性:

(1)主键约束:

主键是表里一个或多个用于实现记录唯一性的字段(主键可以由多个字段构成),体现每条记录的唯一性。

我们可以使用如下主键定义方法。此时,主键是一个隐含约束,在创建表时产生。

CREATE TABLE EMPLOYEE_TBL(
EMP_ID CHAR(9) NOT NULL PRIMARY KEY,
EMP_NAME VARCHAR(20) NOT NULL);

此外还可以使用:

CREATE TABLE EMPLOYEE_TBL(
EMP_ID CHAR(9) NOT NULL,
EMP_NAME VARCHAR(20),
PRIMARY KEY(EMP_ID));

 

(2)唯一性约束:

唯一性约束要求表里某个字段的值在每条记录里都是唯一的,与主键类似。可以当做主键的备胎。从下面的例子可知,唯一性约束可为空值,但是存在的值必须保证其唯一性。

CREATE TABLE EMPLOYEE_TBL (
EMP_ID CHAR(9) NOT NULL PRIMARY KEY,
EMP_NAME VARCHAR(20) NOT NULL,
EMP_PHONE INTEGER(10) NULL UNIQUE);

 

(3)外键约束:

外键是子表里的一个字段,引用父表里的主键。外键约束是确保表与表之间引用完整性的主要机制。在下面的例子中,EMP_ID被定义为表EMPLOYEE_PAY_TBL的外键。

父子关系:子表EMPLOYEE_PAY_TBL里的字段EMP_ID的每一个值在父表EMPLOYEE_TBL的主键EMP_ID中都有对应的值。当父表删除该主键中的一个值,子表中对应的值也会被删除,这就是引用完整性。

CREATE TABLE EMPLOYEE_PAY_TST(
EMP_ID CHAR(9) NOT NULL,
PAY_RATE NUMBER(4,2) NOT NULL,
CONSTRAINT EMP_ID_FK FOREIGN KEY (EMP_ID) REFERENCES EMPLOYEE_TBL(EMP_ID));

除了上述方法,还可以用ALTER TABLE向表里添加外键:

ALTER TABLE EMPLOYEE_PAY_TBL
ADD CONSTRAINT ID_FK FOREIGN KEY (EMP_ID)
REFERENCES EMPLOYEE_TBL (EMP_ID)

 

(4) NOT NULL约束:

NOT NULL也可以被看做一个约束。

 

(5)检查约束:

检查(CHK)约束用于检查输入到特定字段的数据的有效性。检查约束可以为数据提供了另一层保护,检查数据是否处于一定范围。

 

(6)去除约束:

利用ALTER TABLE命令的DROP CONSTRAINT 选项可以去除已经定义的约束。例如下面去除主键约束。

ALTER TABLE EMPLOYEES DROP PRIMARY KEY;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值