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

您所在的位置:网站首页 创建一个删除查询,删除表tband SQL(十六) 创建表,更新表,删除表

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

2024-07-11 23:56| 来源: 网络整理| 查看: 265

文章目录 创建表:create table示例1定义表时,必须定义每个列是null列还是not null列 示例2示例3示例4:给列指定默认值;获取系统当前日期小结 更新表:alter table语句示例1:给已有表加列,删除没数据的已有列 删除表(简单):不是删除内容;drop table重命名表总结 在这里插入图片描述 在这里插入图片描述

用交互式工具创建表实际也是用的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给出的实现都不一样,这也需要自己看文档。 在这里插入图片描述

总之就是要备份,要小心

关键字

defaultalter tableadddrop


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3