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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章