创建索引
介绍
在不读取整个表的情况下,索引能更加快速地查找数据。用户无法看到索引,他们只能被用来提高查询效率。更新一个带有索引的表比更新一个不带索引的表花费更多时间,这是由于索引本身也需要更新导致的。因此,理想的做法是仅在经常被搜索的表上创建索引。
语法
创建简单索引,允许重复
CREATE INDEX index_name
ON table_name (column_name);
创建简单索引(在多个列上),允许重复
CREATE INDEX index_name
ON table_name (column_name1, column_name2);
创建唯一索引,不允许重复,唯一索引意味着两个行不能拥有同一个索引值
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
实例
CREATE INDEX PIndex
ON Persons (LastName);
CREATE INDEX PIndex
ON Persons (LastName, FirstName);
DROP
介绍
通过DROP语句可以删除索引、表、数据库
语法1 撤销索引 DROP INDEX
(Oracle)
DROP INDEX index_name;
语法2 撤销表 DROP TABLE
DROP TABLE table_name;
语法3 撤销数据库 DROP DATABASE
DROP DATABASE database_name;
语法4 TRUNCATE TABLE语句
只删除表中内容,不删除表
TRUNCATE TABLE table_name;
ALTER TABLE
介绍
ALTER TABLE 语句用于在已有的表中 添加、删除 或 修改 各个列。
语法1 在表中添加列
ALTER TABLE table_name
ADD column_name data_type;
语法2 删除表中的列
ALTER TABLE table_name
DROP COLUMN column_name;
语法3 改变表中的数据类中
ALTER TABLE table_name
MODIFY column_name data_type;
举例Persons表
P_id | LastName | FirstName | City |
---|---|---|---|
1 | san | zhang | BeiJing |
2 | si | li | ShangHai |
3 | wu | wang | GuangZhou |
实例1
在 "Persons" 表中添加一个名为 "DateOfBirth" 的列
ALTER TABLE Persons
ADD DateOfBirth date;
操作后的表如下:
| P_id | LastName | FirstName | City | DateOfBirth |
|–|–|–|–|–|
| 1 | san | zhang | BeiJing ||
| 2 | si | li | ShangHai ||
| 3 | wu | wang | GuangZhou ||
实例2
改变 "Persons" 表中 "DateOfBirth" 列的数据类型
ALTER TABLE Persons
MODIFY DateOfBirth year;
实例3
删除 "Person" 表中的 "DateOfBirth" 列
ALTER TABLE Persons
DROP COLUMN DataOfBirth;
操作后的表如下:
| P_id | LastName | FirstName | City |
|–|–|–|–|
| 1 | san | zhang | BeiJing |
| 2 | si | li | ShangHai |
| 3 | wu | wang | GuangZhou |
AUTO INCREMENT 字段
介绍
我们通常希望在每次插入新记录时,自动地创建主键字段的值。
AUTO INCREMENT 字段可以在新记录插入到表中的时候生成一个唯一的数字
语法
在 Oracle 中,必须通过 sequence 对象(该对象生成数字序列)创建 AUTO INCREMENT 字段:
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
上面的代码创建一个名为 seq_person 的 sequence 对象,它以1起始且以 1 为单位递增。该对象缓存10个值以提高性能。cache选项规定了为了提高访问速度要存储多少个序列值。
实例
要在 "Persons" 表中插入新记录,我们必须使用 nextval 函数(该函数从 seq_person 序列中取回下一个值):
INSERT INTO Persons (ID,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')
上面的 SQL 语句会在 “Persons” 表中插入一条新记录。
“ID” 列会被赋值为来自 seq_person 序列的下一个数字,所以使用了nextval函数;
“FirstName”列 会被设置为 “Lars”;”LastName” 列会被设置为 “Monsen”。
VIEW(试图)
介绍
视图是可视化的表,下面主要介绍怎样创建、更新和删除视图
创建视图 CREATE VIEW
语法1 创建视图
视图是基于SQL语句的结果集的可视化的表。
视图包含行和列,像一个真实的表(实际上并不是)。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
可以向视图添加WHERE语句、JOIN语句以及SQL函数,也可以呈现数据,就像这些数据来自于某个单一的表一样。
CREATE VIEW view_name AS -- 创建 --
SELECT column_name(s)
FROM table_name
WHERE condition;
视图总是显示最新的数据,每次查询视图时,数据库引擎通过使用视图的SQL语句重建数据。
实例1 创建视图
视图 "Current Product List" 会从 "Products" 表列出所有正在使用的产品
CREATE VIEW [Current Product List] AS
SELECT ProductID, ProductName
FROM Products
WHERE Discontinued=No;
实例2 查询实例1中的视图
SELECT *
FROM [Current Product List];
更新视图 REPLACE VIEW
语法2
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;
实例3
向 "Current Product List" 视图添加 "Category" 列
CREATE VIEW [Current Product List] AS
SELECT ProductID, ProductName, Category
FROM Products
WHERE Discontinued=No
撤销视图 DROP VIEW
语法
DROP VIEW view_name
NULL 值
介绍
NULL值代表遗漏的未知数据。表的列默认是可以存放NULL值的。
下面介绍 IS NULL 和 IS NOT NULL 操作符。
NULL 值
介绍
如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下,插入新记录或更新已有的记录。这意味着该字段将以 NULL值的形式来保存。
NULL 值的处理方式与其他值不同。
NULL 用作未知的 或 不适用 的 值 的 占位符。
无法比较 NULL 和 0,因为它们不等价。
也无法使用比较运算符来测试 NULL 值,比如 =、< 或 <>。
必须使用 IS NULL 和 IS NOT NULL 操作符。
实例1 IS NULL
SELECT LastName, FirstName, Address FROM Persons
WHERE Address IS NULL;
实例2 IS NOT NULL
SELECT LastName, FirstName, Address FROM Persons
WHERE Address IS NOT NULL;
本文链接: https://hexo.whtli.cn/archives/38f4f5a2.html
版权声明: 遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。