本篇博客说明:
本篇博客主要总结了数据库中表的创建,内容的增、删、改、查,并说明了在不同的数据库中对应的sql语句的写法。
其中所有示例引用表均以下面的数据库表为基础演示,
数据字典的.sql文件下载地址:
执行脚本:
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,为8月
FROM 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);