SQL语言基础及数据定义功能

目录

    • 4.1.SQL语言概述
      • 4.1.1.SQL语言特点
      • 4.1.2.SQL语言功能
    • 4.2.SQL支持的数据类型
      • 4.2.1.数值型
      • 4.2.2.字符串型
      • 4.2.3.日期时间类型
    • 4.3数据定义功能
      • 4.3.1.SQL数据定义功能
      • 4.3.2.架构基本概念
      • 4.3.3.定义架构
      • 4.3.4删除架构
      • 4.3.5定义基本表
      • 4.3.6约束
        • 列级约束
        • 表级约束
        • 六种约束
        • 示例
      • 4.3.7修改表结构
        • 示例


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.定义架构

SQL语言基础及数据定义功能_第1张图片

注:

  • 如果没有指定<架构名>,则<架构名>隐含为<用户名>
  • 一个<用户名>可以拥有多个架构
  • 执行创建架构语句的用户必须具有管理员权限,或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> }
  • cascade:删除架构的同时将该架构中所有对象一起删除
  • restrict:若被删除的架构中包含对象,则拒绝删除此架构

注:

  • 不同DBMS的drop schema语句的语法格式和执行略有不同
  • SQL server的语法语句没有可选项,语法格式:
DROP SCHEMA <架构名>
  • 在SQL server2008中只能删除不包含任何对象的架构

4.3.5定义基本表

CREATE  TABLE  <表名><列名> <数据类型> [列级完整性约束定义]
{, <列名> <数据类型> 
   [列级完整性约束定义] … }
   [,表级完整性约束定义 ]

在列级完整性约束定义处可定义的约束:

  • not null:限制列取值非空
  • default:给定列的默认值
  • unique:限制列取值不重
  • check:限制列的取值范围
  • primary key:指定本列为主键,用于保证该字段具有唯一性并且非空,如:学号、员工编号
  • foreign key:定义本列为引用其他表的外键,用来限制两个表的关系,保证该字段的值必须来自于主表,主表关联列即从表添加外键约束,用于引用主表中某列的值,如:学生表专业编号、员工表的部门编号

4.3.6约束

约束是用来规范表中结构的,是一种限制,为了保证数据的可靠性和稳定性

列级约束
  1. 对某一特定列的约束,只能应用于一列上
  2. 位置:包含在列定义之中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名
  3. 六种:主键、外键、唯一、检查、默认、非空
表级约束
  1. 对多个列一起进行约束,可用于一列、也可用于一个表中的多个列中
  2. 位置:与列定义相互独立,不包含在列定义之中,通常用于对多个列一起进行约束,于定义用’,'分隔,必须指出要约束的列名称
  3. 四种:主键、外键、唯一、检查

如果创建的约束涉及到该表的多个属性列,则必须创建的是表级约束(必须定义在表级上);否则既可以定义在列级上也可以定义在表级上,此时只是SQL语句格式不同而已

六种约束
  • 非空约束:<列名> <类型> NOT NULL
sname char(10) NOT NULL
  • 主键约束: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

示例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

你可能感兴趣的:(数据库,sql,sqlserver,数据库)