SQL语言
1.SQL语言的功能
数据定义(DDL) CREATE,DROP,ALTER
数据查询(DQL) SELECT
数据操纵(DML)INSERT,UPDATE(修改),DELETE
数据控制(DCL)GRANT,REVOKE,DENY
2.SQL支持的数据类型
数值型:精确数字 ,近似数字,
日期时间型
字符串型:普通字符编码串,统一字符编码串,二进制串
其他类型
3.数据定义功能
4.1.SQL语言概述
4.1.1.SQL语言特点
一体化
高度非过程化
简洁
使用方式多样
4.1.2.SQL语言功能
SQL功能 命令动词
数据查询 select
数据定义 create、drop、alter
数据操纵 insert、update、delete
数据控制 grant、revoke、deny
4.2.SQL支持的数据类型
4.2.1.数值型
①准确型:
整数 字节 小数 字节
bigint 8 numeric(p,q)
int 4 decimal(p,q)
smallint 2
tinyint 1
bit 1位
p为数字位长度;q为小数位长度
②近似型:
float 8字节
real 4字节
4.2.2.字符串型
①普通编码字符串类型:
类型 含义 长度范围
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字节的二进制数据(将被弃用)
4.2.3.日期时间类型
类型 定义范围 长度范围
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字节
4.3数据定义功能
4.3.1.SQL数据定义功能
对象 创建 修改 删除
架构 create schema drop schema
表 create table alter table drop table
视图 create view alter view drop view
索引 create index alter index drop index
4.3.2.架构基本概念
架构/模式:数据库下的一个逻辑命名空间
可以存放表、视图等数据库对象
是一个数据库对象的容器
将数据库比喻为操作系统,架构就相当于操作系统中的目录,架构中的对象就相当于目录下的文件
一个数据库可以包含一个或多个架构
同一个数据库中,架构的名字必须是唯一的
属于一个架构的对象称为架构对象。架构对象可以是:基本表、视图、触发器等
4.3.3.定义架构
注:
如果没有指定<架构名>,则<架构名>隐含为<用户名>
一个<用户名>可以拥有多个架构
执行创建架构语句的用户必须具有管理员权限,或CREATE SCHEMA权限
在定义架构同时定义表:
CREATE SCHEMA TEST AUTHORIZATION ZHANG
CREATE TABLE T1(
C1 INT,
C2 CHAR(10),
C3 SMALLDATETIME,
C4 NUMERIC(4,1)
)
4.3.4删除架构
DROP SCHEMA <架构名>
{ <CASCADE> | <RESTRICT> }
1
2
cascade:删除架构的同时将该架构中所有对象一起删除
restrict:若被删除的架构中包含对象,则拒绝删除此架构
注:
不同DBMS的drop schema语句的语法格式和执行略有不同
SQL server的语法语句没有可选项,语法格式:
DROP SCHEMA <架构名>
1
在SQL server2008中只能删除不包含任何对象的架构
4.3.5定义基本表
CREATE TABLE <表名>(
<列名> <数据类型> [列级完整性约束定义]
{, <列名> <数据类型>
[列级完整性约束定义] … }
[,表级完整性约束定义 ] )
在列级完整性约束定义处可定义的约束:
not null:限制列取值非空
default:给定列的默认值
unique:限制列取值不重
check:限制列的取值范围
primary key:指定本列为主键,用于保证该字段具有唯一性并且非空,如:学号、员工编号
foreign key:定义本列为引用其他表的外键,用来限制两个表的关系,保证该字段的值必须来自于主表,主表关联列即从表添加外键约束,用于引用主表中某列的值,如:学生表专业编号、员工表的部门编号
4.3.6约束
约束是用来规范表中结构的,是一种限制,为了保证数据的可靠性和稳定性
列级约束
对某一特定列的约束,只能应用于一列上
位置:包含在列定义之中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名
六种:主键、外键、唯一、检查、默认、非空
表级约束
对多个列一起进行约束,可用于一列、也可用于一个表中的多个列中
位置:与列定义相互独立,不包含在列定义之中,通常用于对多个列一起进行约束,于定义用’,'分隔,必须指出要约束的列名称
四种:主键、外键、唯一、检查
如果创建的约束涉及到该表的多个属性列,则必须创建的是表级约束(必须定义在表级上);否则既可以定义在列级上也可以定义在表级上,此时只是SQL语句格式不同而已
六种约束
非空约束:<列名> <类型> NOT NULL
sname char(10) NOT NULL
1
主键约束:PRIMARY KEY [( <列名> [, … n] )]
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)
)
4.3.7修改表结构
使用ALTER TABLE语句
对表添加列、删除列、修改列的定义、定义主键、外键,也可以添加和删除约束。
ALTER TABLE <表名>
[ ALTER COLUMN <列名> <新数据类型>]
| [ ADD <列名> <数据类型> [约束]]
| [ DROP COLUMN <列名> ]
| [ ADD [constraint <约束名>] 约束定义]
| [ DROP [constraint] <约束名>]
示例
示例1:
为Employees表添加工资列,此列的列名为Salary,数据类型为int,允许空
ALTER TABLE Employees ADD Salary INT
1
示例2:
将Jobs表的Descp列的数据类型改为NCHAR(40)
ALTER TABLE Jobs
ALTER COLUMN Descp NCHAR(40)
示例3:
删除Employees表的Tel列
ALTER TABLE Employees DROP COLUMN Tel
1
示例4:
为Jobs表中MinSalary列添加约束:大于等于1600
ALTER TABLE Jobs ADD CHECK( MinSalary >= 1600 )
1
示例5:
删除Employees表,DROP TABLE <表名> { [, <表名> ] … }
DROP TABLE Employees
————————————————
版权声明:本文为CSDN博主「Хан йенсук」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_54139442/article/details/121155038