数据库语言:
DQL 数据库查询语言 :简单查询 限定查询 。。。。
DCL 数据库控制语言 :赋权 GRANT 权限 TO 用户
回收 REVOKE 权限 FROM 用户
DDL 数据库定义语言 :创建 CREATE 、 删除 DROP 、修改 ALTER ...
DML 数据库操作语言 :插入 INSERT
DTL 数据事务语言:
更新 UPDATE
删除 DELETE
合并 MERGE
TPL/TCL 事务处理/控制语言 :
commit 提交
rollback 回滚
DCL --数据库控制语言
注:只有数据库超级管理员才有权限进行赋权和回收权限
如何以超级管理员的身份登录数据库 ?
1、window+r呼出运行窗口 输入cmd打开命令窗口
2、在命令行中 输入 SQLPLUS / AS SYSDBA 敲回车就用超级管理员登录到了数据库
3、GRANT 要赋予的权限 TO 接受权限的用户 --赋权
4、REVOKE 要回收的权限 FROM 回收权限的用户 --回收权限
DDL 数据库定义语言
表 table
视图 view
序列 sequence
-----表
创建表:复制表
手动创建表
复制表:语法:CREATE TABLE 表名 AS SELECT ....
--创建一张表emp_1 数据通emp
CREATE TABLE EMP_1 AS SELECT * FROM EMP;
SELECT * FROM EMP_1;
--创建表emp10 emp20 emp30 数据分别是emp中10 20 30部门的数据
--创建表T 是emp和dept关联之后的数据
CREATE TABLE T AS SELECT E.*,DNAME,LOC FROM EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNO;
SELECT * FROM T;
--只复制表结构 不复制表数据 只需要在where后面加一个不成立的条件
创建空表emp_null 结构同emp
CREATE TABLE EMP_NULL AS SELECT * FROM EMP WHERE 1=2;
SELECT * FROM EMP_NULL;
名字的命名规则:
驼峰式(每个首字母大写) ZhangSan
下划线式 ZHANG_SAN_LAI_ZI_HENAN
手动创建表
CREATE TABLE 表名(列1 类型长度[约束],列2 类型长度 [约束]....)
数据类型:
数值型 NUMBER[数1[,数2]] 会四舍五入
数1表示长度 数2表示小数的位数 不写数2默认是整数
数1最大精度是38
数1最大可以为126 但是精度还是38
int 整数 只能存整数
字符型 char([数]) 定长字符
最多可以存储2000个字节的字符 数不写默认是1
位数不足使用空格补齐
VARCHAR/VARCHAR2(数) 变长字符
最多可以存储4000个字节的字符 数不能不写
位数不足的时候 直接存储
--二者的区别?
char读取的速度快 但是浪费时间
varchar/varchar2 速度慢 但是节省空间
char(5) AB 三个空格加起来总长度=5
varchar(5) ab 直接就存储ab 不会用空格补齐到5个字节
日期型 date --由一个9个字节组成的定宽的如期时间类型
世纪 年 月 日 时 分 秒
timestamp 时间戳
比date更加的精确 还存储了时区
SELECT SYSTIMESTAMP FROM DUAL;
大对象:clob 字符大对象 用char存储 如:文本文档 txt xml
blob 二级制大对象 用二进制存储 如:视频 音频 图片
-创建一个学生表 stu
CREATE TABLE STU(STU_ID NUMBER(5), --学生编号 类型长度为5
stu_name VARCHAR2(20),-- 学生姓名 长度最大为20
STU_CLASS CHAR(18), --班级 长度为18
STU_BITH DATE ,--
STU_PIC BLOB
);
SELECT * FROM STU;
约束 CONSTRAINT
作用:保证数据满足业务的需求 保证数据的合理性 合法性
分类:主键约束 PRIMARY KEY pk_ 唯一且非空 注:一个表只能有一个主键
非空约束 not null nn_ 注:不能为空
唯一约束 unique un_ 注:值要唯一(可以为空)
检查约束 check ck_ 给她一个条件
外键约束 foreign key fk_ 注:基于主表中主键列(用于预防破坏表之间连接行为,也能防止非法数据插入外键列,因为他必须是指向那个表中的值之一)
默认值 default
--非列模式 不带约束名
CREATE TABLE STU1(STU_ID NUMBER(5) PRIMARY KEY,
STU_NAME VARCHAR2(20) NOT NULL,
STU_SEX CHAR(6) CHECK(STU_SEX IN('男','女','其他')),
STU_CLASS VARCHAR2(18) UNIQUE NOT NULL,
STU_BITH DATE DEFAULT SYSDATE
);
SELECT * FROM STU1;
--非列模式 带约束名
CREATE TABLE STU2(STU_ID NUMBER(5) CONSTRAINT PK_1 PRIMARY KEY,
STU_NAME VARCHAR2(20) CONSTRAINT NN_1 NOT NULL,
STU_SEX CHAR(6) CONSTRAINT CK_1 CHECK(STU_SEX IN('男','女','其他')),
STU_CLASS VARCHAR2(18) CONSTRAINT UN_1 UNIQUE NOT NULL,
STU_BITH DATE DEFAULT SYSDATE
--默认值不能起别名
);
--列模式 不带约束名
CREATE TABLE STU3(STU_ID NUMBER(5), --学生编号 类型长度为5
stu_name VARCHAR2(20),-- 学生姓名 长度最大为20
STU_SEX CHAR(6),
STU_CLASS CHAR(18), --班级 长度为18
STU_BITH DATE DEFAULT SYSDATE,--
PRIMARY KEY(STU_ID),
CHECK (STU_NAME IS NOT NULL),
CHECK(STU_SEX IN('男','女','其他')),
UNIQUE(STU_CLASS),
CHECK(STU_CLASS IS NOT NULL)
);
注:默认值不能使用列模式 非空使用列模式要变为检查
外键约束和复合主键只能使用列模式创建
复合主键:多个列在一起共同充当主键 起到唯一且非空的作用
primary key(stu_id,stu_class)
--列模式 带约束名
CREATE TABLE STU4(STU_ID NUMBER(5), --学生编号 类型长度为5
stu_name VARCHAR2(20),-- 学生姓名 长度最大为20
STU_SEX CHAR(6),
STU_CLASS CHAR(18), --班级 长度为18
STU_BITH DATE DEFAULT SYSDATE,--
CONSTRAINT NN_10 CHECK (STU_NAME IS NOT NULL),
CONSTRAINT CK_10 CHECK(STU_SEX IN('男','女','其他')),
CONSTRAINT PK_10 PRIMARY KEY(STU_ID,STU_CLASS)
);
--增加约束
ALTER TABLE 表名 ADD[CONSTRAINT 约束名] 约束类型(列)
alter TABLE STU ADD CONSTRAINT PK_11 PRIMARY KEY(STU_ID);
--约束的重命名
ALTER TABLE 表名 RENAME CONSTRAINT 旧名 TO 新名
ALTER TABLE STU RENAME CONSTRAINT PK_11 TO PK_STU_1;
ALTER TABLE STU1 RENAME CONSTRAINT SYS_C0011252 TO PK_STU1_1;
--约束的启用和禁用
ALTER TABLE 表名 DISABLE/ENABLE CONSTRAINT 约束名
ALTER TABLE STU1 DISABLE CONSTRAINT PK_STU1_1;
--修改为空 默认值 列的类型长度
ALTER TABLE 表名 MODIFY 列名 类型长度[[DEFAULT 值][NOT NULL|NULL]]
ALTER TABLE STU MODIFY STU_CLASS CHAR(20) NOT NULL;
注:修改列的数据类型 那么该列必须是空的
要修改列可为空 那么该列现在必须是非空的
varchar2可以改长 如果要改短 必须不短于列中已知值的最大长度
number要修改长度 此列必须为空
--删除约束
ALTER TABLE 表名 DROP CONSTRAINT 约束名
ALTER TABLE STU DROP CONSTRAINT PK_STU_1;
--增加列
ALTER TABLE 表名 ADD(列 类型长度,列2 类型长度...)
ALTER TABLE STU ADD(A1 NUMBER(4),B1 CHAR(12),C1 DATE);
--列的重命名
ALTER TABLE 表名 RENAME COLUMN 旧名 TO 新名
ALTER TABLE STU RENAME COLUMN A1 TO A222;
--删除列
ALTER TABLE 表名 DROP COLUMN 列名 --删除单个列
ALTER TABLE 表名 DROP (列1,列2。。。) --删除多个列
ALTER TABLE STU DROP COLUMN C1;
ALTER TABLE STU DROP(A222,B1);