7. SQL—创建和操作表
Posted 江湖@小小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7. SQL—创建和操作表相关的知识,希望对你有一定的参考价值。
SQL创建和操作表
1. 创建一个数据库
CREATE DATABASE database_name;
2. 设计数据库
许多因素会对设计的数据库造成影响:
1.安全问题
2.磁盘的可用空间
3.数据检索及响应的速度
4.数据更新的速度
5.多表归并返回数据的速度
6.RDBMS 对临时表的支持
磁盘空间是一个最为重要的因素,
尽管你可能会认为当磁盘的容量以 GB 计时这是不重要的,
不要忘记你的数据库越大,
返回数据库时间就越长,
如果你的表的设计工作做得非常糟糕,
那么你可能会在其中存入许多无用的数据,
相反的问题也会产生,
你可能已经建立了相当多的表,
所以看起来它们已经非常的合乎标准化的要求了,
尽管你的数据库结构非常合理,
但是在这个数据库上进行的查询工作将会花费相当多的时间,
数据库的设计风格有时会因为数据结构
并不能清楚地表达设计人的意图而使维护工作难于进行;
所以当你在进行代码和数据库的结构设计时,
将你的数据结构与你当时的意图进行详细的记录是非常重要的,
在数据库设计行业中,
它被称为数据字典.
2. 建立数据字典
数据字典是数据库设计人员非常重要的文档资料 它可以有以下功能:
- 数据字典的设计意图,谁将会使用它。
- 数据库的自身资料:用什么创建的数据库,数据库的大小是多少,日志文件的尺寸是多少(在一些 RDBMS 中它存储着数据库的操作信息)
- 任何数据库安装或者反安装的 SQL 原代码记录,包括导入/导出数据库的文档资料记录。
- 对每一个表的详细描述以及它的最终目的是什么。
- 每一个表的内部结构的资料,包括表中的所有字段,数据类型以及注释情况以及所有的索引和所有的视图。
- 对于每一个存储过程的原代码和触发机制。
- 说明数据库是否具有唯一值及非空值约束,并说明这些约束是关系型数据库管理系统强加的还是数据库编制人员设定的,以及约束在原代码中的作用范围。
3. 建立关键字段
在接下来的数据库设计工作中,最主要的目标就是建立你的表的结构,它包括主关键字和外关键字。其中主关键字用于完成下列目标:
- 保证表中的第一条记录都是唯一的(没有一条记录的内容完全与另外一条相同,至少主键不能相同)
- 对于一个特定的记录,它的所有的列都是必须的(列的内容不应出现重复)
- 在第二个目标中,如果列的内容在表中从头至尾都没有重复,那它就是主关键字。
外关键字则是在自己的关系中不唯一标识记录,但在其它关系中可用作对匹配字段链接的一种关键字。
假定有三个表 BILLS、BANK_ACCOUNTS、COMPANY
结构如下:
在 Bills 表中的主关键字段为 NAME 字段,这一字段是没有重复的,因为你只可能有一个支票的来对应 AMOUNT,实际上你可能通过支票号以及日期来保证它的唯一性,但在这里我们假定 NAME 就能做到这一点,而 ACCOUNT_ID 字段则是 BANK_ACCOUNT 的主关键字,COMPANY 表中的 NAME 字段是主关键字。
在 BILL 表中的 ACCOUNT_ID 与 BANK_ACCOUNT 表相关联,而 NAME 字段则将 BILL 表与 COMPANY 表相关联。
4. CREATE TABLE 语句
基本语法:
CREATE TABLE table_name
eg:
CREATE TABLE
BILLS
(
NAME CHAR(30),
AMOUNT NUMBER,
ACCOUNT_ID NUMBER
);
分析:
该语句创建了一个名字叫 BILL 的表,
BILL表中有三个字段
NAME,CCOUNT ACCOUNT_ID
其中,
NAME 字段为字符类型可以存储长度 30 的字符串,
而 AMOUNT和 AMOUNT_ID 则只参存储数字.
表名:
你可以在不同的所有者或工程中使用相同的表的名字,但在同一个工程中表的名字必须保证唯一.
ORACLE 所支持的数据类型:
5. 空值属性
CREATE TABLE BILLS
(
NAME CHAR(30) NOT NULL,
AMOUNT NUMBER,
ACCOUNT_ID NOT NULL
);
6. 唯一属性
你在设计表时的一个目标是要保证在表中有一个列的值是唯一的,这列或这个字段被称为主关键字,在一些数据库管理系统中允许你将某一列设成唯一值属性,如 ORACLE 和 SQL Server 可以让你对一个字段加以唯一值索引,这一特性可以保证你不在该字段中插入重复的数值。
7. ALTER TABLE 语句
ALTER TABLE 语句可以让数据库的设计者或设计人员在表创建以后修改它的结构。
ALTER TABLE 语句可以帮助你做两件事:
1.加入一列到已经存在的表中
2.修改已经存在的表中的某一列
ALTER TABLE 语法结构:
ALTER TABLE table_name
<
ADD column_name data_type; |
MODIFY column_name data_type;
>
ALTER TABLE BILLS MODIFY NAME CHAR(40);
注:
你可以增加或减少某一列的长度,
但是你不能将它减少到使修改后的长度小于其中的已有数据长度.
ALTER TABLE
NEW_BILLS
ADD
COMMENTS CHAR(80);
在使用 ALTER TABLE 时会有许多限制,
你不能用它来对一个数据库增加或删除字段;
它可以将一个列由 NOT NULL 改变为 NULL
而不必使用其它方法,
但是如果想把列由 NULL
改变为 NOT NULL 时,
则要求指定的字段中不能有 NULL 值.
ALTER TABLE
table_name
MODIFY
(
column_name data_type NULL
);
如果想把一列由 NULL 改变为 NOT NULL 你必需经过以下步骤:
1.确认要改变的列中有没有 NULL 值.
2.删掉你所发现的任何 NULL 值(删除该记录、更新该记录等).
3.使用 ALTER TABLE 命令.
8. DROP TABLE 语句
SQL 提供了一个可以从数据库去彻底地移去某个表的命令 DROP TABLE 可以从数据库中删除一个指定的表以及与之相关联的索引和视图。
DROP TABLE table_name;
DROP TABLE NEW_BILLS;
如果你想正确地删除一个表,
那么在删除表的时候最好给出它的所属的数据库或工程的名字;
DROP TABLE OWNER.NEW_BILLS;
9. DROP DATABASE 语句
一些数据库管理系统也提供了删除数据库 DROP DATABASE 的语句,它的使用方法与 DROP TABLE 相同。
语法:
DROP DATABASE database_name;
那么在删除表的时候最好给出它的所属的数据库或工程的名字;
DROP TABLE OWNER.NEW_BILLS;
9. DROP DATABASE 语句
一些数据库管理系统也提供了删除数据库 DROP DATABASE 的语句,
它的使用方法与 DROP TABLE 相同。
语法:
DROP DATABASE database_name;
以上是关于7. SQL—创建和操作表的主要内容,如果未能解决你的问题,请参考以下文章
spark关于join后有重复列的问题(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)(代码片段