文章目錄
- 用交互式工具創建表實際也是用的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