SQL Server數(shù)據(jù)類型
int ---整數(shù)
numeric---數(shù)字
decimal --- 數(shù)字
char ---字符
varchar---字符
datetime --- 日期時(shí)間
-
int
例如在表emp中的Empon列的定義如下:
Empon int
-
numeric
numeric表示數(shù)字類型,經(jīng)常被定義成numeric(p,s)形式,其中:
P表示數(shù)字的總位數(shù)
S表示小數(shù)點(diǎn)后面的位數(shù)
例如在表Emp中的Sal列中的定義如下:
Sal numeric(5,1)
-
char
char表示固定長(zhǎng)度的字符類型,經(jīng)常被定義成char(n)形式, n表示占用的字節(jié)數(shù),N的最大取值是2000。例如在表Emp中的Ename列的定義如下:
Ename char(20);
表示Ename列中最多可存儲(chǔ)20個(gè)字節(jié)的字符串,并且占用的空間是固定的20個(gè)字節(jié)。
-
varchar
varchar表示變長(zhǎng)的字符類型,定義格式是varchar(n), n表示最多可占用的字節(jié)數(shù),最大長(zhǎng)度是4000字節(jié)。
例如在表Emp中的Job列的定義如下:
Job varchar(100);
表示Job列中最多可存儲(chǔ)長(zhǎng)度為100個(gè)字節(jié)的字符串。根據(jù)其中保存的數(shù)據(jù)長(zhǎng)度,占用的空間是變化的,最大占用空間為100個(gè)字節(jié)。
-
datetime
datetime用于定義日期時(shí)間的數(shù)據(jù)。
例如在表Emp中的Hiredate列的定義如下:
Hiredate datetime;
表示Hiredate列中存放的是日期時(shí)間。
創(chuàng)建表
- Create語句
CREATE TABLE [schema.]table_name(
column_name datatype[DEFAULT expr][,…]
);
創(chuàng)建職員表的例子:
--創(chuàng)建表EMP
CREATE TABLE emp(
id NUMERIC(10),
name VARCHAR(20),
gender CHAR(1),
birth DATETIME,
salary NUMERIC(6,2),
job VARCHAR(30),
deptid NUMERIC(2)
);
-
Default
可以通過DEFAULT子句給列指定默認(rèn)值,例如,在emp表中給gender列賦默認(rèn)值‘M’,如果插入數(shù)據(jù)時(shí)沒有指定性別的員工,則默認(rèn)是男性。
--創(chuàng)建表emp1
CREATE TABLE emp1(
id NUMERIC(10),
name VARCHAR(20),
gender CHAR(1) DEFAULT 'M',
birth DATETIME,
salary NUMERIC(6,2),
job VARCHAR(30),
deptid NUMERIC(2)
);
-
NOT NULL
默認(rèn)情況下,任何列都允許有空值。非空(Not Null)是一種約束條件,用于確保字段值不為空,當(dāng)某個(gè)字段被設(shè)置了非空約束條件,這個(gè)字段中必須存在有效值,也就是說,當(dāng)執(zhí)行插入數(shù)據(jù)的操作時(shí),必須提供這個(gè)列的數(shù)據(jù),當(dāng)執(zhí)行更新操作時(shí),不能給這個(gè)列的值設(shè)置為NULL。
創(chuàng)建表emp2,設(shè)置name字段為非空,也即是表emp2中的每條記錄,name列都必須有值。
CREATE TABLE emp2(
id NUMERIC(10),
name VARCHAR(20) NOT NULL,
gender CHAR(1),
birth DATETIME,
salary NUMERIC(6,2),
job VARCHAR(30),
deptid NUMERIC(2)
);
-
修改表
-
修改表名
在建表后如果希望修改表名,可以使用RENAME語句實(shí)現(xiàn),語法如下,將改變表名
old_name為new_name:
sp_rename old_name, new_name;
舉例說明,如果要將表名emp修改為employee,使用如下語法:
sp_rename emp,employee;
-
增加列
在建表之后,要給表增加列可以使用ALTER TABLE的ADD子句實(shí)現(xiàn)。語法如下:
ALTER TABLE table_name ADD
column datatype [DEFAULT expr]
注意一點(diǎn),列只能增加在最后,不能插入到現(xiàn)有的列中。下例給表employee增加一列hiredate,并設(shè)置默認(rèn)值為當(dāng)前日期。
ALTER TABLE employee ADD
hiredate DATE DEFAULT getdate();
-
刪除列
在建表之后,使用ALTER TABLE的DROP子句刪除不需要的列。語法如下:
ALTER TABLE table_name DROP column column_name;
刪除字段需要從每行中刪掉該字段占據(jù)的長(zhǎng)度和數(shù)據(jù),并釋放在數(shù)據(jù)塊中占據(jù)的空間,如果表記錄比較大,刪除字段可能需要比較長(zhǎng)的時(shí)間。
下例刪除表employee的列hiredate:
ALTER TABLE employee DROP column hiredate;
-
修改列
建表之后,可以改變表中列的數(shù)據(jù)類型、長(zhǎng)度和默認(rèn)值,注意這種修改僅對(duì)以后插入的數(shù)據(jù)有效,另外如果表中已經(jīng)有數(shù)據(jù)的情況下,把長(zhǎng)度由大改小,有可能不成功,比如原來的類型是VARCHAR(100),其中已經(jīng)存放了100個(gè)字節(jié)長(zhǎng)度的數(shù)據(jù),如果要改為VARCHAR(80),則不會(huì)修改成功。
語法如下:
ALTER TABLE table_name
ALTER column column_name datatype
下例修改表emp loyee的列job,并增加默認(rèn)值的設(shè)置;
ALTER TABLE employee ALTER column job VARCHAR(40);