SQL(十六) 创建表,更新表,删除表


在这里插入图片描述
在这里插入图片描述

  • 用交互式工具创建表实际也是用的sql语句,只不过是工具自动生成的而已。

创建表:create table

在这里插入图片描述

示例1

create table NewProducts
(
  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
);

如果表名写products会报错:
在这里插入图片描述
因为这个数据库中已经有一个表的表名是products了,这样子其实是一种保护机制,可以防止我意外覆盖已有的表,如果不报错,那我的代码就把原来的表覆盖了,那还不完犊子???下图的最后一段说了,如果真的想覆盖原表,那就先删除原表,然后再建立。

在这里插入图片描述

对新建的表查询:

select *
from NewProducts;

在这里插入图片描述
列都有了,只是没有填充数据

定义表时,必须定义每个列是null列还是not null列

在这里插入图片描述
在这里插入图片描述

示例2

没什么特殊的,都一样的例子

create table NewOrders
(
  order_num  integer  not null,
  order_date  datetime  not null,
  cust_id  char(10)  not null
);
select * from NewOrders;

在这里插入图片描述

示例3

没什么特殊的,都一样的例子

只是这里展示了:不写null,则默认为null列,即默认支持null值

create table NewVendors
(
  vend_id  char(10)  not null,
  vend_name  char(50)  not null,
  vend_address  char(50)  ,
  vend_city  char(50)  ,
  vend_state  char(5)  ,
  vend_zip  char(10)  ,
  vend_country  char(50)  
);
select * from NewVendors;

在这里插入图片描述

示例4:给列指定默认值;获取系统当前日期

在这里插入图片描述

create table NewOrderItems
(
  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(8, 2)  not null
);
select * from NewOrderItems;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

select current_date();

在这里插入图片描述

小结

  • 创建表时必须给出所有列的名字,以及数据类型,以及是否支持null值。
  • null列不可以作为主键!因为null列的某一行的值可以没有,那还怎么唯一标识这一行呢。只有not null列才可以作为主键
  • 不是所有的DBMS都默认为null列,还是要看实现。
    在这里插入图片描述

在这里插入图片描述

  • 原来开发人员更喜欢用的是默认值,而不是null列,即大家还是希望有值,哪怕只是默认值,也比没值好。

更新表:alter table语句

这一小节的探讨主题是更改表的结构,比如增加列,删除列。但是一般最好不要后期更改,而是一开始就设计好。
在这里插入图片描述

  • 更改表结构是一件不是很希望出现的事情,即最好是在表的设计之初就考虑全面充分一点,而不要到后面再去大幅更改表的结构。
    如果非要改,那就要遵循下面几点:
  • 大家(指多数DBMS)都支持给表增加列,但是不不太允许你更改已有的列,包括删除已有列,已有列的数据的更改当然也是限制很严格。这么做都是为了安全,毕竟数据一删一改,都是没有后悔药的,真要出差错了又容易出大事。
  • 对已有列重命名大家都支持,因为根本不是什么见血的涉及根骨的事儿,是比较皮毛的事儿。DBMS只需要把已有代码中原列名全改为新列名就没问题了。

在这里插入图片描述
-如果是比较复杂的更改操作,则不要在原表上直接进行,而是建立一个新表,把原表复制过去,即做一个完整备份后,再对原表进行修改。这非常非常重要,因为alter table的使用要极为小心,甚至有可能出现无法删除新添加的不需要的列,即你添加以后才发现其实不需要,想删除也删除不了了。

示例1:给已有表加列,删除没数据的已有列

alter table Vendors
add vend_phone char(20) null;

加了一个电话列,数据类型是20个char字符,允许没有值

再删掉这个列(还没给这列加任何数据,所以不会造成数据的安全问题,允许删除)

alter table Vendors
drop column vend_phone;

删除表(简单):不是删除内容;drop table

在这里插入图片描述

drop table CustCopy;

在这里插入图片描述

我想试试对有数据的表使用drop table, mysql会不会有防止意外删除的功能:

CREATE table CustCopy as
select * from Customers;
drop table CustCopy;

并没有任何提示和阻止

于是我又试了试删除原表Customers,哈哈,有提示和阻止了:

CREATE table CustCopy as
select * from Customers;
drop table Customers;

在这里插入图片描述加粗样式

看来我复制的CustCopy表无法复制到Customers表和其他表的关联信息,所以删除CustCopy时,DBMS根本不care ,你爱删除就删除吧,反正他和别的表没联系不会影响其他表。

而要删除原表Customers就不行了,DBMS马上站出来阻止,因为这个表和别的表有关联,一旦删除会出事。

还是很安全的。

重命名表

在这里插入图片描述
又是一个百花齐放各搞各的的点

总结

  • SQL必知必会的课上完后,只是入门sql, 以后所有的新知识就需要自己查阅相关DBMS的官方文档自学了。有很多东西,不同DBMS给出的实现都不一样,这也需要自己看文档。
    在这里插入图片描述

总之就是要备份,要小心

关键字

  • default
  • alter table
  • add
  • drop
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值