SQL第17课——创建和操纵表

本课讲创建,更改和删除表的基本知识。

17.1 创建表

一般有两种创建表的方法:

  1. 多数DBMS都具有交互式创建和管理数据库表的工具;

  2. 表也可以直接用SQL语句操纵。

程序创建表:create table语句,使用交互式工具实际上就是使用SQL语句,这些语句不是用户自己写的,是界面工具会自动生成并执行相应的SQL语句。(不同的SQL实现,create table语法可能不同)

17.1.1 表创建基础

利用create table创建表,必须给出以下信息:

|--------------------------------|
| 1. 新表的名字,在关键字create table之后给出; |
| 2. 表列的名字和定义,用逗号分隔; |
| 3. 有的DBMS还要求指定表的位置。 |
[create table创建表满足项]

**例:**创建所用的products表。

表的样子:

创建:(注意:已经存在的表不能二次创建)

列名必须唯一,后跟列的数据的类型。

!!!不同的DBMS,即使具有相同名称的数据类型也可能代表不同的东西。

|------------------------------------|------------------------------|
| 字符串 char | 1~255个字符的定长字符串。它的长度必须在创建时规定 |
| 数值数据 decimal(或者numeric) | 定点或精度可变的浮点值 |
| 字符串 varchar(或long, memo, text) | 变长文本 |
[数据类型解释1]

不同的DBMS的create table的语法有所不同,这条语句在绝大多数DBMS中有效,但对于DB2,必须从最后一列中去掉null.

**!!!替换现有的表:**创建新表,指定的表名必须不存在,防止意外覆盖已有的表,SQL要求首先手工删除该表,再重建,而不是简单地用创建表语句覆盖它。

17.1.2 使用null值

**null值:**就是没有值或者缺值。允许mull值的列也允许在插入行时不给出该列的值。

每一列的定义都含有关键字not null,这会阻止插入没有值的列,如果插入没有值的列,讲返回错误且插入失败。

|----------------------------------|------------------------------------|
| 数值数据 integer (或int) | 4字节整数值,支持-2147483648~2147483647的数 |
| 日期和时间数据 datetime(或timestamp) | 日期时间值 |
[数据类型解释2]

**例:**创建混合了null和not null列的表

null为默认设置,如果不指定not null,就认定指定的是null.

**!!!**有些DBMS要求指定关键字null,不指定会出错。

!!!主键是其值唯一标识表中每一行的列。只能是not null的。

**null:**没有值

**'':**空字符串,是一个有效值,not null

17.1.3 指定默认值

SQL允许指定默认值,插入行时不给出值,将采用默认值。

默认值 在create table语句的列定义中用关键字default指定

例:

**defulat 1:**指示DBMS,如果不给出数量则使用数量1.

默认值常用于日期或时间戳列,将系统日期用作默认日期。

MySQL:指定default current_date()获得系统日期的命令。

17.2 更新表

使用alter table语句更新表定义,不同的DBMS所允许更新的内容差别很大。

|-------------------------------------------------------|
| 1. 不要在表中包含数据时进行更新。在设计表过程中充分考虑未来可能的需求,避免今后对表的结构做大改动。 |
| 2. 所有DBMS允许给现有的表增加列,但是对增加列的数据类型(null,和default的使用)有限制。 |
| 3. 许多DBMS不允许删除或更改表中的列。 |
| 4. 多数DBMS允许重新命名表中的列。 |
| 5. 许多DBMS限制已经填有数据的列进行更改,对未填有数据的列几乎没有限制。 |
[alter table使用注意事项]

alter table更改表结构,必须给出下面的信息:

  1. alter table之后给出要更改的表名(表必须存在,否则将出错)

  2. 列出要做哪些更改。

**例:**对已有表增加列(所有DBMS都支持的唯一操作)

增加了一列vend_phone

更改或删除列,增加约束或增加键,这些操作也使用类似的语法。

**例:**并非对所有DBMS都有效,

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

  1. 用新的列布局创建一个新表;

  2. 使用insert select 语句(15课)从旧表复制数据到新表。有必要的话,使用转换函数和计算字段;

  3. 检验包含所需数据的新表;

  4. 重命名旧表(如果确定,可以删除它)

  5. 用旧表原来的名字重命名新表;

  6. 根据需要,重新创建触发器,存储过程,索引和外键。

使用alter table之前,应该做好完整的备份(表结构和数据备份)!!!数据库表的更改不能撤销。

17.3 删除表

删除表(整个表,而不是其内容),使用drop table语句。

17.4 重命名表

|-----------------------------------------|-------------|
| DB2, MariaDB, MySQL, Oracle, PostgreSQL | rename |
| SQL Server | sp_rename |
| SQLite | alter table |

都要求指定旧表名和新表名。

相关推荐
Mr.1339 分钟前
数据库的三范式是什么?
数据库
Cachel wood1 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
Python之栈1 小时前
【无标题】
数据库·python·mysql
风_流沙1 小时前
java 对ElasticSearch数据库操作封装工具类(对你是否适用嘞)
java·数据库·elasticsearch
亽仒凣凣1 小时前
Windows安装Redis图文教程
数据库·windows·redis
亦世凡华、1 小时前
MySQL--》如何在MySQL中打造高效优化索引
数据库·经验分享·mysql·索引·性能分析
YashanDB1 小时前
【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页
数据库·yashandb·崖山数据库
ProtonBase2 小时前
如何从 0 到 1 ,打造全新一代分布式数据架构
java·网络·数据库·数据仓库·分布式·云原生·架构
云和数据.ChenGuang7 小时前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys7 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver