oracle的学习Ⅳ(create、insert、update、delete、约束、事务)
一、create(DDL)
方法一: 通过查询建表
create table tablename as select;
create table t1 as select * from emp; // emp查询的结果赋给t1
create table t2 as select ename,sal from emp where deptno=20;
create table t3 as select deptno,avg(sal) avgsal from emp group by deptno;
create table t4 as select * from emp where 1=2; // 复制emp表结构到t4
方法二:
create table tablename
(columnname datatype [constraint],);
表名与列名命名要求: 字母、下划线 开头 ,知名见意,最长不要超过30个字符。
常用数据类型: 数值型 number(a[,b])、字符型 char(n) ,varchar2(n)、日期型 date dd-mon-yy
要注意的是这里使用的varchar2定义的是一个动长字符串,而char定义的是一个固定的字符串,当然varchar和varchar2可实现一样的效果但oracle里面对varchar2的支持更好,所以更好使用varchar2
create table student
(s_id number(12),
s_name varchar2(20));
二、insert(DML)
一次添加一条记录
insert into tablename[(列名1……)] values(值1,);
insert into dept(deptno,dname,loc) values(10,'a','linyi');
insert into dept(dname,loc,deptno) values('a','linyi',10);
// 对dept插入新值,值对应好其目标字段就可忽略字段顺序
insert into dept values(10,'a','linyi');
一次添加多条
insert into tablename[(列名1……)] select;
insert into dept(deptno,dname) select 12,'c' from dual union select 13,'d' from dual;
// 两次查询结果的并,插入到dept表内
三、update(DML)
update tablename set columname1=新值[……][where];
update emp set sal=sal*1.1; // 给emp表里面的全部sal乘1.1
update emp set sal=sal*1.1 where deptno=10; // 给emp表里面部门号为10的全部sal乘1.1
四、delete(DML)
delete from tablename [where];
delete from emp; // 删掉emp表内的所有记录
delete from emp where deptno=10; // 删掉emp表内deptno为10的记录
五、约束
约束:用来保证表中数据的准确性。 包含有主键、外键、唯一性、非空、检查
主键约束
primary key : 列值不能重复 不能为空。一个表最多只能有一个主键约束 。
create table student
(s_id number(12) primary key, // 一个表内只能有一个主键,但一个主键可对应多个列
s_name varchar2(20));
唯一性约束
unique: 列值不能重复,可以包含多个空值 。
create table student
(s_id number(12) primary key,
s_name varchar2(20) unique ); // 可有多个null,因为null != null
非空约束
not null : 列值不能为空。
create table student
(s_id number(12) primary key,
s_name varchar2(20) unique not null ); // 这里的unique和not null就类似于primary key
检查约束
check(条件表达式) : 列值必须满足指定条件表达式的需求,null不在其检查范围内。
create table student
(s_id number(12) , // 列级约束
s_name varchar2(20) unique not null,
s_gender char(1) check( s_gender in('f','m')), // m为男,f为女,这里的null可以插入
primary key(s_id) // 表级约束
);
外键约束
foreign key(约束列) references 引用表(引用列) : 外键约束列列的取值必须在引用表引用列的列值范围内,外键为约束列,约束列所在的表为从表,引用列所在的表为主表。
create table course
(c_id varchar2(12) primary key,
c_name varchar2(12)
);
create table grade
(s_id number(12) references student(s_id),
c_id varchar2(12) references course(c_id),
score number(4,1),
primary key(s_id,c_id) // 表级约束
);
六、事务
oracle
事务是一个完整的操作,当操作完成后,数据才会完全呈现。DML(insert、update、delete)语句不是完整的操作,需要一个确认(提交commit,回滚rollback)的过程;而DDL(create、alter、drop)语句,每一个都是一个完整的操作。(例如:在执行DDL时会在DDL的前后添加autocommit,则会把DDL值前未commit的数据commit)。要注意的是在使用exit退出sql命令窗口时DML语句会autocommit,而强制退出则会rollback
与mysql的区别
在sqlserver中需要显示的开启事务,gegin tran,commit,rollback。若不含有transaction,其中insert、update、delete执行完后就自动提
七、其他
“@+绝对地址” 可以执行sql的文本文件
@d:/createTables.txt // 文件的执行
本文地址:https://blog.csdn.net/weixin_45969777/article/details/109001140