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 |

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

相关推荐
KELLENSHAW11 分钟前
MySQL45讲 第十六讲 “order by”是怎么工作的?
数据库·mysql
hummhumm27 分钟前
Oracle 第20章:数据库调优
java·数据库·后端·python·mysql·oracle·database
A_cot1 小时前
深入理解 MyBatis:从创建到使用与核心知识点
java·spring boot·sql·mysql·spring·maven·mybatis
JingHongB1 小时前
Redis的常用数据类型以及命令
数据库·redis·缓存
ffyyhh9955111 小时前
SpringBoot事务管理:自调用与事务回滚行为分析
数据库
小光学长1 小时前
基于vue框架的的楼盘销售管理系统6n60a(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
数据库
Francek Chen1 小时前
【大数据技术基础 | 实验八】HBase实验:新建HBase表
大数据·数据库·hadoop·分布式·zookeeper·hbase
readmancynn2 小时前
尚庭公寓-小程序接口
java·数据库
大嘴吧Lucy2 小时前
实战攻略 | ClickHouse优化之FINAL查询加速
数据库·mysql·clickhouse
李少兄2 小时前
使用Mybatis-plus出现数据库id很大或者为负数情况排查解决
数据库·oracle·mybatis