创建表

SQL不仅用于表数据操纵,还用来执行数据库和表的所有操作,包括表本身的创建和处理
一般有两种创建表的方式:
1.DBMS自带的交互式创建和管理数据库表的工具;
2.表也可以直接SQL操纵

SQL创建表,可以使用CREATE TABLE语句。交互式工具本质上也是SQL语句。

使用CREAT TABLE创建表时,必须给出以下信息:
1.新表的名字,在关键字CREATE TABLE后面给出;
2.表列的名字和定义,用逗号隔开;
3.有的DBMS需要指定表的位置;

CREATE TABLE Products
(prod_id CHAR(10) NOT NULL,vend_id CHAR(10) NOT NULL,prod_name CHAR(254) NOT NULL,prod_price DECIMAL(8,2) NOT NULL,prod_desc VARCHAR(1000) NULL
);

提示:替换现有的表
在创建新的表时,指定的表名必须不存在,否则会出错。防止意外覆盖已有的表, SQL 要求首先手工删除该表(请参阅后面的内容),然后再重建它,而不是简单地用创建表语句覆盖它。

使用 NULL 值

NULL值就是没有值或缺值。允许NULL值的列也允许在插入行时不给出该列的值。不允许NULL值的列不接受没有列值的行,换句话说,在插入或更新行时,该列必须有值。
每个表列要么是NULL列,要么是NOT NULL列,这种状态在创建时由表的定义规定。请看下面的例子:

CREATE TABLE Orders
(order_num INTEGER NOT NULL,order_date DATETIME NOT NULL,cust_id CHAR(10) NOT NULL
);

这条语句创建本书中所用的Orders表。Orders包含三列:订单号、订单日期和顾客 ID 。这三列都需要,因此每一列的定义都含有关键字NOT NULL。这就会阻止插入没有值的列。如果插入没有值的列,将返回错误,且插入失败。

警告:指定 NULL
在不指定NOT NULL时,多数 DBMS 认为指定的是NULL,但不是所有的 DBMS 都这样。 DB2 要求指定关键字NULL,如果不指定将出错。关于完整的语法信息,请参阅具体的 DBMS 文档。

提示:主键和 NULL 值
主键是其值唯一标识表中每一行的列。只有不允许NULL值的列可作为主键,允许NULL值的列不能作为唯一标识。

指定默认值

SQL 允许指定默认值,在插入行时如果不给出值, DBMS 将自动采用默认值。默认值在CREATE TABLE语句的列定义中用关键字DEFAULT指定。

CREATE TABLE OrderItems
(order_num  INTEGER     NOT NULL,order_item INTEGER     NOT NULL,prod_id        CHAR(10)    NOT NULL,quantity   INTEGER     NOT NULL    DEFAULT 1,item_price    DECIMAL     NOT NULL
);

更新表

更新表的定义,可以用ALTER TABLE语句。

理想情况下,不要在表中包含数据时对其进行更新。应该在表的设计过程中充分考虑未来可能的需求,避免今后对表的结构做大改动。
所有的 DBMS 都允许给现有的表增加列,不过对所增加列的数据类型(以及NULL和DEFAULT的使用)有所限制。
许多 DBMS 不允许删除或更改表中的列。
多数 DBMS 允许重新命名表中的列。
许多 DBMS 限制对已经填有数据的列进行更改,对未填有数据的列几乎没有限制。

ALTER TABLE更改表结构,必须给出下面的信息:
1.在ALTER TABLE之后给出要更改的表名(该表必须存在,否则出错)
2.列出要修改哪些更改

增加列

ALTER TABLE Vendors
ADD vend_phone CHAR(10);

删除列

ALTER TABLE Vendors
DROP COLUMN vend_phone;

复杂的表结构更改一般需要手动删除过程,它涉及以下步骤:

  1. 用新的列布局创建一个新表;
  2. 使用INSERT SELECT语句(关于这条语句的详细介绍,请参阅第 15 课)从旧表复制数据到新表。有必要的话,可以使用转换函数和计算字段;
  3. 检验包含所需数据的新表;
  4. 重命名旧表(如果确定,可以删除它);
  5. 用旧表原来的名字重命名新表;
  6. 根据需要,重新创建触发器、存储过程、索引和外键。

警告:小心使用 ALTER TABLE
使用ALTER TABLE要极为小心,应该在进行改动前做完整的备份(模式和数据的备份)。数据库表的更改不能撤销,如果增加了不需要的列,也许无法删除它们。类似地,如果删除了不应该删除的列,可能会丢失该列中的所有数据。

删除表

删除表(删除整个表而不是其内容)非常简单,使用DROP TABLE语句即可:

DROP TABLE CustCopy;

删除表没有确认,也不能撤销,执行这条语句将永久删除该表。
提示:使用关系规则防止意外删除
许多 DBMS 允许强制实施有关规则,防止删除与其他表相关联的表。在实施这些规则时,如果对某个表发布一条DROP TABLE语句,且该表是某个关系的组成部分,则 DBMS 将阻止这条语句执行,直到该关系被删除为止。如果允许,应该启用这些选项,它能防止意外删除有用的表。

重新命名表

每个 DBMS 对表重命名的支持有所不同。对于这个操作,不存在严格的标准。 DB2 、 MariaDB 、 MySQL 、 Oracle 和 PostgreSQL 用户使用RENAME语句, SQL Server 用户使用sp_rename存储过程, SQLite 用户使用ALTER TABLE语句。
所有重命名操作的基本语法都要求指定旧表名和新表名。不过,存在 DBMS 实现差异。关于具体的语法,请参阅相应的 DBMS 文档。

SQL必知必会-创建表和操纵表相关推荐

  1. 《SQL必知必会》第十三课 创建高级联结表 使用不同类型的联结 使用带聚集函数的联结 使用联结时应注意的问题

    第十三课 创建高级联结表 #使用表别名的原因 #不同的联结类型以及每类联结所使用的语法 #如何与联结一起使用聚集函数 #使用联结时的注意问题 一.使用表别名 [1]前面(第七课)介绍使用别名引用被检索 ...

  2. mysql日期维表sql文件_《MySQL必知必会》笔记(SQL练习+建表语句)

    站在巨人的肩上 Standing On Shoulders Of Giants 部分转自:https://www.jianshu.com/p/294502893128 https://blog.csd ...

  3. 1.《SQL必知必会》第五版 附录A样例表的添加

    mysql+workbench的初步使用 一.安装mysql+workbench 二.导入附录A的样例表 最近工作需要学习SQL,查阅了相关知识购买了图书<SQL必知必会>第五版.这本书没 ...

  4. asp sql ip地址排序_SQL必知必会读书笔记,30分钟入门SQL!

    点击上方SQL数据库开发,关注获取SQL视频教程 SQL专栏 SQL数据库基础知识汇总 SQL数据库高级知识汇总 来源:https://segmentfault.com/p/1210000011760 ...

  5. GitHub#SQL#:SQL必知必会

    https://github.com/CyC2018/Interview-Notebook 一.基础 二.创建表 三.修改表 四.插入 五.更新 六.删除 七.查询 八.排序 九.过滤 十.通配符 十 ...

  6. sql必知必会的数据初始化

    之前已经配置好mysql的工作环境,但是还缺少可以进行操作的文件,即缺少对应的一个数据库和其中的5个表. 下载相关代码 在网址http://www.forta.com/books/0672325675 ...

  7. 《MySQL必知必会》SQL文件

    <MySQL必知必会>SQL文件: 表的创建和外键绑定: # 在Mysql中取消外键约束 SET FOREIGN_KEY_CHECKS=0; DROP TABLE customers; D ...

  8. SQL Server必知必会

    SQL Server必知必会 2009-10-27-17:57:57 Structure     Query     Language:SQL 结构化       查询      语言 数据库产品: ...

  9. MySQL必知必会——第十五章联结表

    联结表 本章将介绍什么是联结,为什么要使用联结,如何编写使用联结的SELECT语句. 联结 SQL最强大的功能之一就是能在数据检索查询的执行中联结(join)表. 在能够有效地使用联结前,必须了解关系 ...

  10. 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作

    上个笔记主要介绍了利用SELECT语句检索单个/多个/所有列,并利用DISTINCT关键字检索具有唯一性的值.利用LIMIT/OFFSET子句限制结果:以及利用ORDER BY子句排序检索出的数据,主 ...

最新文章

  1. 4 月 24 日开播!基于神经网络建模的信息传播预测
  2. hdu 5792 World is Exploding 树状数组
  3. python程序开子进程打包成exe文件运行炸内存原因剖析
  4. Spring_day02--Spring的aop操作
  5. [渝粤教育] 盐城工学院 环境监测与仪器分析 参考 资料
  6. “约见”面试官系列之常见面试题第七篇说说Vue的生命周期(建议收藏)
  7. mysql 触发器 二进制_Mysql 二进制日志格式 对存储过程,函数,触发器,事件的记录方式的影响...
  8. JavaScriptCore.framework基本用法(一)
  9. 《高效能程序员的修炼》——程序员的八种境界
  10. TensorFlow实现去噪自编码器及使用—Masking Noise Auto Encoder
  11. qpsk 16qam matlab,谁能提供16qam和qpsk调制解调的ofdm程序
  12. Java面试汇总+答案
  13. 数据挖掘十大经典算法之——CART 算法
  14. Twig中控制保留小数位数
  15. shell脚本回到当前目录
  16. 已解决:检测到 #include 错误。请更新 includePath。已为此翻译单元(D:\Study\hello.cpp)禁用波形曲线。C/C++(1696)
  17. 华为手机微信如何与电脑连接到服务器,有华为手机,还用微信QQ传文件到电脑?Huawei share秒传了解一下...
  18. 利用Lumerical 有效实现太阳能电池光电特性仿真
  19. AndroidVideoCache研究
  20. 【物联网竞赛-ZigBee无线控制风扇】

热门文章

  1. devops 开源工具链_使用开源工具构建DevOps管道的初学者指南
  2. 第三方开源项目名称_如何为您的开源项目选择品牌名称
  3. ssh tar_2015年最佳情侣:tar和ssh
  4. (13)Vue.js 自定义指令
  5. JS模块化(立即执行函数)
  6. MySql | 为什么大家都在说 Select * 效率低
  7. Git笔记(34) 调试
  8. CAN笔记(14) STM32-M4 寄存器
  9. java百度地图坐标_java腾讯地图与百度地图坐标转换
  10. <笔记>光纤(光波导)中的传输特性1