Oracle-DDL 1- 表管理
DDL-数据定义语句:
一、表管理
1.create 创建表
-- 必须有创建表的权限和表空间
-- 表名必须以字母开头,可以包含数字和符号,不能是系统关键字
/*
create table 表名
(
列名1 数据类型,
列名2 数据类型,
……
列名n 数据类型
);
*/
/*
数据类型:
number(m,n) 定义最大位数为m,精确到小数点后n位的数字类型,m的最大值是38,n可以不写,默认为整数,n会占用m的位数,number(6,2) 4位整数2位小数
date 日期类型,范围是公元前4712年1月1日到公元后4712年12月31日
char(n) 定义长度为n的固定长度的字符串类型,n的最大取值是2000个字节
varchar2(n) 定义最大长度为n的可变长度的字符串类型,n的最大值是4000个字节
char(n) 如果实际存储的字符串长度不到n个字节,会使用空格补齐到n个字节进行存储
varchar2(n) 按照字符串的原有长度进行存储
char 浪费空间,查询效率高
varchar2 节省空间,查询效率低
*/
CREATE TABLE test1
(
testid NUMBER(4),
testname VARCHAR2(20),
testage NUMBER(2),
testgender CHAR(1),
testdate DATE,
testscore NUMBER(4,1)
);
SELECT * FROM test1;
INSERT INTO test1
VALUES(1002,'jodie',24,'M',SYSDATE,99);
-- defualt 默认值:可以给某些列定义默认值,当使用insert语句放入数据时,如果不定义某些列,不再使用空值放入数据,而是使用默认值;默认值不能是列名,默认值必须与列的数据类型一致
/*
create table 表名
(
列名1 数据类型 【default 默认值】,
列名2 数据类型【default 默认值】,
……
列名n 数据类型【default 默认值】
);
*/
CREATE TABLE test2
(
testname VARCHAR2(20),
testage NUMBER(2) DEFAULT 20,
testgender CHAR(1) DEFAULT 'M',
testdate DATE DEFAULT SYSDATE
);
SELECT * FROM test2;
INSERT INTO test2
VALUES('xiaoming',24,NULL,NULL);
INSERT INTO test2(testname)
VALUES ('xiaoqiang');
-- create table 表名 as select …… 将查询结果创建成一张表,表名后面可以定义列名,但是不能定义数据类型
CREATE TABLE dept20
AS
SELECT ename,job,sal,deptno,12*sal nianxin FROM emp
WHERE deptno = 20;
SELECT * FROM dept20;
2.alter 修改表结构
-- 一般情况下,应该在初期就设计好表的结构,不推荐在表创建成功后进行结构的修改,尤其是表中有数据以后,更不应该去修改
-- 修改列名和列的数据类型
-- alter table 表名 rename column 原列名 to 新列名; 修改列名
-- alter table 表名 modify 列名 数据类型; 修改列的数据类型
-- 数据类型只能改成更大,不能改成更小
-- 添加和删除列
-- alter table 表名 add 列名 数据类型; 添加列
-- alter table 表名 drop column 列名; 删除列
-- 添加 / 修改和删除默认值
-- alter table 表名 modify 列名 default 默认值; 添加或修改默认值
-- alter table 表名 modify 列名 default NULL; 删除默认值(将默认值设置为空)
3.drop 删除表
-- drop table 表名;
DROP TABLE dept20;
SELECT * FROM dept20;
-- delete 属于dml语句,需要提交才能生效,可以回滚撤销操作。可以删除所有数据,也可以指定范围删除,不删除表结构。
-- truncate 属于ddl语句,直接提交,不能回滚。快速删除所有数据,不能指定范围,保留表结构。
-- drop 属于ddl语句,直接提交,不能回滚。删除表中所有数据和表结构。
4.rename 重命名
-- rename 原表名 to 新表名;
RENAME test2 TO testnew;
SELECT * FROM testnew;
5.约束
-- 约束是表中数据必须遵守的规则或者达到的条件
-- 约束是针对具体的某些列创建的
/*
主键约束 —— PRIMARY KEY
外键约束 —— FOREIGN KEY
非空约束 —— NOT NULL
唯一约束 —— UNIQUE
检查约束 —— CHECK
*/
-- 约束可以在创建表的同时创建,也可以在创建表之后创建
-- 可以创建表级约束也可以创建列级约束,效果一样
-- 表级约束可以定义约束名称,列级约束的名称由系统自动分配(SYS_Cxxxxx)
-- 表级约束可以定义多个列之间的数据关系,列级约束只能定义一列的数据约束
/*
create table 表名
(
列名1 数据类型 【default 默认值】 【列级约束1 列级约束2 ……】,
列名2 数据类型【default 默认值】 【列级约束1 列级约束2 ……】,
……
列名n 数据类型【default 默认值】 【列级约束1 列级约束2 ……】,
constraint 约束名称 约束类型(列名),
constraint 约束名称 约束类型(列名),
……
);
*/
CREATE TABLE test3
(
testid NUMBER(4) PRIMARY KEY,
testdeptno NUMBER(2) REFERENCES dept(deptno),
testname VARCHAR2(20) NOT NULL,
testphone NUMBER(11) UNIQUE,
testgender CHAR(1) CHECK(testgender IN ('M','F')),
testage NUMBER(2) CHECK(testage BETWEEN 18 AND 60)
);
SELECT * FROM test3;
-- 确认约束的创建
SELECT * FROM user_constraints;
INSERT INTO test3
VALUES (1008,20,'xiaoqiang',13800138008,'F',60);
-- 非空约束只能定义列级,不能定义表级
-- 主键、唯一、检查约束:constraint 约束名称 约束类型(列名)
-- 表级的外键约束:constraint 约束名称 foreign key(列名) references 表名(列名)
-- 当表中的主键是多个属性构成的,使用表级约束
-- 当两列数据之间有约束关系时,使用表级约束
CREATE TABLE score
(
st_id NUMBER(5),
course_id NUMBER(5),
score1 NUMBER(4,1),
score2 NUMBER(4,1),
CONSTRAINT pk_score PRIMARY KEY(st_id,course_id),
CONSTRAINT check_score CHECK(score2 > score1)
);
INSERT INTO score
VALUES(10000,50000,70,NULL);
SELECT * FROM score;
INSERT INTO score
VALUES(10003,50002,40,30);
-- alter 在创建表之后对约束进行定义
-- alter table 表名 modify 列名 not null; 添加非空约束
-- alter table 表名 add constraint 约束名称 约束类型(列名); 添加其他约束
-- alter table 表名 modify 列名 null; 删除非空约束(允许该列取值为空)
-- alter table 表名 drop constraint 约束名称; 删除其他约束
1.创建班级表(grade)和学生表(student),结构如下:
班级表:
列名 数据类型
grade_id(主键) number(4)
grade_name(非空) varchar2(10)
grade_director(班主任,非空) varchar2(20)
CREATE TABLE grade
(
grade_id NUMBER(4) PRIMARY KEY,
grade_name VARCHAR2(10) NOT NULL,
grade_director varchar2(20) NOT NULL
);
SELECT * FROM grade;
学生表:
列名 数据类型
st_id(主键) number(8)
st_name(非空) varchar2(14)
st_age(18岁以上) number(2)
st_phno(不能重复) number(11)
st_date(默认为当前系统时间) date
st_gender(非空,只能为男或女,默认为男) char(2)
st_grade(外键,关联班级表主键) number(4)
CREATE TABLE student
(
st_id NUMBER(8) PRIMARY KEY,
st_name VARCHAR2(14) NOT NULL,
st_age NUMBER(2) CHECK(st_age > 18),
st_phno NUMBER(11) UNIQUE,
st_date DATE DEFAULT SYSDATE,
st_gender CHAR(2) DEFAULT 'M' NOT NULL CHECK(st_gender IN ('M','F')),
st_grade NUMBER(4),
CONSTRAINT fk_st FOREIGN KEY(st_grade) REFERENCES grade(grade_id)
);
SELECT * FROM student;
Oracle-DDL 1- 表管理的更多相关文章
- SQL Server与Oracle对比学习:表的管理和组织
http://blog.csdn.net/weiwenhp/article/details/8088979 我们知道数据库,顾名思义.最重要的东东就是管理数据,而数据在系统中主要是保存在表(table ...
- 基本 SQL 之数据库及表管理
上篇文章,我们基于『数据库』做了一个宏观上的介绍,你应当了解到数据库是在何种背景下,为了解决什么样的问题而诞生的,以及在具体实现下又可以划分哪些中类型. 非关系型数据库的种类很多,我们会在后续的篇章中 ...
- oracle系統表、數據字典介紹與日常問題診斷
oracle系統表.數據字典介紹與日常問題診斷 數據字典是由唯讀的table和view組成的,產生於$oracle_home\rdbms\admin\catalog.sql.裡面儲存Oracle資料庫 ...
- Oracle 创建数据表
数据库中的每一个表都被一个模式(或用户)所拥有,因此表是一种典型的模式对象.在创建数据表时,Oracle 将在一个指定的表空间中为其分配存储空间.最初创建的表时一个空的逻辑存储结构,其中不包含任何数据 ...
- Oracle的外部表
一.外部表特性 数据文件位于操作系统之外,并且具有一定的格式分割的文本文件或其他类型文件.ORACLE的外部表通过SQL的形式访问数据文件中的数据,数据并不需要加载到数据库中且数据是可读的,所以不用D ...
- WPF根据Oracle数据库的表,生成CS文件小工具
开发小工具的原因: 1.我们公司的开发是客户端用C#,服务端用Java,前后台在通讯交互的时候,会用到Oracle数据库的字段,因为服务器端有公司总经理开发的一个根据Oracle数据库的表生成的cla ...
- OracleDBA之表管理
下面是Oracle表管理的部分,用到的测试表是oracle数据库中scott用户下的表做的测试,有的实验也用到了hr用户的数据,以下这些东西是我的麦库上存的当时学Oracle的学习笔记今天拿出来和大家 ...
- ORACLE修改用户表所属表空间的步骤
ORACLE修改用户表所属表空间的步骤 使用脚本进行修改.据目前所了解,正长情况下需要修改表的空间和表的索引的空间,如果涉及到BOLB字段的表,修改的方式又不一样了!正常情况下的修改脚本:1.修改表的 ...
- 定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表
最近项目中有一种需求: 大致需求是这样的 通过给定的 用户名和密码 要定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表 项目的结构式struts1 hibernat ...
- oracle学习之表空间
一.oracle当中的dual表 注意:sql语句一定要有一个 : 结尾,不然会报错. Oracle数据库内种特殊表DualDual表Oracle实际存表任何用户均读取用没目标表SelectDual表 ...
随机推荐
- 9030PCI CAN驱动开发点滴
1.配置EEPROM. 使用PlxMon打开9030,基本修改Spacex(0,1,2,3), Chip selectx(0,1,2,3), 中断状态INTCSR(0x74), 其他(0x78),详细 ...
- [题解] [JLOI2013] 卡牌游戏
题面 题解 概率dp, 应该做得还是比较少的 设\(f[i][j]\)为该圈有\(i\)人时, 第\(j\)个人最后胜利的概率 枚举选择第几张卡牌, 设其值为\(card[k]\), 那么被淘汰的则是 ...
- django xadmin安装
安装方式一: 下载xadmin源码文件,下载之后,解压缩,将解压目录中的xadmin文件夹拷贝到项目项目文件中.下载地址:https://codeload.github.com/sshwsfc/xad ...
- C++入门经典-例9.4-默认模板参数
1:默认模板参数就是在类模板定义时设置类型形式参数表中的一个类型参数的默认值,该默认值是一个数据类型.有了默认的数据类型参数后,在定义模板的新类型时就可以不进行指定.代码如下: // 9.4.cpp ...
- 报错:SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'admin' for key 'username'
在提交注册信息的时候报错:SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'admin' for key ' ...
- ccf 201409-3 字符串匹配(toupper,tolower)
ccf 201409-3 字符串匹配(toupper,tolower) 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你的程序还需支持大小写敏感选项:当选项打开时,表示同一 ...
- Oracle 必要的后台进程
Oracle 必要的后台进程 Table of Contents 1. 简述 2. 必要进程 2.1. 默认启动后台进程 2.2. 哪些进程不能杀 1 简述 oralce 每次大的版本变更,后台进程都 ...
- Leaflet - 自定义弹出框(popup)
有两种方法,一种直接改 CSS,一种是通过继承拓展 popup. 方法一:改 CSS 下面是一个将原有样式清空的设置(可能清的不全,只是提供个思路) .l-popup { &--no-styl ...
- gateway 整合 websocket demo
背景: 这个websocket 因为使用的地方不多,并没有独立出一个项目,是集成在已有的服务中. 1: gateway 配置 - id: service-test uri: lb:ws://se ...
- javascript的变量声明和数据类型
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...