版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37527943/article/details/84965315
导读
1.Oracle初识
2.Oracle安装连接
3.表的创建DDL
4.DML:数据的添加 INSERT
Oracle初识
Oracle安装连接
下载 官网->database
查看当前用户下的所有表的名字:SELECT table_name FROM user_tables;
查看某个表结构:desc 表名
调整结果集的列宽:仅针对于本次会话生效
数值型:col 名字 format 999999;(最多显示6位,不够用空格,多了用#号)
文本型:col 名字 format a10; (日期可以归为文本型)
设置日期的语言:仅针对于本次会话生效
查询当前日期:SELECT sysdate FROM dual; 默认是中文的
修改为英文语言:
ALTER SESSION SET nls_date_language=english;
date常量默认形式:
中文下:'01-8月 -17' 中文下只认识这个格式
英文下:'01-AUG-17' 英文下只认识这个格式
清屏:clear scre
表的创建DDL
基本语法:
CREATE TABLE 表名(
列名 类型 [默认值] [约束],
列名 类型 [默认值] [约束],
...
列名 类型 [默认值] [约束]
);
相关知识点:
(表名,列名)命名规则:
1)以字母开头
2)组成:字母,数字,下划线_,$,#
3)长度:不能超过30个字符
4)不能使用数据库关键字
5)同一个用户下不能出现同名的对象(表,视图,索引,序列等等)
数据类型:
文本型:重点
VARCHAR2:变长的文本型
username VARCHAR2(100):最多可以存储100个字节
具体开辟的长度由实际内容决定
通常一个字母占一个字节,汉字可能占多个,跟编码有关系
CHAR:定长的文本型
username CHAR(100):无论如何都会开辟100个字节空间
没占满的位置用空格填充
数值型:重点
NUMBER:整型,浮点型都可以表示
age NUMBER(3):表示最多可以存储3位的整数
weight NUMBER(4,2):表示有2位小数,有效位4位
日期型
DATE
存储大数据量的类型:(了解)
BLOB:存储大量的二进制数据,可以高达2GB,存储图片等
CLOB:存储大量的字符,可以高达2GB,存储小说等
完全可以选择把图片存储到硬盘,把对应的路径存储到数据库,这样比较省内存
约束:CONSTRAINT,constraint
NOT NULL:非空约束
值不能没有,不能为空
CHECK:检查约束
设定值只能取一个范围
UNIQUE:唯一约束
列的值不能重复,可以有多个空 空,NULL:没有值
PRIMARY KEY:主键约束
约束力:相当于非空+唯一,可以起到唯一标识记录
多个行之间因为有了主键,不会出现完全一样值的行
一个表最多只能有一个主键
通常会给每一个表加一个id之类的主键列,没有任何业务意义
保证能够区分每一行,又不会修改这个列,就类似与流水号一样
FOREIGN KEY:外键约束,
某个表的某个列引用了某个表的某个列系统知道了, grade.stu_id 引用了student.id
值只能取student.id中存在的值或者是空
注意:被引用的列只能是主键列或唯一约束列,不然无法知道引用哪个。如果B表引用了A表,想要删除A,先删除B
创建表:
需求,在刚刚创建的用户下创建一个表,用来存储学生的基本信息
有哪些列?id,name,sex,age,sno,
版本1:
CREATE TABLE student(
id NUMBER(9) PRIMARY KEY,
name VARCHAR2(100) NOT NULL,
sex NUMBER(1) DEFAULT 0 CHECK(sex=0 OR sex=1),
age NUMBER(3),
sno NUMBER(9) UNIQUE NOT NULL
);
默认值:是指如果添加一行数据值对应的列不给值就取默认值
default 值
约束建议起合适的名字,而不要使用默认名字,这样出现问题时易发现
CONSTRAINT 约束名 约束类型
命名建议:表名_列名_约束简写
主键:pk
外键:fk
非空:nn或nk
唯一:uk
检查:ck
版本2:
CREATE TABLE student(
id NUMBER(9)
CONSTRAINT student_id_pk PRIMARY KEY,
name VARCHAR2(100)
CONSTRAINT student_name_nn NOT NULL,
sex NUMBER(1) DEFAULT 0
CONSTRAINT student_sex_ck CHECK(sex=0 OR sex=1),
age NUMBER(3),
sno NUMBER(9)
CONSTRAINT student_sno_uk UNIQUE
CONSTRAINT student_sno_nn NOT NULL
);
删除表:DROP TABLE 表名;
约束的分类:
列级别约束:
约束直接跟在列的后面,一个约束只能修饰一个列
表级别约束:
约束单独写一行,一个约束可以修饰多个列,
联合主键,联合唯一约束,一个约束修饰多个列
注意:
非空以外的所有约束既可以作为表级别约束,又可以作为列级别约束
非空约束只能作为列级别约束
版本3: 把可以调整为表级别约束的进行调整
CREATE TABLE student(
id NUMBER(9),
name VARCHAR2(100)
CONSTRAINT student_name_nn NOT NULL,
sex NUMBER(1) DEFAULT 0,
age NUMBER(3),
sno NUMBER(9)
CONSTRAINT student_sno_nn NOT NULL,
CONSTRAINT student_id_pk PRIMARY KEY(id),
CONSTRAINT student_sex_ck CHECK(sex=0 OR sex=1),
CONSTRAINT student_sno_uk UNIQUE(sno)
);
外键的运用(接上边student表)
创建一个科目表,包含字段:id,name
CREATE TABLE subject(
id NUMBER(7),
name VARCHAR2(100),
CONSTRAINT subject_id_pk PRIMARY KEY(id)
);
创建一个成绩表,体现是谁考了哪个科目,分数是多少,该如何设计???
grade: 要重复度(冗余)最小就可以存储完整的信息
加上外键约束之后:
CREATE TABLE grade(
id NUMBER(11),
stu_id NUMBER(9)
CONSTRAINT grade_stu_id_fk REFERENCES student(id),
sub_id NUMBER(7),
score NUMBER(3),
CONSTRAINT grade_id_pk PRIMARY KEY(id),
CONSTRAINT grade_sub_id_fk FOREIGN KEY(sub_id) REFERENCES subject(id)
);
DML:数据的添加 INSERT
数据是一行一行的添加
一行代表一个记录
语法:
1)INSERT INTO 表名 (列名1,列名2,...,列名n)
VALUES (值1,值2,...,值n);
eg:添加一个学生到学生表
id:1 name:tom age:19 sex:0 sno:100
INSERT INTO student (id,name,age,sex,sno)
VALUES (1,'tom',19,0,100);
注意:数值型常量,直接写
字符串常量(文本常量) ,用一对单引号括起来
对于DML操作后,需要确认提交--COMMIT;
值是区分大小写的,
各种取的名字,关键字,不区分大小写
查询一个表的全部数据:SELECT * FROM 表名;
2)如果所有的列我都要给值,可以把列名省略
INSERT INTO 表名 VALUES(值1,值2,...,值n);
每个值和表定义时列的顺序一一对应,每个值必须都给出来
添加学生信息为: id:2 name:lily age:18 sno:101 sex:1
INSERT INTO student VALUES(2,'lily',1,18,101);
pk:第一种更好,可读性高,更灵活