数据库SQL---数据库、基本表、视图、索引的定义、修改、删除
1、sql(结构化查询语言)的组成:数据定义语言ddl、数据操纵语言dml、数据控制语言dcl、其他。
2、sql语言的功能:
1)数据查询:select
2)数据定义:create drop alter
3)数据操纵:insert update delete
4)数据控制:grant revoke
3、sql语言的操作对象
1)基本表:数据库中独立存在的表。
2)视图:从一个或几个基本表中导出的表,是虚表,只存放视图的定义,不存放对应的数据。
3)查询表:查询结果对应的表。
4)存储文件:数据库中存放关系的物理文件。
4、表的相关数据
1)字段:一个事物的某一特征
2)记录:字段的组合,表示的是一个具体的事物
3)表:记录的组合,表示的是同一类型事物的集合
4)表和字段、记录的关系:字段是事物的属性、记录是事物本身、表是事物的集合
5)列:字段的另一种称谓
6)属性:字段的另一种称谓
7)元组:记录的另一种称谓
5、数据库中建表方法
1)利用图形化界面建表
2)create table命令
(
dept_id int primary key,
dept_name nvarchar(100) not null,
dept_address nvarchar(100)
)
( --不能写成{
emp_id int constraint pk_emp_id_hahaha primary key,
emp_name nvarchar(20) not null,
emp_sex nchar(1) ,
dept_id int constraint fk_dept_id_heihei foreign key references dept(dept_id),
)
6、修改表
1)增加列(新增一列的值为空值)
alter table dept add dept_new int default 0
2)增加约束
alter table dept add constraint dept_name unique
3)删除约束
alter table dept drop constraint dept_name unique
4)修改列的数据类型
alter table dept alter column dept_name char(10)
7、删除表
delete table emp
8、约束:对一个表中的属性操作的限制叫做约束。
1)主键约束:不允许重复元素,避免数据的冗余。
2)外键约束:通过外键约束从语法上保证了本事务所关联的其他事物一定是存在的。
事物与事物之间的关系是通过外键来体现的。
3)create约束:保证事物属性的取值在合法的范围之内。
create table student
(stu_id int primary key,
stu_sal int check (stu_sal>1000 and stu_sal<=8000),
stu_sex nchar(1) default('男') ---()可以省,在数据库中字符串是必须用''括起来的
)
4)default约束:保证事物的属性一定会有一个值
5)唯一约束:保证了事物属性的取值不允许重复,但允许其中有一列且只能有一列为空。
(1)sqlserver只允许一个unique列为空,oracle允许多个unique列为空
(2)create table student2
(stu_id int primary key,
stu_sal int check (stu_sal>1000 and stu_sal<=8000),
stu_sex nchar(1) default('男'), ---()可以省,在数据库中字符串是必须用''括起来的
stu_name nvarchar(200) unique
)
insert into student2 values(1,6000,‘男’,‘张三’); ---ok
insert into student2 values(2,6000,‘男’,‘张三’);---error违反了唯一约束
insert into student2 values(2,6000,‘男’,‘李四’);---ok
insert into student2 values(null,6000,‘男’,‘王五’);---error主键不能为空,出错的信息是“不能将值null插入列‘stu_id’”
insert into student2 values(3,6000,‘男’,null);---ok 说明唯一键可以为空
stu_name nvarchar(200) unique not null---error两者可以组合使用
6)not null约束
(1)要求用户必须为该属性赋一个值,否则语法出错。
(2)如果一个字段不写null也不写not null,则默认是null,即默认允许为空,用户可以不给该字段赋值。
(3)如果用户没有为该字段赋值,则该字段的值默认是null。
(4)要注意null和default的区别
相同点:都允许用户不赋值。
不同点:null修饰的字段如果用户不赋值则默认是null。
default修饰的字段如果用户不赋值则默认是default规定的那个值。
9、表和约束的区别
1)数据库是通过表来解决事物的存储问题的
2)数据库是通过约束来解决事物取值的有效性和合法性的问题
3)建表的过程就是指定事物属性及其事物属性各种约束的过程。
10、关系:表和表之间的联系。
1)实现方式:通过设置不同形式的外键来体现报和表的不同关系。
2)分类(假设是a表和b表):
(1)一对一:既可以把表a的主键充当表b的外键,也可以把表b的主键充当表a的外键。
(2)一对多:把a表的主键充当b表的外键,或者讲:把a表的主键添加到b表来充当b表的外键。在多的一方添加外键。
(3)多对多:多对多必须的通过单独的一张表来表示
create table banji
(
banji_id int primary key,
banji_num int not null,
banji_name nvarchar(100)
)
create table jiaoshi
(
jiaoshi_id int primary key,
jiaoshi_name nvarchar(200)
)
create table banji_jiaoshi_mapping
(
banji_id int constraint fk_banji_id foreign key references banji(banji_id),
jiaoshi_id int foreign key references jiaoshi(jiaoshi_id),
kecheng nvarchar(20),
constraint pk_banji_id_jiaoshi_id primary key (banji_id, jiaoshi_id, kecheng)
)
11、主键:能够唯一标识一个事务的一个字段或者多个字段的组合,被称为主键。
1)含有主键的表称为主键表。
2)主键通常是证书,不建议使用字符串做主键(如果主键是用于集群式服务,可以考虑用字符串当主键)。
3)主键的值通常都不允许修改,除非本记录被删除。
4)主键不要定义成id,而要定义成表名id或者表名_id。
5)要用代理主键,不能用业务主键
任何一张表,强烈建议不要使用有业务含义的字段充当主键。
通常都是在表中单独添加一个整形的编号充当主键字段。
12、外键:如果一个表中的若干个字段是来自另外若干个表的主键或唯一键,则这若干个字段就是外键。
1)外键通常是来自另一个表的主键而不是唯一键,因为唯一键可能为空。
2)外键不一定是来自另外的表,也可能来自本表的主键。
13、先删主键表还是外键表
先删外键表,如果先删主键表会报错,因为这会导致外键表中的数据引用失败。
14、视图:视图从代码上看是一个select语句,从逻辑上看被当做一个虚拟表看待。
1)为什么需要视图
简化查询:避免了代码的冗余、避免了书写大量重复的sql语句。
2)如何创建视图
create view 视图的名字 as
---select的前面不能添加begin
select语句
---select的后面不能添加end
3)创建视图的select语句必须要为所有的计算列指定别名
---错误
create view v$_a
as
select avg(sal) from emp;
---正确
create view v$_a
as
select avg(sal) as "avg_sal" from emp;
4)视图不是物理表,是虚拟表,不建议通过视图更新视图所依附的原始表的数据或结构
(1)视图的优点:简化查询、增加数据的保密性。
(2)视图的缺点:增加了数据库维护成本;视图只是简化了查询,但是不能加快查询的速度。
15、索引
1)创建索引
create index studentidx on student(stu_id,stu_name)
2)删除索引
drop index studentidx