关系数据库标准语言SQL
基本概念
-
SQL语言是一个功能极强的关系数据库语言。同时也是一种介于关系代数与关系演算之间的结构化查询语言(Structured Query Language),其功能包括数据定义、数据查询、数据操纵和数据控制。
-
SQL的特点:
1)综合统一:集数据定义、数据查询、数据操纵和数据控制等多种功能于一体。
2)高度非过程化 :面对象的设计
3)面向集合的操作方式 :操作对象是集合,并且操作结果也是集合
4)两种使用方式,统一的语法结构 :既是一种独立的语言,又是一种嵌入式的语言,(嵌入式是指嵌入别的高级语言)。
5)简洁易学
数据库的创建与基本概念
一、创建数据库:
代码:
create database Student; --创建数据库
use Student; --使用数据库
drop database Student; --删除数据库
注意:
1)两种注释方式:(1)两个减号--,注释单行 (2)/* */注释多行
2)不能再当前数据库删除当前数据库
数据类型:
注意:
1)一个属性采用何种数据类型由两部分决定:(1)该属性的取值范围;(2)该属性做何种运算。
模式的创建与删除
模式,一个独立于数据库用户的非重复命名空间,在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等。
代码:
/** 创建模式zhang,下键表student*/
create schema zhang
create table student
(
Sno char(9) primary key,
Sname varchar(20) unique,
Ssex char(4) not null,
Sage smallint,
Sdept varchar(5)
);
/** 删除模式中的表*/
drop table zhang.student;
/** 删除模式*/
drop schema zhang; --注意前提该模式下无对象
注意:
1)删除模式的时候首先应当将模式下的所有对象删除,才能删除该模式
2)在删除某个非dbo模式下的表时,需要加模式名
3)该模式不是三级模式两级映像中的模式,而是相当于一个命名空间(主要可以解决重名的问题)
4)CASCADE(级联):删除模式的同时把该模式中所有的数据库对象全部删除(SQL Server不支持)
5)RESTRICT(限制):只有当该模式中没有任何下属的对象时才能执行
表的定义、删除与修改
一、创建表(三张):(1)学生表(Student)(2)课程表(Course)(3)学生课程表(SC)
1)学生表(Student)
代码:
/** 未添加数据*/
create table student
(
Sno char(9) primary key, --primary key 指示主码
Sname varchar(20) unique, --unique 指示值唯一,
Ssex char(4) not null, --not null 该值非空
Sage smallint,
Sdept varchar(5)
);
2)课程表(Course)
代码:
/** 创建课程表*/
create table Course
(
Cno char(2) primary key,
Cname varchar(10) unique,
Cpno char(2), --Cpno是外码,参照的是自身的Cno
Ccredit smallint,
foreign key (Cpno) references Course(Cno) --外码
);
3)学生-课程表
代码:
/** 创建学生-课程表*/
create table SC
(
Sno char(9),
Cno char(2),
Grade int,
primary key(Sno, Cno), --多个属性列构成主码,写在最后
foreign key(Sno) references student(Sno), --外码, 每个外码写一行
foreign key(Cno) references Course(Cno)
);
注意:
1)创建表的时候需要考虑三个完整性约束条件:实体完整性,参照完整性,用户自定义完整性
2)两种完整性约束条件的定义方式:
-
列级完整性约束条件:涉及相应属性列的完整性约束条件,在属性列的后边定义。
-
表级完整性约束条件:涉及一个或多个属性列的完整性约束条件 ,在将属性列完之后定义。
3)外码要和所参照的主码类型相同。表级完整性约束的时候属性列需要加括号。
二、修改表
增加列
alter table student add graduation date;
/*
1. 指定要修改的表
2. add关键字
3. 新增列的属性名
4. 新增列的数据类型
*/
删除列
alter table student drop column graduation;
修改列的数据类型
alter table student alter column graduation varchar(20);
增加约束
/*这种增加约束的方法不容易从左边的框框(键)中看出来*/
alter table student add unique(graduation);
/*给增加的约束自定义了一个别名,容易区分*/
alter table student add constraint S_un unique(graduation);
/*注意*/
--1. 不可以使用增加not null约束,想要添加只可以在设计中将勾去掉
--虽然以下的方式看似添加了not null约束,但是不起任何作用
alter table student add constraint cc check(sname is not null);
--2. 给某一属性列添加主键,需要保证该属性列不允许为空,刚建的新表在未加约束的情况下,默认属性列允许为空值
alter table student add primary key(sno,cno);
--3. 添加外键,需要保证外码和被参照表的主属性的数据类型保持一致
alter table student add foreign key (sno) references student(sno);
删除约束
/*通过指定的约束名字删除指定的约束*/
alter table student drop constraint S_un;
/*在左边单机右键删除*/
三、删除表
/*删除表的时候必须先将参照表干掉,再删除被参照表*/
drop table student;
索引的建立与删除
建立索引的目的是加快数据查询的速度。DBA或者表的属主可以根据需要建立表的索引;但是有些DBMS可以自动建立以下索引,1)PRIMARY KEY索引(聚簇索引)2)UNIQUE索引(唯一性索引)
一、创建索引
/*创建唯一性索引*/
/*
* stu为索引名字,创建索引必须要有一个索引名
* 列名后面紧跟排序类型,ASC为升序,DESC为降序,默认为ASC,可以有多个列,用逗号隔开。
* 对于已经包含重复值的属性列不可以增加唯一性索引
*/
create unique index S_nn on student(graduation asc);
/*创建聚簇索引(聚集)*/
Create clustered index stu on student(sage desc);
/*
* 聚簇索引的关键字为clustered,不是书上有误,而是sqlserver是这样
* 同样,列名后面紧跟排序类型,可以有多个列,用逗号隔开。
* 聚簇索引严格按照物理存储位置来排序。
* 不可以在有主键的表中创建索引
* 一个表只能创建一个聚簇索引
*/
二、删除索引
/*注意:删除索引必须为表名+索引名*/
drop index student.stu