文章目录
一、SQL——数据库沟通的语言标准
1、什么是SQL
SQL(Structured Query Language,结构化查询语言)的主要功能就是在各种数据库间建立联系,进行沟通。
SQL语言本身可以分为4类:
- 定义要在数据库存储哪些信息的数据定义语言(DDL)
- 对数据库中的表进行操作的数据操纵语言(DML)
- 对数据库中的表进行检索的数据查询语言(DQL)
- 对数据库中对象进行权限管理的数据控制语言(DCL)
2、SQL的种类
(1)数据定义语言(Data Definition Language,DDL)
定义数据库中数据要如何存储的,包括对数据库中对象的创建、修改、删除的操作,这些对象主要有数据库、数据表、视图、索引等。
(2)数据操纵语言(Data Manipulation Language,DML)
对数据库的表进行操作,包括对数据库表中的数据进行增加、删除、修改的操作,并且在操作时一次可以把表中数据按条件进行多条或全部的处理。
(3)数据查询语言(Data Query Language,DQL)
对数据库表中的数据进行查询,查询时可以查询一个表也可以进行多个表的查询,并且可以按不同的条件来检索数据。
(4)数据控制语言(Data Control Language,DCL)
对数据库中的对象权限进行权限设置和取消等操作,但是只有数据库的系统管理员才有权力去执行对数据库对象权限的操作。使用DCL可以为数据库中不同的用户设置不同的权限,可以提高安全性。
二、Oracle 11g常用数据类型
1、字符型
在Oracle 11g中有varchar2、char、nchar、nvarchar2和long五种字符型,它们在数据库中是以ASCII码的格式存储的。
2、数字型
常用的有number和float两种类型,可以用它们表示整数和小数。
3、日期类型
常用的有date和timestamp两种类型,可以用它们来存放日期和时间。
4、其他数据类型
存放大数据的数据类型以及二进制文件的数据类型。
三、数据定义语言(DDL)
DDL主要包括数据库对象的创建(create)、删除(drop)和修改(alter)的操作。
1、使用Create语句创建表
CREATE TABLE table_name
{
column_name datatype [null|not null];
column_name datatype [null|not null];
...
[constraint]
}
说明:
- table_name:在数据库中创建的数据表的名称,在一个数据库中数据表名是不能重复的。
- column_name:表中的列名,列名在一个表中也是不能重复的。
- datatype:该列存放数据的数据类型。
- [null|not null]:允许该列为空或者不允许该列为空,在建表时默认为不允许该列为空。
- [constraint]:为表中的列设置约束。
2、使用Alter语句修改表
如果要对已经建好的表进行修改,那么久需要使用alter table语句来修改。修改的基本语法如下:
ALTER TABLE table_name
ADD column_name | MODIFY COLUMN column_name | DROP COLUMN column_name;
说明:
- ADD:用于向表中添加列。
- MODIFY:用来修改表中已经存在的列的信息。
- DROP COLUMN:删除表中的列,在删除表中的列时经常要加上CASCADE CONSTRAINTS,是要把该列有关的约束也一并删除掉。
3、使用Drop语句删除表
DROP TABLE table_name;
四、约束的使用
1、主键约束
- 作用:确保表当中的每一行数据的唯一性,主键约束具有非空和唯一性
- 一张表只能设计一个主键约束
- 主键约束可以由多个字段构成(联合主键或复合主键)
- 在创建表时设置主键约束
//创建表
create table table_name(
column_name datatype primary key,...
)
- 在修改表时添加主键约束(使用ALTER TABLE)
alter table table_name
add constraint constraint_name
primary key(column1,...);
- 更改约束的名称
alter table table_name
rename constraint old_constraint_name to new_constraint_name
- 删除主键约束
// 禁用指定的约束
alter table table_name
disable | enable constraint constraint_name
// 删除指定约束
alter table table_name
drop constraint constraint_name
2、外键约束
- 作用:可以保证使用外键约束的数据库列与所引用的主键约束的数据列一致,外键约束在一个数据表中可以有多个。
- 在创建表时设置外键约束
外键约束是建立在两张表中的约束,需要在创建表的语句后面加上如下语句:
CONSTRAINT constraint_name FOREIGN KEY (column_name)
REFERENCE table_name (column_name)
ON DELETE CASCADE;
说明:
-
constraint_name:创建的外键约束名字。
-
FOREIGN KEY (column_name):指定外键约束的列名。
-
REFERENCE:要引用的表名(列名)。
-
ON DELETE CASCADE:设置级联删除,当主键的字段被删除时,外键所对应的字段也被同时删除。
-
在修改表时添加外键约束
alter table table_name
add constraint constraint_name foreign key(column_name)
references table_main_name(column_name)
[on delete cascade];
- 删除外键约束
// 禁用指定的约束
alter table table_name
disable | enable constraint constraint_name
// 删除指定约束
alter table table_name
drop constraint constraint_name
3、CHECK约束
- 作用:能够规定每一个列能够输入的值,以保证数据的正确性。
- 在创建表时设置CHECK约束
// 第一种
create table table_name(
column_name datatype check(expressions),
...
);
// 第二种(expressions是检查约束的条件)
constraint constraint_name check(expressions);
- 在修改表时添加CHECK约束
alter table table_name
add constraint constraint_name
check(expressions);
- 删除CHECK约束
// 禁用指定的约束
alter table table_name
disable | enable constraint constraint_name
// 删除指定约束
alter table table_name
drop constraint constraint_name
4、UNIQUE约束
- 作用:保证字段值的唯一性
- 唯一约束和主键约束的区别
- 主键字段值必须是非空的
- 唯一约束允许有一个空值
- 主键在每一张表中只能有一个
- 唯一约束在每张表中可以有多个
- 在创建表时设置唯一约束
create table table_name(
column_name datatype unique,
...
);
constraint constraint_name unique(column_name);
- 在修改表时添加唯一约束
alter table table_name
add constraint constraint_name
unique(column1,...);
- 删除唯一约束
// 删除指定约束
alter table table_name
drop constraint constraint_name
5、NOT NULL约束
- 在创建表时设置非空约束
create table table_name(
column_name datatype not null,...
)
- 在修改表时添加非空约束
alter table table_name
modify column_name datatype not null;
- 在修改表时去除非空约束
alter table table_name
modify column_name datatype null;
五、数据操纵语言(DML)和数据查询语言(DQL)
DML是操纵数据库中数据所使用的语言,对数据库的数据操作包括对数据进行增加、删除、修改、查询的操作。
1、添加数据用INSERT
INSERT INTO table_name(column_name1, column_name2, ...) VALUE(data1, data2, ...)
说明:
- column_name1:指定表中要添加数据的列名,可以是一个到多个。
- data1:要填入指定列的数据值,这里要求添加值得数目要与列名数量一致。
通过其他数据表向表中添加数据
INSERT INTO table_name1(column_name1, column_name2, ...)
select column_name1, column_name2, ... FROM table_name2;
说明:
- table_name1:目标表的名称,也就是要插入数据的表名。
- table_name2:数据的来源表。
2、修改数据用UPDATE
UPDATE table_name SET column_name1-data1, column_name1-data2, ...[WHERE condition];
说明:
- column_name1:要修改数据列的字段名,可以是一个或多个。
- data1:要赋给字段的新值,注意数据类型的一致。
- WHERE:条件,这里如果省略了WHERE语句,那么就意味着要修改表中该字段的所有值,如果加上WHERE语句,那么就可以有选择地修改数据表中的某个字段。
3、删除数据用DELETE
DELETE FROM tabel_name [WHERE condition];
4、查询数据用SELECT
数据查询语言也称为DQL。
SELECT column_name1, column_name2, ... FROM table_name WHERE[condition];
说明:
- column_name1:代表的是数据表中的字段名,可以查询数据表中的一个或多个字段,同时可以使用“*”号代替数据表中所有的字段。
5、其他数据操纵语句
MERGE、TRUNCATE、LOCK TABLE等等。
比较常用的:
(1)TRUNCATE语句
和DELETE一样都是用来删除数据表中数据的,但是有区别。使用TRUNCATE语句删除表中的记录都是要把表中的记录全部删除,并且速度比DELETE快。它是无条件删除。
TRUNCATE TABLE table_name;
(2)MERGE语句
与UPDATE语句功能类似,都是修改表中数据的,但是有区别。使用MERGE语句可以对数据表同事进行增加和修改的操作。
MERGE [INTO] table_name1
USING table_name2
ON (condituion)
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;
说明:
- table_name1:要修改或添加的表。
- table_name2:参照的更新的表。
- condituion:table_name1和 table_name2之间的关系,或其他的一些条件。
- merge_update_clause:如果和参照表table_name2中的条件匹配,就执行更新操作的SQL语句。
- merge_insert_clause:如果条件不匹配,就执行增加操作的SQL语句。