目录
(1)CREATE INDEX 语句
CREATE INDEX 语句用于在表中创建索引。用户无法看到索引,它们只能被用来加速搜索/查询。
注:更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
语法:
--在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name
ON table_name (column_name1);
--在表上创建一个唯一的索引。不允许使用重复的值:(唯一的索引意味着两个行不能拥有相同的索引值。)
CREATE UNIQUE INDEX index_name
ON table_name (column_name1);
--注:用于创建索引的语法在不同的数据库中不一样。因此,检查您的数据库中创建索引的语法。
--如果希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开
(2)撤销索引、撤销表以及撤销数据库
使用 DROP 语句,可以轻松地删除索引、表和数据库。
语法:
--DROP INDEX 语句删除表中的索引
--Access
DROP INDEX index_name ON table_name;
--SQL Server
DROP INDEX table_name.index_name;
--DB2/Oracle
DROP INDEX index_name;
--MySQL
ALTER TABLE table_name DROP INDEX index_name;
--DROP TABLE 语句用于删除表
DROP TABLE table_name;
--DROP DATABASE 语句用于删除数据库
DROP DATABASE database_name;
--TRUNCATE TABLE 语句仅删除表内的数据,但并不删除表本身
TRUNCATE TABLE table_name;
(3)ALTER TABLE 语句
ALTER TABLE 语句用于在已有的表中添加、删除或修改列。
语法:
--表中添加列
ALTER TABLE table_name
ADD column_name datatype;
--删除表中的列(请注意,某些数据库系统不允许这种在数据库表中删除列的方式)
ALTER TABLE table_name
DROP COLUMN column_name;
--改变表中列的数据类型
--SQL Server / MS Access:
ALTER TABLE table_name
ALTER COLUMN column_name datatype;
--My SQL / Oracle:
ALTER TABLE table_name
MODIFY COLUMN column_name datatype;
--Oracle 10G 之后版本:
ALTER TABLE table_name
MODIFY column_name datatype;
(4)AUTO INCREMENT 字段
Auto-increment 会在新记录插入表中时生成一个唯一的数字。在每次插入新记录时,自动地创建主键字段的值。
语法:
--MySQL
CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
);
--默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。
--要让 AUTO_INCREMENT 序列以其他的值起始
ALTER TABLE Persons AUTO_INCREMENT=100;
--SQL Server
CREATE TABLE Persons
(
ID int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
--在上面的实例中,IDENTITY 的开始值是 1,每条新记录递增 1。
--要规定 "ID" 列以 10 起始且递增 5,请把 identity 改为 IDENTITY(10,5)。
--Access
CREATE TABLE Persons
(
ID Integer PRIMARY KEY AUTOINCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
--默认地,AUTOINCREMENT 的开始值是 1,每条新记录递增 1。
--要规定 "ID" 列以 10 起始且递增 5,请把 AUTOINCREMENT 改为 AUTOINCREMENT(10,5)
--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');
数据库 | 定义auto increment 字段 | 插入新记录 |
MySQL | AUTO_INCREMENT ALTER TABLE table_name AUTO_INCREMENT=100 | 要在 表中插入新记录,我们不必为 AUTO INCREMENT 字段 列规定值(会自动添加一个唯一的值) |
SQL Server | IDENTITY(开始值,递增值) | |
Access | AUTOINCREMENT(开始值,递增值) | |
Oracle | 创建sequence 对象 | 使用 nextval 函数(该函数从 seq_person 序列中取回下一个值。 seq_person.nextval |
(5)SQL 视图(Views)
在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
您可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。
语法:
-- CREATE VIEW 语句
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;
--视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。
--更新视图
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;
--撤销视图
DROP VIEW view_name;
视图的作用:
1、视图隐藏了底层的表结构,简化了数据访问操作,客户端不再需要知道底层表的结构及其之间的关系。
2、视图提供了一个统一访问数据的接口。(即可以允许用户通过视图访问数据的安全机制,而不授予用户直接访问底层表的权限)
3、从而加强了安全性,使用户只能看到视图所显示的数据。
4、视图还可以被嵌套,一个视图中可以嵌套另一个视图。
(6) Date 函数
MySQL Date 函数
函数 | 描述 | 数据类型 |
---|---|---|
NOW() | 返回当前的日期和时间 |
|
CURDATE() | 返回当前的日期 | |
CURTIME() | 返回当前的时间 | |
DATE() | 提取日期或日期/时间表达式的日期部分 | |
EXTRACT() | 返回日期/时间的单独部分 | |
DATE_ADD() | 向日期添加指定的时间间隔 | |
DATE_SUB() | 从日期减去指定的时间间隔 | |
DATEDIFF() | 返回两个日期之间的天数 | |
DATE_FORMAT() | 用不同的格式显示日期/时间 |
SQL Server Date 函数
函数 | 描述 | 数据类型 |
---|---|---|
GETDATE() | 返回当前的日期和时间 |
|
DATEPART() | 返回日期/时间的单独部分 | |
DATEADD() | 在日期中添加或减去指定的时间间隔 | |
DATEDIFF() | 返回两个日期之间的时间 | |
CONVERT() | 用不同的格式显示日期/时间 |
注:对于DATETIME来说,没有时间部分,默认时间为 00:00:00。
(7)NULL 值
默认地,表的列可以存放 NULL 值。
如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。
NULL 值的处理方式与其他值不同。
NULL 用作未知的或不适用的值的占位符。
注释:无法比较 NULL 和 0;它们是不等价的。
语法:
--IS NULL选取在某列中带有 NULL 值的记录
SELECT column_name(s) FROM table_name
WHERE column1 IS NULL;
--IS NOT NULL选取在某列中不带有 NULL 值的记录
SELECT column_name(s) FROM table_name
WHERE column1 IS NOT NULL;
(8)NULL 函数
希望有NULL的列不影响计算。
语法:
--如果 "UnitsOnOrder" 是 NULL,则不会影响计算,因为如果值是 NULL 则 ISNULL() 返回 0(可将0换成其他值):
--SQL Server / MS Access
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products;
--Oracle使用 NVL() 函数
SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products;
--MySQL
--使用 IFNULL() 函数
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products;
或
--使用 COALESCE() 函数
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products;
数据库 | 函数 |
SQL Server / MS Access | ISNULL(column_name,期望值) |
Oracle | NVL(column_name,期望值) |
MySQL | IFNULL(column_name,期望值) 或
COALESCE(column_name,期望值) |