表
目录
1、常用系统数据类型
1. int或integer
2. tinyint
3. decimal[(p[,s])]或numeric[(p[,s])]
4. char(n)
5. varchar(n|max)
6. datetime
2、T-SQL创建表
3、T-SQL修改表
4、T-SQL表数据的操作
4.1 插入数据
4.2 修改数据
4.3 删除数据
5、删除表
1、常用系统数据类型
1. int或integer
四字节,-2^31~2^31-1的整数。
2. tinyint
1字节,0~255的整数。
3. decimal[(p[,s])]或numeric[(p[,s])]
p:最多可以存储的十进制数字的总位数,1~38,默认18。
s:小数点后面可以存储的十进制数字的最大位数,默认0。
如:decimal(10,5),10位数,整数5位,小数5位。
4. char(n)
n:1~8000。实际数据的长度<n,会填空格,实际数据的长度>n,会截断。
5. varchar(n|max)
n:1~8000。实际数据的字符数<n,存储的空间大小 = 实际数据的字节数+前缀空间大小(2字节,存储数据的实际长度,若实际数据的字符数>4000字符,为4字节)
varchar(max),允许存储最多2^31-1个字符的数据。
6. datetime
8字节,可以使用 '/','-','.',做分隔符。默认‘1900-01-01 00:00:00’。
2、T-SQL创建表
CREATE TABLE [database_name.schema_name.|schema_name.]table_name(
<column_definition>[,...n])<column_definition> ::= column_name <type_name> [NULL|NOT NULL]
<column_constraint>[DEFAULT default_value] -- 默认值<column_constraint> ::= [CONSTRAINT constraint_name]{ -- 约束名
{PRIMARY KEY|UNIQUE}[CLUSTERED|NONCLUSTERED] -- 主码,唯一
|[FOREIGN KEY]REFERENCES ref_table_name[(ref_column_name)] -- 外码
|CHECK(logic_expression)} -- 检查
database_name,数据库名,可以用use 数据库名 指定,就不用写了,除非用的是另一个数据库。
schema_name,架构名,对一个数据库里的表进行分类。
table_name,表名,column_name,列名,type_name,类型名。
NULL|NOT NULL,是否允许为空,默认允许为NULL。
default_name,默认值。只能用于INSERT。
constraint_name,约束名。
COLUMN_CONSTRAINT,列级约束(只涉及单个列),可选一个关键字,PRIMARY KEY,UNIQUE,FOREIGN KEY,CHECK。
PRIMARY KEY,主键,只有一个,属性值唯一,不为空,默认CLUSTERED(聚集索引)。
UNIQUE,唯一性,可多个,属性值唯一,默认NONCLUSTERED(非聚集索引)
用unique修饰的字段,允许为NULL,但只能一个NULL值;
可以把unique约束定义在多个字段。
FOREIGN KEY,外键,可多个,外键约束提供了字段参照完整性,不能自动创建索引。
CHECK,检查,可多个,
check(),()中不能是子查询。
例:
这里先举例,在创建表的时候,同时创建约束。
金钥匙为主键(不为空),默认允许为NULL
列级约束,column_constraint
use student
go
create table student1(
sno char(10) primary key, -- 主键
sname varchar(10) unique, -- 唯一
gender char(2) NOT NULL default '男', -- 默认
sage tinyint NOT NULL check(sage >= 0 and sage<=100),-- 检查
)
或者,表级约束(table_constraint),可涉及多个列,
此时需要加,CONSTRAINT constraint_name,
use student
go
create table student1(
sno char(10),
sname varchar(10),
gender char(2) NOT NULL default '男',-- 默认
sage tinyint NOT NULL,
constraint pk_s primary key(sno), -- 主键
constraint q_s unique(sname), -- 唯一
constraint ck_s check(sage >= 0 and sage<=100) -- 检查
)
-- constraint 不能选择default关键字,只能是主码,唯一,外码,检查之一
这里单独写一个外码,
关系s(sno(主码),sname),c(cno(主码),cname),sc(sno,cno,score),(sno,cno)主码
因为sc中(sno,cno)是主码,只能写表级约束,constraint pk_sc primary key(sno,cno)
创建sc
use student
go
create table sc(
sno char(10) references s(sno),
cno char(4) references c(cno),
score tinyint
constraint pk_sc primary key(sno,cno))
或者
use student
go
create table sc(
sno char(10),
cno char(4),
score tinyint
constraint pk_sc primary key(sno,cno),
constraint fk1_sc foreign key(sno) references s(sno),
constraint fk2_sc foreign key(cno) references c(cno))
3、T-SQL修改表
只能执行一个操作。
ALTER TABLE [database_name.schema_name.|schema_name.]table_name{
ALTER COLUMN column_name type_name [NULL|NOT NULL]
|ADD {<column_definition>|<table_constraint>}[,...n]
|DROP {[CONSTRAINT] constraint_name[,...n]|COLUMN column_name}}
ALTER COLUMN:修改已有列的属性。
ADD:添加列or表的约束(除NULL|NOT NULL之外,几乎所有的约束),可多个,用,分隔。
DROP:删除一个列or约束(可多个)
4、T-SQL表数据的操作
4.1 插入数据
INSERT INTO table_name[(column_namelist)]
{VALUES(expression[,...n])}
-- 三种插入数据的形式-- 没有list,对应的属性全要写
insert into student1 values(
'1111111111','L','男',20)-- 只用写对应的属性,但是没写的属性,如果没有默认值且不允许为NULL,就会失败
insert into student1(sno,sname) values(
'1111111112','Z')-- 同理,如果用default占位,如果没有默认值且不允许为NULL,就会失败
insert into student1 values(
'1111111113','C',default,20)
4.2 修改数据
UPDATE table_name
SET column_name = expression [,...n]
[WHERE {condition_expression}]
WHERE:可选关键字,缺省时,默认修改表中的每一行数据。
condition_expression:条件表达式。
例:将student1中的sage为20的记录,改成sage为21的记录
use student
go
update student1
set sage = 21
where sage = 20
4.3 删除数据
DELETE table_name
[WHERE {condition_expression}]
若不指定where,会将表中数据全删了。
-- 将table_name表中数据全删了,比delete table_name全删更快捷
TRUNCATE TABLE table_name
5、删除表
DROP TABLE table_name