数据库基础sql语句总结(以Oracle为主介绍,并与mysql,sql server做对比)一

本篇博客说明:

本篇博客主要总结了数据库中表的创建,内容的增、删、改、查,并说明了在不同的数据库中对应的sql语句的写法。
其中所有示例引用表均以下面的数据库表为基础演示,
数据字典的.sql文件下载地址:

http://pan.baidu.com/s/1ge8OY4b

执行脚本:

1.Oracle中执行脚本:
win+R->运行->sqlplus:输入正确的用户名和密码下后,@脚本路径或者@+”直接鼠标拖入文件“。
2.MySql中执行脚本:
source 脚本路径
3.Sql Server中执行脚本:
cmd窗口中:osql -S 127.0.0.1 -U sa -P sa -i d:\test.sql
说明:osql为SQL Server的命令,要在cmd中执行该命令,一般安装完SQL Server后该命令对应的路径会自动添加到系统环境变量中。 -S 表示要连接的数据库服务器 -U表示登录的用户ID,-P表示登录密码 -i表示要执行的脚本文件路径。

先介绍下SQL语句的分类
1.DML(数据操作语言):SELECT,INSERT,DELETE,UPDATE
2.DDL(数据定义语言):CREATE,DROP,ALTER,TRUNCATE等
3.DCL(数据控制语言):COMMIT,ROLLBACK,SAVEPOINT等

—-事务:单位时间内的一系列的操作。这些操作要么全部成功,要么全部失败。
–提交事务:COMMIT,将对表中数据的操作(增,删,改)保存到表中。
–回退事务:ROLLBACK,将数据还原到最初或最后一次提交的状态。

1.当出现了DDL语句时,数据库会自动提交事务。
2.当正常结束Oracle语句时,Oracle会自动提交事务。
3.当异常结束Oracle语句时,Oracle会自动回退事务。

一.创建,删除表

    CREATE TABLE 表名(
列名 数据类型[(长度)] [约束],
列名 数据类型[(长度)] [约束],
……
列名 数据类型[(长度)] [约束]
);
**--------------**Oracle中常用的数据类型:****

 1. 数字类型:NUMBER
    整数------NUMBER(6),长度可以省略,省略则默认为38位的数字。
    浮点数-----NUMBER(8,2),浮点数的长度**不能省略**,表示整个数字长为8位,其中有两位小数。
 2. 字符类型:**默认单位为字节,且必须指定长度**
    CHAR-----保存固定长度的字符串,当内容的长度不足时,使用**空格在内容的后面补齐长度**。
    VARCHAR2-----VARCHAR2(8 CHAR)保存可变长度的字符串(但是不能超过上限),如果内容的长度不够,不使用空格补齐长度。上面表示8个字符长度的字符,VARCHAR(8)表示8个字节长度的字符。
                (*这里为什么不用VARCHAR而要用VARCHAR2:VARCHAR2是oracle独用的数据类型它会      在任何版本中向上和向下兼容,但VARCHAR是标准sql提供的数据类型可能在下几个版本的JDK中随着sql标准的变化而改变。。。VARCHAR2把所有字符都占两字节处理(一般情况下),VARCHAR只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节)*
 3. 日期类型-----DATE,表示日期+时间。不能指定长度。

 **查看表的结构**

DESC 表名/视图名


**删除表**----删除表的同时也删除表中所有的数据。并且删除的数据无法回退。

DROP TABLE 表名


**表中字段的约束**
1.主键约束------PRIMARY KEY,不能重复,不能为NULL。通过主键可以在表中找到唯一的一行数据。
2.非空约束------NOT NULL。 表示该列值不能为空。
3.检查约束-----CHECK。添加或者修改列中的数据时,检查列中的数据是否合法。
4.默认值-------DEFAULT。当没有向列中添加值时,自动为列添加数据。
5.唯一约束-----UNIQUE。表示为列的值可以为NULL,但不能重复。
6.外键约束-----FOREIGN KEY
例如下面代码:

