01.oracle SQL基础
SQL是结构化查询语言
SQL分类
-
数据定义语言(DDL --- create/alter/drop)
-
sysdate --- 可以拿到当前系统时间
-
案例:创建学生表,教师表,课程表
-- 学生表 create table t_student(sid number(11) primary key,sname nvarchar2(20) not null,ssex char(4) default '男',sage number(11) not null, createdate date default sysdate ); comment on table t_student is '学生信息表'; comment on column t_student.sid is '学生编号'; comment on column t_student.sname is '学生姓名'; comment on column t_student.ssex is '学生性别'; comment on column t_student.sage is '学生年龄'; comment on column t_student.createdate is '创建日期';
注意:
1.一个中文等于4个字节,所以char(4)
2.sysdate 表示系统自带日期
3.default 默认值约束,当没有传递数据时,默认值维护该字段
4.创建表格之后,需要给每一个字段以及表格添加字段别名,方便辨识
5.表格别名创建语法:comment on table 表名 is 'xxx'
6.表格字段别名创建语法:comment on column 表名.字段名 is 'xxx'
-- 教师表 create table t_teacher(tid number(11) primary key,tname nvarchar2(20) not null ); comment on table t_teacher is '教师信息表'; comment on column t_teacher.tid is '教师编号'; comment on column t_teacher.tname is '教师姓名';
-- 课程表 create table t_course(cid number(11) primary key,cname nvarchar2(50) not null,tid number(11),constraint tid_fk foreign key(tid) references t_teacher(tid) ); comment on table t_course is '课程信息表'; comment on column t_course.cid is '课程编号'; comment on column t_course.cname is '课程名称'; comment on column t_course.tid is '教师编号,外键';
1.先有主键,后有外键
2.外键语法:constraint 外键名称 foreign key(本表字段) references 教师表(教师表字段)
3.references表示引用
4.foreign key表示外键
-
案例:删除表 --- 禁术
-- 首先创建表 create table t1(id number(11,0) primary key,name varchar2(20) not null ); -- 然后删除表 drop table t1;
-- alter alter user xxx account lock|unlock -- 设置账户是上锁还是解锁
-
-
数据操纵语言(DML --- insert/delete/update/select)
-
代码编写完成之后必须先运行,然后提交,然后再右击表格,点击Query data查找数据
-
insert --- 增加
-- 1.全表,表字段新增,values后面添加的数据值的顺序必须与表中的列的顺序一致 -- 下面因为把列段舍弃了,所以必须按表格列段顺序来,一一对应,而且缺一不可,即使有默认约束 insert into t_student values(1,'张三','男',21,sysdate); -- 2.根据列段添加值 -- 默认值可以被覆盖 insert into t_student(sid,sname,sage) values (2,'小气',18) insert into t_student(sid,sname,sage,ssex) values (3,'就赶快',18,'幺')
-
update --- 真实环境谨慎使用
注:一般update修改操作,一定要带where条件
-- 数字类型不加单引号,字符类型一定加单引号 -- 所有人的年龄+1 update t_student set sage = sage + 1; update t_student set ssex = '女',sage = 23 where sid = 2;
-
select --- 查询
-- select select* from t_student; select sid,sname,ssex from t_student -- 别名使用,+as或者不加as select sid as 学生编号,sname 学生姓名 from t_student; -- 带条件 select * from t_student where ssex = '幺';
-
delete --- 删除(禁用)
-
drop:删除数据+结构,不支持where条件
-
delete:数据删除,一般带where条件
-
truncate: 删除数据,不支持where条件
-
drop > truncate > delete
-- 经典错误delete * from ... delete from t_student where sid = 3; -- 全表删除 delete from t_student;
-
-
-
事务控制语言(TCL --- commit : 事件提交/rollback : 事件回滚)
-
事务四大原则(ACID)
-
原子性
-
表示一个事务是不可分割的单位,它要么全部执行成功,要么全部失败回滚。原子性确保了事务的完整性,即使在故障发生时也能保持数据的一致性。
-
-
一致性
-
指的是事务执行前后数据库的状态应该保持一致。这意味着事务的执行不会导致数据的冲突或破坏约束条件,保证了数据的有效性和完整性。
-
-
隔离性
-
指一个事务在执行过程中应该与其他事务相互隔离,互不干扰。这可以通过加锁和并发控制机制来实现,以避免数据的不一致性和冲突。
-
-
持久性
-
表示一旦事务提交,所做的修改将永久保存到数据库中。无论系统崩溃、断电或其他故障,已提交的事务所做的修改都将得到保证,保证了数据的可靠性和不可丢失性。
-
-
insert into t_student values(4,'洗干净','男',25,sysdate); commit; rollback;
-
-
数据控制语言(DCL --- grank : 授权/revoke : 收回)
-
授权需要再超级管理员账号中进行,需要用户本身有权限才能给别的用户授权
grant ... to --- 授权
revoke ... from --- 收回权限
1.首先登录超级管理员账号
2.然后创建用户create user rrr identified by 1234;
2.然后通过File - New - Command Window查看用户有没有权限
3.输入conn 用户名/用户密码@orcl_ip地址;可以查看用户是否有权限
4.没有权限的话,返回SQL语句编写界面,输入grant connect,resource to 用户名
5.然后再次返回到Command Window界面,连接,可发现连接成功了
6.可以通过revoke connect,resource from 用户名 收回权限
-
数据类型
-
字符型(char --- 定长/varchar --- 不定长)
-
char
-
民族名称不能用定长,但是性别可以用定长
-
-
varchar2
-
nvarchar2
-
long 可变长度2GB
-
-
数值类型
-
number(p,s) --- 可表示整型、浮点型、实数
-
p : 精度
-
number(11) --- 代表11位的整数
-
-
s : 小数位
-
number(11,2) --- 代表11位的整数和2位的小数位
-
-
-
-
日期类型
-
date --- 日期
-
timesamp --- 时间戳,从1970年1月7日到现在的日期为多少秒
-
-
二进制数据
-
raw --- 可用于储存二进制数据,最多储存2000字节
-
long raw --- 用于储存可变长度的二进制数据,最多储存2GB
-
-
伪列(rowid和rownum)
-
select * from dual; --- 伪表,系统提供,可以将查找到的数据临时存储
-
rowid --- 每一行的存储地址,地址都是唯一的,根据存储地址,可以定位每一行
-
rownum --- 返回行的序号,可以用来排序
-
操作符
-
算数操作符:+、-、*、/
-
比较操作符: =、!=、<、>、<=、>=、BETWEEN…AND、IN、LIKE 和 IS NULL等
select * from t_student where sage>=16 and sage<25 select * from t_student where sage between 16 and 25 select * from t_student where sid in (1,4,7)
-
逻辑操作符:and / or / not
-
and : 并且
-
or:或者
-
not:非
select * from t_student where ssex = '男' or ssex = '幺' select * from t_student where not ssex = '幺'
-