Oracle和SQLServer修改欄位的型別和長度,不為空
在SQLServer資料庫:
修改欄位型別和長度:
alter table student|表名 alter column stucard|欄位名 varchar(18)|含長度的型別|型別;
(若改多列的欄位,就以逗號","相隔:
alter table student alter column (stuid varchar(5),stuname varchar(20));)
不為空:
alter table stud|表名 alter column stucard|欄位名 varchar(18)|型別 not null;
(若改多列的欄位,就以逗號","相隔:
(若直接"alter table stud alter column stucard not null;",將會報錯:關鍵字 'not' 附近有語法錯誤。 (156))alter table student alter column(stuid varchar(5) not null,stuname varchar(8) not null);)
在Oracle資料庫:
修改欄位型別和長度:
alter table student/表名 modify(stuid/欄位名 varchar2(18)/含長度的型別/型別);
(若改多列的欄位,就以逗號","相隔:
alter table student modify(stuid varchar2(6),stuname varchar2(12));)
當你只改一個時,也可以不用括號,也就成了下面這條語句:
alter table student modify stuid varchar2(18);
/*
當欄位沒有資料或者要修改的新型別和原型別相容時,
在SQLServer或者Oracle裡 修改欄位大小 比原來大或小都沒關係,
SQLServer裡可以直接alter修改、Oracle裡可以直接modify修改。
但是
當欄位有資料並用要修改的新型別和原型別不相容時,就要間接修改,
可能新建欄位來轉移,可能將該欄位和其資訊加入到新表(只有該欄位的表)。
不為空:*/
alter table student modify stuid not null;
(若改多列的欄位,就以逗號","相隔:
alter table student modify(stuid not null,stuname not null);)
我這上面的"|"、"/"都表示"或者"的意思......
注意:
在Oracle裡:
想修改長度,(1)當表裡沒有資料時,你修改的資料型別長度,無論"從小改大"還是"從大改小",都不會報錯,
而(2)當表有資料時你只能"改大",不可"改小",若改小了,會彈出提示,意思不就是:
要刪除所有資料才可以"減小長度/精度"咯?!
[若你執著"改小長度"的話,你可以"drop table XX",要是沒成為別的表的外來鍵的話,則順利刪除,要是是別的表的外來鍵的話,你得將那個"所謂的別的表"給刪了,再刪這個表,還有呀~要是你不想將原來資料刪除,那你得將這個表複製到"新"表點選開啟連結或者https://blog.csdn.net/qq_41042595/article/details/80644290再刪除這個表]
在SQLServer裡:
想修改長度,(1)當表裡沒有資料時,你修改的資料型別長度,無論"從小改大"還是"從大改小",都不會報錯,
而(2)當表有資料時你能"改大"和"改小",只!!!要!!!你修改的長度大於等於"表裡的最長資料的長度"就可以啦!!!
要是你修改的長度小於"表裡的最長資料的長度",就會出現下面那三行的報錯提示,要是是別的表的外來鍵的話,處理方式也是上面所講的一樣!!!
訊息 8152,級別 16,狀態 14,第 2 行將截斷字串或二進位制資料。語句已終止。
要是在Oracle裡執行"alter table student alter column stuid varchar(18);"
錯不在varchar(18),而是在"這條語句",而且會出現這樣的錯誤提示
還有:在Oracle裡,可以用int 和 varchar(數值) 型別,後臺分別自動轉成 number(38) 和 varchar2(數值),number的長度/精度在1~38間