如果表名写products会报错: 因为这个数据库中已经有一个表的表名是products了,这样子其实是一种保护机制,可以防止我意外覆盖已有的表,如果不报错,那我的代码就把原来的表覆盖了,那还不完犊子???下图的最后一段说了,如果真的想覆盖原表,那就先删除原表,然后再建立。
对新建的表查询:
select * from NewProducts;列都有了,只是没有填充数据
没什么特殊的,都一样的例子
create table NewOrders ( order_num integer not null, order_date datetime not null, cust_id char(10) not null ); select * from NewOrders;没什么特殊的,都一样的例子
只是这里展示了:不写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;select current_date();
这一小节的探讨主题是更改表的结构,比如增加列,删除列。但是一般最好不要后期更改,而是一开始就设计好。
更改表结构是一件不是很希望出现的事情,即最好是在表的设计之初就考虑全面充分一点,而不要到后面再去大幅更改表的结构。 如果非要改,那就要遵循下面几点:大家(指多数DBMS)都支持给表增加列,但是不不太允许你更改已有的列,包括删除已有列,已有列的数据的更改当然也是限制很严格。这么做都是为了安全,毕竟数据一删一改,都是没有后悔药的,真要出差错了又容易出大事。对已有列重命名大家都支持,因为根本不是什么见血的涉及根骨的事儿,是比较皮毛的事儿。DBMS只需要把已有代码中原列名全改为新列名就没问题了。-如果是比较复杂的更改操作,则不要在原表上直接进行,而是建立一个新表,把原表复制过去,即做一个完整备份后,再对原表进行修改。这非常非常重要,因为alter table的使用要极为小心,甚至有可能出现无法删除新添加的不需要的列,即你添加以后才发现其实不需要,想删除也删除不了了。
加了一个电话列,数据类型是20个char字符,允许没有值
再删掉这个列(还没给这列加任何数据,所以不会造成数据的安全问题,允许删除)
alter table Vendors drop column vend_phone;我想试试对有数据的表使用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马上站出来阻止,因为这个表和别的表有关联,一旦删除会出事。
还是很安全的。
又是一个百花齐放各搞各的的点
总之就是要备份,要小心
关键字
defaultalter tableadddrop