CREATE TABLE TEST(
T_ID NUMBER(5) PRIMARY KEY, // 表示长度为5的整数,为主键约束
T_NAME VARCHAR2(10 CHAR) NOT NOLL, //表示长度为10个字符的可变长字符串,为非空约束
T_SEX CHAR(1 CHAR) DEFAULT ‘女’, //表示长度为1个字符的字符,默认值为‘女’ T
T_AGE NUMBER(2) CHECK(T_AGE>=20 AND T_AGE<=50), //表示长度为2的整数,检查约束在20到50之间的才能插入或者更改。
T_BIRTHDAY DATE //表示一个日期类型的字段
CONSTRAINT T_SID_S FOREIGN KEY(T_NAME) REFERENCES S(S_NAME),//表示以自己的T_NAME作为外键参照S表中的S_NAME主键

增、删、改sql语句

一.添加数据:INSERT INTO 语句。

1.向表中添加一行新数据,并向新行中所有的列赋值。
格式:INSERT INTO 表名 VALUES(值,值,……);
例:INSERT INTO TEST VALUES(1,’张三’,’男’,TO_DATE(‘1986-10-20’,’YYYY-MM-DD’));

2.向表中添加一行新数据,并向新行中指定的列赋值。
格式:INSERT INTO 表名(列名,列名,……) VALUES(值,值,……);
例:INSERT INTO TEST(T_NAME,T_ID) VALUES(‘BB’,2);

3.将其它表中的数据复制到指定的列中
格式:INSERT INTO 表名[(列名,列名,……)] SELECT语句;
例:INSERT INTO TEST(T_ID,T_NAME,T_BIRTHDAY) SELECT EMPLOYEE_ID,LAST_NAME,HIRE_DATE FROM EMPLOYEES;

注意:如果表存在外键约束,添加数据时,应该先添加主表数据,再添加子表的数据。

二.修改数据:UPDATE语句

格式:UPDATE 表名 SET 列名=值[,列名=值,……] [WHERE 条件];
例:

UPDATE TEST SET T_BIRTHDAY=SYSDATE WHERE T_BIRTHDAY IS NULL;
UPDATE TEST SET T_NAME='ABC',T_SEX='女' WHERE T_ID=1;

三.删除数据:DELETE语句

格式:DELETE [FROM] 表名 [WHERE 条件];
例:

DELETE FROM TEST WHERE T_ID=2;

注意:删除*TEST表中T_NAME*内所有的数据

UPDATE TEST SET T_NAME=NULL;

查询表

1.基本的SELECT语句:
SELECT 列名[,列名,……]|*
FROM 表名

注意:
1.Oracle中的SELECT语句的FROM子句不能省略。
2.SQL语句不区分大小写。
3.SQL语句可以写成一行或多行。
4.通常情况下,sqlplus中的SQL语句使用分号表示结束。
4.只能直接使用半角的标点符号。
5.工作中不建议使用*查询表中所有列,查询效率低。

2.算术运算符+、-、*、/

注意:Oracle中“+”只有加法运算的功能,没有连接符的功能。

SELECT FROM DUAL; 5/2 – Oracle中的结果为:2.5,MySQL中的结果是2.5,SQL Server中的结果为:2

3.列别名

格式:列名 列别名 或者 列名 AS 列别名

注意:
Oracle中会将英文的列名变成大写。其他数据库不会。
当列别名区分大小写,或者列别名中包含了特殊字符,或者列别名为关键字时,需要将列别名放到一对双引号中。
–关系数据库中双引号通常用于表示别名。
–关系数据库中单引号表示字符串。

SELECT LAST_NAME AS "USER",JOB_ID,SALARY,SALARY*12 AS 年薪
FROM EMPLOYEES;
4.连接符

Oracle中连接两个字符串可以用“||”表示,或者用CONCAT(“”,”“)表示连接(只能连接两个参数,多连需要函数嵌套使用)。
MySql中用“+”连接,不同类型用CONCAT()函数连接(可以同时连接多个参数)。
SQL SERVER中用“+”连接,不同类型用如下“SELECT ‘AAA’ + CAST(111 AS CHAR)”。

5.DISTINCT关键字

作用:屏蔽查询结果中重复的数据。

SELECT DISTINCT JOB_ID
FROM EMPLOYEES;

注意
1.通常情况下:一个SELECT中只能出现一个DISTINCT关键字。
2.通常情况下:DISTINCT只能出现在关键字与第一个列之间。

6.数据过滤:WHERE

格式:

SELECT    ###       3
FROM      ###      1
[WHERE 条件]      2--条件的结果**一定为boolean类型**

–条件为数字类型:查询employees表中所有在50号部门工作的员工,显示last_name,salary,department_id

SELECT LAST_NAME,SALARY,DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID=50;

—-条件为字符串类型:值必须出现在一对单引号中,并且查询英文时区分大小写。
—-查询employees表中last_name为fay的员工,显示:employee_id,last_name,hire_date

SELECT EMPLOYEE_ID,LAST_NAME,HIRE_DATE
FROM EMPLOYEES
WHERE LAST_NAME='Fay';

—-条件为日期类型:值必须出现在一对单引号中,并且值必须为Oracle默认为日期格式:DD-MON-RR
—-查询employees表中1997-8-17入职员工的last_name,job_id,salary

SELECT LAST_NAME,JOB_ID,SALARY,HIRE_DATE
FROM EMPLOYEES
WHERE HIRE_DATE='17-8月-97';

注意:WHERE子句中不能使用列别名。

——比较运算符:>,>=,<,<=,=,!=,<>
——查询employees表中年薪大于1000的员工,显示:last_name,job_id,salary,年薪

SELECT LAST_NAME,JOB_ID,SALARY,SALARY*12 AS 年薪
FROM EMPLOYEES
WHERE SALARY*12>1000;

–查询employees表中97年之后入职员工的last_name,hire_date

SELECT LAST_NAME,HIRE_DATE
FROM EMPLOYEES
WHERE HIRE_DATE>='1-1月-97';

——特殊的比较运算符
——BETWEEN..AND:查询指定范围内的数据(包含了边界值)
–查询employees表中工资在6000-12000之间的员工,显示:last_name,salary

SELECT LAST_NAME,SALARY
FROM EMPLOYEES
WHERE SALARY BETWEEN 6000 AND 12000;

—–IN(值列表):查询匹配列表中任意一个值相等的数据。只能判断是否相等。
—–查询employees表中在20或50号部门工作的员工,显示:last_name,departmnet_id

SELECT LAST_NAME,DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN(20,50);

—–LIKE:模糊查询
%:任意长度的任意字符。
_:一个长度的任意字符。

SELECT LAST_NAME
FROM EMPLOYEES
WHERE LAST_NAME LIKE '%n_';

–使用ESCAPE声明一个符号,声明LIKE中此符号后面的一个下划线或百分号,不是转义字符,而是查询的内容。
–查询employees表job_id中包含A_的员工,显示:last_name.job_id

SELECT LAST_NAME,JOB_ID
FROM EMPLOYEES
WHERE JOB_ID LIKE '%A/_%' ESCAPE '/';

—–IS NULL/IS NOT NULL
—–NULL:与类型无关,表示未知或不确定的值。

SELECT LAST_NAME,SALARY,DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID IS NULL;

—–逻辑运算符:AND OR NOT
—–查询employees表中工资在6000-12000之间的员工,显示:last_name,salary

SELECT LAST_NAME,SALARY
FROM EMPLOYEES
WHERE SALARY BETWEEN 6000 AND 12000;
SELECT LAST_NAME,SALARY
FROM EMPLOYEES
WHERE SALARY>=6000 AND SALARY<=12000;

–查询employees表中在20或50号部门工作的员工,显示:last_name,departmnet_id

SELECT LAST_NAME,DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN(20,50);
SELECT LAST_NAME,DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID=20 OR DEPARTMENT_ID=50;

—–NOT关键字:查询表中不在某个范围内的数据。
—–查询employees表中工资不在6000-12000之间的员工信息

SELECT LAST_NAME,SALARY
FROM EMPLOYEES
WHERE NOT SALARY BETWEEN 6000 AND 12000;
SELECT LAST_NAME,SALARY
FROM EMPLOYEES
WHERE NOT(SALARY>=6000 AND SALARY<=12000);

—–排序:ORDER BY子句
格式如下:1.升序:ASC关键字,默认为升序排序 2.降序:DESC关键字

SELECT         3
FROM           1
[WHERE]        2
[ORDER BY 列名/第几列] ASC/DESC  4
SELECT LAST_NAME,SALARY
FROM EMPLOYEES
ORDER BY SALARY DESC;
SELECT LAST_NAME,SALARY*12 AS 年薪
FROM EMPLOYEES
ORDER BY 年薪 DESC;
SELECT LAST_NAME,SALARY*12 AS 年薪
FROM EMPLOYEES
ORDER BY 2 DESC; //表示按照查询结果的第二列降序排序

注意:ORDER BY 一定是放在sql语句的最后面,且是最后执行的(因此ORDER BY中可以用列的别名),只有在MySql中ORDER BY 的后面可以加limit

—–多列排序
—–查询employees表中所有员工的last_name,job_id,department_id,salary。结果根据department_id升序排序,salary降序排序。

SELECT LAST_NAME,JOB_ID,DEPARTMENT_ID,SALARY
FROM EMPLOYEES
ORDER BY DEPARTMENT_ID ASC NULLS FIRST,SALARY DESC;

**注意:
–Oracle认为NULL是最大的。
–SQL Server认为NULL是最小的。**

—–NULLS FIRST/NULLS LAST:在不影响排序规则的前提下,将NULL放在结果的最前/后面。

SELECT LAST_NAME,SALARY*12 AS 年薪
FROM EMPLOYEES
ORDER BY 2 NULLS LAST DESC; //表示按照查询结果的第二列降序排序

—–单行函数:每个字段的每条记录经过旦行函数输出一条记录
—-字符类型单行函数

SELECT LAST_NAME,UPPER(LAST_NAME)--大写
FROM EMPLOYEES;

SELECT LAST_NAME,LOWER(LAST_NAME)--小写
FROM EMPLOYEES;

—–获得字节数,字符数

SELECT LENGTH('中国')--获得字符数
FROM DUAL;

SELECT LENGTHB('中国')--获得字节数
FROM DUAL;

—–从指定位置截取字符串,直到字符串的最后

SELECT SUBSTR(LAST_NAME,3) AS A
FROM EMPLOYEES;

—–从指定的位置开始截取指定长度的字符串

SELECT SUBSTR(LAST_NAME,3,2) AS A
FROM EMPLOYEES;

—–从倒数第N位开始截取字符串,直到字符串的最后(Oracle独有)

SELECT SUBSTR(LAST_NAME,-3) AS A
FROM EMPLOYEES;

—–从倒数第N位开始截取指定长度的字符串(Oracle独有)

SELECT SUBSTR(LAST_NAME,-3,2) AS A
FROM EMPLOYEES;

—–在第一个参数中查找第二个参数首次出现的位置,没找到返回0

SELECT LAST_NAME,INSTR(LAST_NAME,'A')
FROM EMPLOYEES;
SELECT LAST_NAME
FROM EMPLOYEES
WHERE INSTR(LAST_NAME,'a')!=0;

—–LPAD()/RPAD():显示第一个参数的值,使用第二个参数设置第一个参数显示的长度,如果第一个参数长度不够,使用第三个参数在第一个参数的左/右面补齐长度。

SELECT LPAD(EMPLOYEE_ID,6,0),LAST_NAME
FROM EMPLOYEES;

—–TRIM():去掉字符串两端的字符

SELECT TRIM('   FEGCXFDF  ') AS A ---------去掉字符串两端的空格
FROM DUAL;

SELECT TRIM('AABBBBABBBAA','A') AS A----------去掉字符串两端指定的字符'A'
FROM DUAL;

—–数字类型单行函数
—-四舍五入

SELECT ROUND(256.987),ROUND(256.987,2),ROUND(256.987,0),ROUND(256.987,-1)
FROM DUAL;

—-截断数字

SELECT TRUNC(256.987),TRUNC(256.987,2),TRUNC(256.987,0),TRUNC(256.987,-1)
FROM DUAL;

—-取余数

SELECT MOD(15,2)
FROM DUAL;

—–日期类型单行函数
—-SYSDATE:获得当前数据库服务器的日期+时间

SELECT SYSDATE-200
FROM DUAL;

MySQL中: SQL Server中
–now():日期+时间 –getDate():日期+时间
–currdate():日期

注意:
1.日期+天数=日期
2.日期-天数=日期
3.日期-日期=天数
4.日期不能加日期

—-查询employees表中所有员工的last_name,hire_date,天数

SELECT LAST_NAME,HIRE_DATE,(SYSDATE-HIRE_DATE) AS 月数
FROM EMPLOYEES;

—-MONTHS_BETWEEN():求两个日期相差的月数

SELECT LAST_NAME,HIRE_DATE,MONTHS_BETWEEN(SYSDATE,HIRE_DATE) AS 月数
FROM EMPLOYEES;

—-ADD_MONTHS():在日期上加上指定的月数

SELECT ADD_MONTHS(SYSDATE,24)
FROM EMPLOYEES;

—-NEXT_DAY():获得指定日期下一个星期X的日期

SELECT NEXT_DAY(SYSDATE,3)------这个3表示下一个星期二,从周天记为1.
FROM DUAL;

SELECT NEXT_DAY(SYSDATE,'星期二')
FROM DUAL;

—–类型转换单行函数
—-自动转换:效率低

SELECT LAST_NAME,SALARY
FROM EMPLOYEES
WHERE SALARY>10000;

—–手动转换
1.字符串与日期可以相互转换
2.字符串与数字可以相互转换
3.日期与数字不能相互转换

ORCLE中日期的格式化(TO_DATE)可参考:

http://www.cnblogs.com/ajian/archive/2009/03/25/1421063.html

—-TO_CHAR(D,F):将日期类型D根据模板F转换为字符类型的值

SELECT LAST_NAME,TO_CHAR(HIRE_DATE,'YYYY-MM-DD')
FROM EMPLOYEES;

SELECT TO_CHAR(SYSTEM,'YYYY-MM-DD HH24:MI:SS DAY DY') //24表示24小时制,DAY表示这个星期的第几天全写,        //DY是这周第几天简写   
FROM DUAL;

SELECT TO_CHAR(SYSDATE,'D DD DDD') // D表示当周第几天(周日为1),DD表示当月第几天,DDD表示当年第几天。
FROM DUAL;

SELECT LAST_NAME,TO_CHAR(HIRE_DATE,'FMYYYY"年"MM"月"DD"日"') //表示以"XX年XX月XX日"形式输出格式,FM起到点去掉月份前面0的作用,如不加FM,为08月,加FM,为8FROM EMPLOYEES;

—-查询所有星期二入职的员工的last_name,hire_date(格式如:1999-1-1 星期二)

SELECT LAST_NAME,TO_CHAR(HIRE_DATE,'FMYYYY-MM-DD DAY')
FROM EMPLOYEES
WHERE TO_CHAR(HIRE_DATE,'DAY')='星期二';

SELECT LAST_NAME,TO_CHAR(HIRE_DATE,'FMYYYY-MM-DD DAY')
FROM EMPLOYEES
WHERE TO_CHAR(HIRE_DATE,'D')='3';

—–TO_CHAR(N,F):将数据类型N根据模板F转换为字符类型的值

SELECT 
       TO_CHAR(25653.9874,'FM$999,999.00'),
       TO_CHAR(25653.9874,'FML999,999.00') //L表示显示当地的货币符号,即为oracle产地的地方货币符号
FROM DUAL;

—–TO_DATE(C,F):根据模板F将字符类型C转换为日期类型的值。

SELECT TO_DATE('2017-1-27','YYYY-MM-DD')-SYSDATE
FROM DUAL;

SELECT TO_DATE('2017-1-27','YYYY-MM-DD')
FROM DUAL;

—–TO_NUMBER(C,F):根据模板F将字符类型C转换为数字类型的值。

SELECT TO_NUMBER('$50,000.00','$99,999.00')
FROM DUAL;

—–通用单行函数
—-NVL():当第一个参数不为NULL,返回第一个参数。当第一个参数为NULL,返回第二个参数。两个参数的类型必须一致。—–SQL SERVER 中用IFNULL()函数表示

SELECT LAST_NAME,NVL(TO_CHAR(COMMISSION_PCT,'FM$0.00'),'没有佣金')
FROM EMPLOYEES;

—–关系数据库中,当算术运算中出现NULL,结果一定为NULL
—-查询employees表中所有员工的last_name,salary,commission_pct,年薪,年收入(年薪+年薪*佣金)

SELECT LAST_NAME,SALARY,COMMISSION_PCT,SALARY*12 AS 年薪,(SALARY*12)+(SALARY*12*NVL(COMMISSION_PCT,0)) AS 年收入
FROM EMPLOYEES;

—–分支选择:CASE表达式,DECODE()函数
—-查询employees表中所有员工的last_name,job_id,salary,新工资。如果job_id是IT_PROG时,工资增加10%。如果job_id是ST_CLERK时,工资增加15%。如果job_id是SA_REP时,工资增加20%。其它职位工资不变。

SELECT LAST_NAME,JOB_ID,SALARY,
CASE
WHEN JOB_ID='IT_PROG' THEN TO_CHAR(SALARY*1.1,'FM$999,999.00')
WHEN JOB_ID='ST_CLERK' THEN TO_CHAR(SALARY*1.15,'FM$999,999.00')
WHEN JOB_ID='SA_REP' THEN TO_CHAR(SALARY*1.2,'FM$999,999.00')
ELSE '工资不变'
END AS 新工资
FROM EMPLOYEES;

—-只能判断是否相等

SELECT LAST_NAME,JOB_ID,SALARY,
CASE JOB_ID
WHEN 'IT_PROG' THEN TO_CHAR(SALARY*1.1,'FM$999,999.00')
WHEN 'ST_CLERK' THEN TO_CHAR(SALARY*1.15,'FM$999,999.00')
WHEN 'SA_REP' THEN TO_CHAR(SALARY*1.2,'FM$999,999.00')
ELSE '工资不变'
END AS 新工资
FROM EMPLOYEES;

—-DECODE()函数:只能判断是否相等。

SELECT LAST_NAME,JOB_ID,SALARY,
DECODE(
    JOB_ID,
    'IT_PROG',SALARY*1.1,
    'ST_CLERK',SALARY*1.15,
    'SA_REP',SALARY*1.2,
    SALARY
)AS 新工资
FROM EMPLOYEES;

—–查询employees表中所有员工的last_name,hire_date入职那天是星期几(显示汉字),并按日期升序排序

SELECT LAST_NAME,TO_CHAR(HIRE_DATE,'YYYY-MM-DD') AS 入职时间,TO_CHAR(HIRE_DATE,'DAY') AS 星期
FROM EMPLOYEES
ORDER BY TO_CHAR(HIRE_DATE-1,'D') ASC;  //因为星期日是1,要想按星期一最小来排序,需要-1

SELECT LAST_NAME,TO_CHAR(HIRE_DATE,'YYYY-MM-DD') AS 入职时间,TO_CHAR(HIRE_DATE,'DAY') AS 星期,TO_CHAR(HIRE_DATE,'D') AS A
FROM EMPLOYEES
ORDER BY 
CASE
WHEN TO_CHAR(HIRE_DATE,'D')='1' THEN 7
WHEN TO_CHAR(HIRE_DATE,'D')='2' THEN 1
WHEN TO_CHAR(HIRE_DATE,'D')='3' THEN 2
WHEN TO_CHAR(HIRE_DATE,'D')='4' THEN 3
WHEN TO_CHAR(HIRE_DATE,'D')='5' THEN 4
WHEN TO_CHAR(HIRE_DATE,'D')='6' THEN 5
WHEN TO_CHAR(HIRE_DATE,'D')='7' THEN 6
END ASC;

—–视图
格式:

CREATE [OR REPLACE] VIEW 视图名
AS
SELECT语句;

视图的作用
1.简化查询
2.提高数据库安全性

–视图中没有数据,视图的数据来自于表。

—–序列:产生一个数字。通常用于自动生成主键。

CREATE SEQUENCE 序列名
[INCREMENT BY integer] --序列每次增加N/减少N,默认为1
[START WITH  integer]  --超始值,默认为0
[ MAXVALUE integer| NOMAXVALUE ] --最大值为N/没有最大值(默认)
[ MINVALUE integer | NOMINVALUE ] --最小值为N/没有最小值
[ CYCLE | NOCYCLE ] --循环/不循环(默认)
[ CACHE integer | NOCACHE ] --当服务器启动时将序列的后N个值存入缓存中(默认)/当服务器启动时不将序列的值存入缓存中
[ ORDER | NOORDER ]

注意:序列的值不能ROLLBACK

—-序列的属性:
1.NEXTVAL:获得序列的下一个值,调用此属性时序列的值一定发生改变。
2.CURRVAL:获得序列当前值。调用此属性时序列的值不变。

CREATE SEQUENCE STU_ID_SEQ;
INSERT INTO STUDENTS(STU_ID,STU_NAME) VALUES(STU_ID_SEQ.NEXTVAL,'AA');

—–索引:提高查询效率。降低增删改的效率。
特点:
自动创建:当表中有主键或唯一约束时,Oracle会为对应的列添加唯一索引。
手动创建:
CREATE INDEX 索引名 ON 表名(列名[,列名,……]);

CREATE INDEX EMP_NAME_INDEX ON EMPLOYEES(LAST_NAME);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值