1 --==============================数据表管理===============================
2 --特殊字符的输入
3 --Tab: char(9)
4 --换行: char(10)
5 --回车: char(13)
6
7 --varchar(n):1个字符占1个字节;nvarchar(n):1个字符占2个字节
8 --'我是Sky'存在varchar字段中,占7个字节;存在nvarchar中,占10个字节
9
10 --创建新表,并指定主键、自增长、非空、Unique约束、排序类型、默认值、CHECK字段约束、CHECK数据表约束
11 --约束的格式:CONSTRAINT 自定义的约束名 约束类型 其它参数
12 CREATE TABLE TEST1
13 (
14 编号 int IDENTITY(1,1) PRIMARY KEY, --自增长、主键约束
15 姓名 nvarchar(50) COLLATE Chinese_PRC_CI_AS NOT NULL, --排序、非空
16 别名 nvarchar(50) UNIQUE, --唯一键约束
17 性别 bit DEFAULT 1, --默认值
18 年龄 tinyint CONSTRAINT CK_TEST1_年龄 CHECK (年龄 > 0 AND 年龄 < 101), --CHECK字段约束
19 部门编号 int CONSTRAINT FK_TEST1_部门编号
20 FOREIGN KEY
21 REFERENCES 部门表(部门编号), --外键约束
22 地址 nvarchar(200),
23 电话 varchar(50),
24 CHECK (电话 is not null or 地址 is not null) --CHECK数据表约束
25 )
26
27
28 --创建计算列
29 CREATE TABLE TEST2
30 (
31 编号 int,
32 编号2 int,
33 单价 money NOT NULL,
34 数量 int NOT NULL
35 CONSTRAINT CK_TEST2_数量 CHECK (数量 > 0),
36 合计 AS 单价*数量 --计算列是只读的
37 )
38
39 --添加字段
40 ALTER TABLE TEST1
41 ADD 备注 nvarchar(500)
42
43 --删除字段
44 ALTER TABLE TEST1
45 DROP COLUMN 备注
46
47 --修改字段
48 ALTER TABLE TEST2
49 ALTER COLUMN 编号 int NOT NULL
50
51 --重命名表名和字段名
52 EXEC sp_rename 'TEST1','测试1' --修改表名
53 EXEC sp_rename 'TEST1.别名','Alias','COLUMN' --修改列名
54
55 --添加主键
56 ALTER TABLE TEST2
57 ADD CONSTRAINT PK_TEST2 PRIMARY KEY (编号)
58
59 --添加外键
60 ALTER TABLE TEST2
61 ADD CONSTRAINT FK_TEST2_TEST1 FOREIGN KEY (编号2) REFERENCES 测试1(编号)
62
63 --添加CHECK约束
64 ALTER TABLE TEST2
65 WITH NOCHECK --可选:添加约束时不检查现有数据
66 ADD CONSTRAINT CK_TEST2_单价 CHECK (单价 > 0)
67
68 --添加默认值约束
69 ALTER TABLE TEST2
70 ADD DEFAULT (1) FOR 数量
71
72 --删除约束
73 ALTER TABLE TEST2
74 DROP CONSTRAINT CK_TEST2_单价
75
76 --禁用约束
77 ALTER TABLE TEST2
78 NOCHECK CONSTRAINT CK_TEST2_单价
79 --禁用所有约束
80 ALTER TABLE TEST2
81 NOCHECK CONSTRAINT ALL
82
83 --启用约束
84 ALTER TABLE TEST2
85 CHECK CONSTRAINT CK_TEST2_单价
86 --启用所有约束
87 ALTER TABLE TEST2
88 CHECK CONSTRAINT ALL
89
90 --删除表
91 --必须先删除表与表间的关联才能删除表
92 DROP TABLE TEST2
93
94 --判断表是否存在
95 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TEST2]') AND type in (N'U'))
96 BEGIN
97 PRINT '可以创建该表'
98 END