SQL 基础(二)数据表的创建、约束、修改、查看、删除
数据类型
数据类型 | 含义 |
---|---|
CHARACTER(n) | 字符/字符串。固定长度 n。 |
VARCHAR(n) 或 CHARACTER VARYING(n) | 字符/字符串。可变长度。最大长度 n。 |
BINARY(n) | 二进制串。固定长度 n。 |
BOOLEAN | 存储 TRUE 或 FALSE 值 |
VARBINARY(n) 或 BINARY VARYING(n) | 二进制串。可变长度。最大长度 n。 |
INTEGER(p) | 整数值(没有小数点)。精度 p。 |
SMALLINT | 整数值(没有小数点)。精度 5。 |
INTEGER | 整数值(没有小数点)。精度 10。 |
BIGINT | 整数值(没有小数点)。精度 19。 |
DECIMAL(p,s) | 精确数值,精度 p,小数点后位数 s。例如:decimal(5,2) 是一个小数点前有 3 位数,小数点后有 2 位数的数字。 |
NUMERIC(p,s) | 精确数值,精度 p,小数点后位数 s。(与 DECIMAL 相同) |
FLOAT(p) | 近似数值,尾数精度 p。一个采用以 10 为基数的指数计数法的浮点数。该类型的 size 参数由一个指定最小精度的单一数字组成。 |
REAL | 近似数值,尾数精度 7。 |
FLOAT | 近似数值,尾数精度 16。 |
DOUBLE PRECISION | 近似数值,尾数精度 16。 |
DATE | 存储年、月、日的值。 |
TIME | 存储小时、分、秒的值。 |
TIMESTAMP | 存储年、月、日、小时、分、秒的值。 |
INTERVAL | 由一些整数字段组成,代表一段时间,取决于区间的类型。 |
ARRAY | 元素的固定长度的有序集合 |
MULTISET | 元素的可变长度的无序集合 |
数据表示方式
长度 N
、精度 P
、小数位数 S
numeric(P,[S])
表示数据精度为 P,小数位数为 S
数据精度:能精确到小数点后的位数,小数点右侧位数
数据表创建
Management Studio 建表
建立表格其实就是定义每一列的过程
数据库表节点,新建
定义列属性,完成建表操作
SQL 指令建表
-- SQL指令建立学生表
create table student
(
SNo varchar(6), -- 非定长字符型
SN nvarchar(10), -- Unicode 字符型(所能容纳字符数)
Sex nchar(1) default '男',
Age int, -- 定长 4,精度10,小数位数0(本字段可存放10位无小数点整数,4字节大小) 无需设置精度和小数位数
Dept nvarchar(20)
)
数据表约束
数据完整性
保证数据库中数据的正确性、有效性、相容性,完整性机制主要有:
- 约束 Constraint
- 默认 Default
- 规则 Rule
- 触发器 Trigger
- 存储过程 Stotred Procedure
Constrain
NULL / NOT NULL
==NULL 值表示“不知道、不确定、没有数据”==,仅当某字段值
必须输入
才有效时可设置NOT NULL
(eg:主键),仅用于定义列约束
定义约束名称后(若不定义,系统将自动创建),若数据录入错误,系统将提示报错信息,无 NOT NULL
约束下,系统缺省值为 NULL
-- NOT NULL 约束
create table s
(
Sno varchar(6) constraint s_cons not null, -- s_cons 定义约束名称
Sn varchar(10),
Sex nchar(1),
Age int,
Dept nvarchar(20)
)
UNIQUE
唯一约束,定义某一列或多列组合取值
必须唯一
,被 UNIQUE 定义的列称为唯一键
,最多只能有一个 NULL 值,列约束、表约束均可
列约束
-- UNIQUE 列约束
create table s1
(
Sno varchar(6) constraint s_uniq UNIQUE, -- s_uniq 定义约束名称(可省略)
Sn varchar(10),
Sex nchar(1),
Age int,
Dept nvarchar(20)
)
表约束
-- UNIQUE 表约束
create table s2
(
Sno varchar(6),
Sn varchar(10) UNIQUE,
Sex nchar(1),
Age int,
Dept nvarchar(20),
constraint s_unique UNIQUE(Sn,Sex) -- 表约束 语法格式 s_unique 定义约束名称(可省略) Sn+Sex 为唯一键
)
PRIMARY KEY
主键约束,其值不能重复,不能为 NULL,既可表约束又可列约束
PRIMARY KEY UNIQUE 区别:
- 基本表中可定义多个 UNIQUE 约束,但仅可有一个 PRIMARY KEY
- UNIQUE 约束的唯一键值可为 NULL ,PRIMARY KEY 约束的一列或多列组合,任意列都不能出现 NULL 值
- 同一列或同一组列,不能同时定义 PRIMARY KEY 和 UNIQUE
列约束
-- PRIMARY KEY 列约束
create table s3
(
Sno varchar(6) constraint s_prim PRIMARY KEY,
Sn varchar(10) UNIQUE,
Sex nchar(1),
Age int,
Dept nvarchar(20)
)
表约束
-- PRIMARY KEY 表约束
create table s4
(
Sno varchar(6) NOT NULL,
Sn varchar(10) NOT NULL,
Sex nchar(1),
Age int,
Dept nvarchar(20),
constraint s4_prim PRIMARY KEY(Sno,Sn)
)
FOREIGN KEY
外键约束,约束某一列或几列作为外部键,包含外键的表称为从表(或参照表),主键所在表称为主表(或被参照表)。既可表约束又可列约束
为保证参照完整性,系统保证外键的取值为:
- 空值
- 主键取值
换言之,外键存在至少需要两张表,在第一张表中作为主键的属性在第二张表(从表,参照表)中做普通属性,则此键称为第一张表(主表,被参照表)的外键
列约束
-- FOREIGN KEY 列约束
create table s5
(
Sno varchar(6) NOT NULL constraint s5_foreign FOREIGN KEY REFERENCES s3(Sno),
Sn varchar(10) NOT NULL,
Sex nchar(1),
Age int,
Dept nvarchar(20)
)
表约束
-- FOREIGN KEY 表约束
-- 定义数据表 T
create table T
(
TNo varchar(6) constraint T_Prim PRIMARY KEY,
TN nvarchar(10) UNIQUE,
Sex nchar(1),
Age int,
Dept nvarchar(20)
)
-- 定义数据表 C
create table C
(
CNo varchar(6) constraint C_Prim PRIMARY KEY,
CN nvarchar(10) UNIQUE,
CT int
)
-- 建立 TC 表,定义 TNo、CNo 为 TC 外键
create table TC
(
TNo varchar(6) NOT NULL constraint T_Fore FOREIGN KEY REFERENCES T(TNo),
CNo varchar(6) NOT NULL constraint C_Fore FOREIGN KEY REFERENCES C(CNo),
Score NUMERIC(4,1), -- 精度为8,小数位数为1
Dept nvarchar(20)
)
CHECK
检查约束,限定某字段只能录入允许范围内的值,既可表约束又可列约束
注意:
- 一个基本表中可定义多个 CHECK
- 一个字段仅能定义一个 CHECK
- 多个字段定义的 CHECK 必须为表约束
列约束
-- CHECK 列约束
create table limit
(
sno varchar(6),
cno varchar(10),
score numeric(4,1) constraint score_check CHECK(score >=0 AND score <=100)
)
表约束
-- CHECK 列约束
create table persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
Country varchar(255),
CONSTRAINT chk_Person CHECK (P_Id>0 AND Country='China')
)
数据表修改
Management Studio 修改表
SQL 指令修改表
ADD
ADD 方式为新加列自动填充 NULL 值,不可指定 NOT NULL
-- ADD
ALTER TABLE S
ADD --增加两项
Class_No varchar(6),
Address nvarchar(20)
ALTER TABLE TC
ADD
CONSTRAINT Score_chk CHECK(Score BETWEEN 0 AND 100)
ALTER
注意:
- 列名不可变
- 含 NULL 值得列不可指定为 NOT NULL
- 存在于列中的数据不可改变数据类型、减少列宽
- 仅能修改 NOT NULL 、NULL 约束,其他约束需要通过“删除后重新添加“的方式完成修改
-- ALTER
ALTER TABLE S
ALTER COLUMN
SN nvarchar(12)
DROP
仅用于删除完整性约束定义
-- DROP
ALTER TABLE s3
DROP CONSTRAINT s_prim
数据表查看
右键 表 ,属性
查看表信息
数据表删除
Management Studio 删除表
表存在依赖对象时,不可删除
SQL 指令删除表
仅可删除匹配用户建立的表,用户权限要对应
-- 删除基本表
DROP TABLE s
- 点赞
- 收藏
- 关注作者
评论(0)