SQL功能 | 命令动词 |
---|---|
数据查询 | select |
数据定义 | create、drop、alter |
数据操纵 | insert、update、delete |
数据控制 | grant、revoke、deny |
①准确型:
整数 | 字节 | 小数 | 字节 |
---|---|---|---|
bigint | 8 | numeric(p,q) | |
int | 4 | decimal(p,q) | |
smallint | 2 | ||
tinyint | 1 | ||
bit | 1位 |
p为数字位长度;q为小数位长度
②近似型:
float | 8字节 |
real | 4字节 |
①普通编码字符串类型:
类型 | 含义 | 长度范围 |
---|---|---|
char(n) | 定长存储 | n<=8000 |
varchar(n) | 不定长存储(按实际长度存储) | n<=8000 |
varchar(max) | 存储大于8000字节的文本 | |
text | 存储大于8000字节的文本(将被弃用) |
②统一字符编码字符串类型:
类型 | 含义 | 长度范围 |
---|---|---|
nchar(n) | 定长存储 | n<=4000 |
nvarchar(n) | 不定长存储 | n<=4000 |
nvarchar(max) | 存储大于8000字节的文本 | |
ntext | 存储大于8000字节的文本(将被弃用) |
注:n为字符个数,每个字符占两个字节
③二进制字符串类型:
类型 | 含义 | 长度范围 |
---|---|---|
binary(n) | 固定长度 | n<=8000 |
varbinary(n) | 可变长度 | n<=8000 |
varninary(max) | 用于存储超过8000字节的二进制数据 | |
image | 用于存储超过8000字节的二进制数据(将被弃用) |
类型 | 定义范围 | 长度范围 |
---|---|---|
data | 定义范围为0000-1-1到9999-12-31的日期。默认格式为:YYYY-MM-DD | 3字节 |
time(n) | 定义一天中的某个时间,该时间基于24小时制。默认格式为:hh:mm:ss[.nnnnnnn], n为秒的小数位数,取值范围是0到7的整数。 | 3-5字节 |
datetime | 年月日时分秒毫秒(例:‘2001/08/03 10:30:00.000’ )。存储从1753年1月1日到9999年12月31日的日期和时间数据 | 8字节 |
smalldatetime | 年月日时分(例:‘2001/08/03 10:30:00’ )。存储从1900年1月1日到2079年6月6日的日期和时间数据 | 4字节 |
datetime2 | 定义一个结合了24小时制时间的日期。默认格式:YYYY-MM-DD hh:mm:ss[.nnnnnnn],n表示秒的小数位数,默认精度是7位小数 | 6-8字节 |
datetimeoffset | 定义一个与采用 24 小时制并和可识别时区的一日内时间相组合的日期,该数据类型使用户存储的日期和时间(24小时制)是时区一致的。语法格式为:datetimeoffset [(n)],n为秒的精度,最大为7。默认格式为:YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{±}hh1:mm1] | 8-10字节 |
对象 | 创建 | 修改 | 删除 |
---|---|---|---|
架构 | create schema | drop schema | |
表 | create table | alter table | drop table |
视图 | create view | alter view | drop view |
索引 | create index | alter index | drop index |
注:
在定义架构同时定义表:
CREATE SCHEMA TEST AUTHORIZATION ZHANG
CREATE TABLE T1(
C1 INT,
C2 CHAR(10),
C3 SMALLDATETIME,
C4 NUMERIC(4,1)
)
DROP SCHEMA <架构名>
{ <CASCADE> | <RESTRICT> }
注:
DROP SCHEMA <架构名>
CREATE TABLE <表名>(
<列名> <数据类型> [列级完整性约束定义]
{, <列名> <数据类型>
[列级完整性约束定义] … }
[,表级完整性约束定义 ] )
在列级完整性约束定义处可定义的约束:
约束是用来规范表中结构的,是一种限制,为了保证数据的可靠性和稳定性
如果创建的约束涉及到该表的多个属性列,则必须创建的是表级约束(必须定义在表级上);否则既可以定义在列级上也可以定义在表级上,此时只是SQL语句格式不同而已
sname char(10) NOT NULL
SNO char(7) PRIMARY KEY
PRIMARY KEY(SNO)
PRIMARY KEY(SNO,CNO)
外键约束:[ FOREIGN KEY ( <外键列名> )]
REFERENCES <表名> (<主键列名>)
如果是在列级完整性约束处,则可省略“FOREIGN KEY (<列名>)”部分
FOREIGN KEY(Sno)
REFERENCES Student(Sno)
唯一值约束:UNIQUE [(<列名> [, … n] )]
有UNIQUE约束的列允许有一个空值;
在一个表中可以定义多个UNIQUE约束;
可以在一个列或多个列上定义UNIQUE约束
默认值约束:
在创建表时定义:DEFAULT 常量表达式
为已创建好的表添加约束:DEFAULT 常量表达式 FOR 列名
取值范围约束:CHECK(逻辑表达式)
示例-jobs表:
列名 | 含义 | 数据类型 | 约束 |
---|---|---|---|
jid | 工作编号 | char(6) | 主键 |
descp | 工作描述 | nvarchar(20) | 非空 |
edureq | 学历要求 | nchar(6) | 默认值:本科 |
minsalary | 最低工资 | int | |
maxsalary | 最高工作 | int | >=最低工资 |
jobs表定义语句:
CREATE TABLE Jobs (
Jid char(6) PRIMARY KEY,
Descp nchar(20) NOT NULL ,
EduReq nchar(6) DEFAULT '本科',
MinSalary int ,
MaxSalary int ,
CHECK( MaxSalary >= MinSalary )
)
示例-employees表:
列名 | 含义 | 数据类型 | 约束 |
---|---|---|---|
eid | 职工号 | char(10) | 主键 |
ename | 姓名 | nchar(6) | 非空 |
sex | 性别 | nchar(1) | 取值范围:男或女 |
brithdate | 出生日期 | date | |
jobdate | 参加工作日期 | datetime | 默认为系统当前日期时间 |
sid | 身份证号 | char(18) | 取值不重 |
jid | 工作编号 | char(6) | 外键,引用工作表的工作编号 |
tel | 联系电话 | char(11) |
employees表定义语句:
CREATE TABLE Employees (
Eid char(10) ,
Ename nvarchar(20) NOT NULL,
Sex nchar(1) CHECK( Sex = '男' OR Sex = '女'),
BirthDate date ,
JobDate datetime DEFAULT GetDate(),
Sid char(18) UNIQUE,
Jid char(6) ,
Tel char(11) ,
PRIMARY KEY(Eid) ,
FOREIGN KEY(Jid) REFERENCES Jobs(Jid)
)
ALTER TABLE <表名>
[ ALTER COLUMN <列名> <新数据类型>]
| [ ADD <列名> <数据类型> [约束]]
| [ DROP COLUMN <列名> ]
| [ ADD [constraint <约束名>] 约束定义]
| [ DROP [constraint] <约束名>]
示例1:
为Employees表添加工资列,此列的列名为Salary,数据类型为int,允许空
ALTER TABLE Employees ADD Salary INT
示例2:
将Jobs表的Descp列的数据类型改为NCHAR(40)
ALTER TABLE Jobs
ALTER COLUMN Descp NCHAR(40)
示例3:
删除Employees表的Tel列
ALTER TABLE Employees DROP COLUMN Tel
示例4:
为Jobs表中MinSalary列添加约束:大于等于1600
ALTER TABLE Jobs ADD CHECK( MinSalary >= 1600 )
示例5:
删除Employees表,DROP TABLE <表名> { [, <表名> ] … }
DROP TABLE Employees