第四天

--约束
1.主键约束:PRIMARY KEY。主键不能为NULL,不能重复。通过主键可以在表中找到唯一的一行数据。
2.非空约束:NOT NULL。列不能为NULL。
3.检查约束:CHECK。向列中添加与修改数据时,检查值是否合法。
4.默认值:DEFAULT。当没有向列中添加数据时,Oracle默认向列中添加的数据。
5.唯一约束:UNIQUE。列中的数据不能重复,可以为NULL。
6.外键约束:FOREIGN KEY

--数据库中不能出现同名的元素。

--删除表:DROP TABLE 表名;
DROP TABLE USERS;

CREATE TABLE USERS(
USER_ID NUMBER(6) PRIMARY KEY,
USER_NAME VARCHAR2(20) NOT NULL,
USER_AGE NUMBER(2) CHECK(USER_AGE BETWEEN 20 AND 50),
USER_SEX CHAR(1 CHAR) DEFAULT ‘女‘
);

INSERT INTO USERS VALUES(1,‘AA‘,20,NULL);
INSERT INTO USERS(USER_ID,USER_NAME,USER_AGE) VALUES(2,‘BB‘,20);

CREATE TABLE S(
S_ID NUMBER(6) PRIMARY KEY,
S_NAME VARCHAR2(20) NOT NULL
);

CREATE TABLE C(
C_ID NUMBER(3) PRIMARY KEY,
C_NAME VARCHAR2(100) NOT NULL
);

CREATE TABLE SC(
SC_ID NUMBER(8) PRIMARY KEY,
SC_S_ID NUMBER(6) NOT NULL,
SC_C_ID NUMBER(3) NOT NULL,
CONSTRAINT SC_SID_FK FOREIGN KEY(SC_S_ID) REFERENCES S(S_ID),
CONSTRAINT SC_CID_FK FOREIGN KEY(SC_C_ID) REFERENCES C(C_ID)
);

--外键的添加数据:先添加主表中的数据,再添加子表中的数据。
INSERT INTO S VALUES(1,‘AA‘);
INSERT INTO C VALUES(1,‘JAVA‘);
INSERT INTO SC VALUES(1,1,1);
INSERT INTO SC VALUES(2,1,2);--错误

--外键的删除数据:先删除子表中的数据,再删除主表中的数据。
DELETE FROM SC WHERE SC_S_ID=1;
DELETE FROM S WHERE S_ID=1;

--联合主键
--表只能有一个主键,但一个主键可以由多个列组成。
CREATE TABLE TEST(
T_NAME VARCHAR2(20),
T_SEX CHAR(1 CHAR),
CONSTRAINT TEST_PK PRIMARY KEY(T_NAME,T_SEX)
);

--事务:单位时间内的一系列操作,这些操作要么全都成功,要么全都失败。
COMMIT:提交数据,将对数据库表的操作保存到表中。
ROLLBACK:回退数据,将数据还原为最初或最后一次提交的状态。

--SQL语句的分类:
/*
1.DML:数据操纵语言。SELECT,INSERT,DELETE,UPDATE
2.DDL:数据定义语言。CREATE,DROP,ALTER等。
3.DCL:数据控制语言。COMMIT,ROLLBACK,SAVEPOINT等。
*/

/*
事务组成:
1.可以有多个DML.
2.只能有一个DDL语句。
3.只能有一个DCL语句。
*/

--当异常结束ORACLE会话时,会自动回退事务。
--当正常结束ORACLE会话时,会自动提交事务。

--截断表:TRUNCATE TABLE 表名,删除表中所有的数据,但不删除表。删除的数据无法ROLLBACK
TRUNCATE TABLE STUDENTS;

--序列:产生一个数字。通常用于自动生成主键。序列的值不能ROLLBACK。
--创建序列的基本格式:CREATE SEQUENCE 序列名;
CREATE SEQUENCE STUDENT_ID_SEQ;

--序列的属性:
NEXTVAL:获得序列的下一个值,每次使用此属性序列的值都会发生变化。
CURRVAL:获得序列的当前值。调用此属性不会改变序列的值。

INSERT INTO STUDENTS(STU_ID,STU_NAME) VALUES(STUDENT_ID_SEQ.NEXTVAL,‘AA‘);

--视图(伪表)
--创建语句
/*
CREATE [OR REPLACE] VIEW 视图名
AS
SELECT 语句;
*/
CREATE OR REPLACE VIEW V_1
AS
SELECT LAST_NAME,JOB_ID,SALARY,
CASE
WHEN JOB_ID=‘IT_PROG‘ THEN SALARY*1.10
WHEN JOB_ID=‘ST_CLERK‘ THEN SALARY*1.15
WHEN JOB_ID=‘SA_REP‘ THEN SALARY*1.20
ELSE SALARY
END AS 新工资
FROM EMPLOYEES;

--视图的作用
1.简化查询
2.可以提高数据库的安全性

--视图中没有数据,视图的数据来自于表。

--索引:可以提高查询的效率,但会降低增删改的效率。
CREATE INDEX EMP_NAME_INDEX ON EMPLOYEES(LAST_NAME);

SELECT LAST_NAME
FROM EMPLOYEES
WHERE LAST_NAME LIKE ‘%a%‘;

--多表连接
--查询员工的last_name,department_name
SELECT LAST_NAME,DEPARTMENT_NAME
FROM EMPLOYEES , DEPARTMENTS;

--笛卡尔集
--行数:表行数的乘积
--原因:没有连接条件或连接条件不正确。

--内连接(等值连接):只能查询出满足连接条件的数据。
--查询员工的last_name,department_name
SELECT LAST_NAME,DEPARTMENT_NAME
FROM EMPLOYEES , DEPARTMENTS
WHERE EMPLOYEES.DEPARTMENT_ID=DEPARTMENTS.DEPARTMENT_ID;

--查询员工的last_name,job_title(在JOBS表中)
SELECT LAST_NAME,JOB_TITLE
FROM EMPLOYEES , JOBS
WHERE EMPLOYEES.JOB_ID=JOBS.JOB_ID;

--建议在多表连接时,每个列前面都加表的前缀,可以提高查询效率。
--查询员工的last_name,department_id,department_name
SELECT EMP.LAST_NAME,DEPT.DEPARTMENT_ID,DEPT.DEPARTMENT_NAME
FROM EMPLOYEES EMP , DEPARTMENTS DEPT
WHERE EMP.DEPARTMENT_ID=DEPT.DEPARTMENT_ID;

--通常情况下,连接条件的个数为表的个数减一。
--查询员工的last_name,department_name,city
SELECT EMP.LAST_NAME,DEPT.DEPARTMENT_NAME,LOC.CITY
FROM EMPLOYEES EMP,DEPARTMENTS DEPT,LOCATIONS LOC
WHERE EMP.DEPARTMENT_ID=DEPT.DEPARTMENT_ID
AND DEPT.LOCATION_ID=LOC.LOCATION_ID;

SET LINESIZE 200

--查询在‘Toronto‘工作的员工的last_name,job_title,department_name
SELECT EMP.LAST_NAME,JOB.JOB_TITLE,DEPT.DEPARTMENT_NAME
FROM EMPLOYEES EMP,JOBS JOB,DEPARTMENTS DEPT,LOCATIONS LOC
WHERE EMP.JOB_ID=JOB.JOB_ID
AND EMP.DEPARTMENT_ID=DEPT.DEPARTMENT_ID
AND DEPT.LOCATION_ID=LOC.LOCATION_ID
AND LOC.CITY=‘Toronto‘;

时间: 2024-10-23 18:13:21

第四天的相关文章

《30天自制操作系统》读书笔记(2)hello, world

让系统跑起来 要写一个操作系统,我们首先要有一个储存系统的介质,原版书似乎是06年出版的,可惜那时候没有电脑,没想到作者用的还是软盘,现在的电脑谁有软驱?不得已我使用一张128M的SD卡来代替,而事实上你用的是U盘还是软盘对我们的操作系统没有影响,缺点是你的U盘刷入系统后容量只能是1440 MB,即当年流行的3.5英寸软盘的大小,当然不用担心,再格式化一次(用DiskGeniu),就可以恢复. 我做事情的话,总是怕自己的努力的结果白费了,害怕辛辛苦苦看完这本书但是发现做出来的东西现在根本没法用,

《30天自制操作系统》读书笔记(4) 绘图

暑假果然是滋生懒散的温床. (╯‵□′)╯︵┻━┻ 好久不动都忘记之前做到哪里了, 上次好像做到了C语言的引入, 这一节所做的东西都相当轻松, 将会绘制出操作系统的基本界面. 绘图的原理 按照书中所说, 将值写入到显存中就能在屏幕上显示相应的像素, 在asmhead.nas 中有这一段: 1 CYLS EQU 0x0ff0 ; 设定启动区 2 LEDS EQU 0x0ff1 3 VMODE EQU 0x0ff2 ; 关于颜色数目的信息,颜色的位数 4 SCRNX EQU 0x0ff4 ; 分辨率

《30天自制操作系统》——虚拟机使用

<30天自制操作系统>是一本学习操作系统的好教材,它教我们怎么从建立引导区开始,从零实现一个操作系统.但是,实现书中例子的时候,我们需要不断将我们写好的操作系统代码写入软盘并且还要不断重启电脑来试验我们的代码,大家一定感到很头疼吧. 与其不停的重启,不如使用模拟器,向大家推荐一款模拟器qemu,它是由Fabrice Bellard编写,功能非常强大.那么下面我就来教大家使用qemu运行书中自制操作系统的方法吧. 一.安装qemu 我使用的是苹果笔记本,苹果有一个非常好用的程序管理工具叫brew

30天自制操作系统之第12天 定时器

定时器的中断处理程序要保证高效率,需要进行一些优化,这里介绍优化的方法.对于一个操作系统来说,会有多个定时器,假设该操作系统维护了500个定时器,当每一次定时中断发生时(这里我们设定1秒发生100次中断),调用中断处理程序,中断处理程序会对这500个定时器进行if判断,看哪些正在被使用,这样1秒内,就会有500X100=10000次if判断,而中断处理程序最讲究节省时间.实际上,我们不必每发生一次定时中断就去对这500个定时器进行判断.因为假设我们使用了500个定时器中的10个,而10个定时器中

关于U盘启动操作系统《30天自制操作系统》

原本的启动是从img启动的,并且这个img是用FAT12文件系统进行格式化的(详细去搜索FAT12文件格式,这里给大家推荐一篇http://www.doc88.com/p-646605198560.html),那么也就是说我们的img文件符合FAT12文件系统的格式了.接下来我们用winhex这个软件来查看我们的img文件,同一时候比对FAT12文件系统的格式,看是否我们的img文件同FAT12文件系统描写叙述的同样: 从上图中能够看到里面有一个haribotesys的文件夹项.那么我们看看我们

《30天自制操作系统》U盘启动,真机运行(16天)

首先说一下到目前为止U盘启动遇到的问题,首先的一个问题是"system volume information",目前尚未解决,这个问题可能导致U盘启动失败,我猜测可能是由于每一次重新将OS写到U盘的时候原来的信息没有被清除,导致了在执行的时候把那些没有被覆盖掉的信息当成指令执行了.这个问题我会继续的追踪下去,力求能找到引起这个问题的真正原因是什么,如果有遇到同样问题的朋友,能留言相告. 下面是真机的运行截图(当然纯属装逼,哈哈) 下面还是展示ipl10.nas代码 ; haribote

多定时器处理1(30天自制操作系统--读书笔记)

自认为写过很多MCU程序,但总是回头想想,我所了解的MCU编程思想大体有两种,其中具体的想法我得再找时间写下来. 总想总结出一个可扩展的,易移植的写法,但能力还没到这个层次.但<30天自制操作系统>这本书确实给我了一个思路,就像我已经写过的两篇读书笔记. 将两个独立的内容--FIFO和内存动态管理做到高度模块化,尤其是其中数据结构模型的设计更是我学习的好例子. 今天要学习的设计内容是多定时器处理.原书对这部分的处理讲的很详细,由浅入深,看得我由衷佩服作者,也可能是因为我水平低,稍稍看出点门道来

内存管理(30天自制操作系统--读书笔记)

今天继续读书笔记,“挑战内存管理”(30天自制操作系统). 为什么对这块内容敢兴趣呢,因为曾经遇到这么一个问题.在STM32程序中想使用队列,可不是上篇讲的FIFO,而是使用了较大的内存空间,又想做队列的顺序存取管理. 在这个队列里用到了malloc,动态申请内存,一开始是直接申请不到内存,后来在启动脚本里更改了设置堆的地址值,可以申请成功,但发现申请几次后,也申请不到内存. 果然MCU级别的程序,内存这块处理起来就没有windows程序那么随心所欲了.讲了这么多,开始正题吧. 1.相关数据结构

单字节的FIFO缓存(30天自制操作系统--读书笔记)

从今天起,写一些读书笔记.最近几个月都在看<30天自制操作系统这本书>,书虽说看的是电子书,但可以花钱买的正版书,既然花费了金钱,就总得有些收获. 任何人都不能总是固步自封,想要进步就得学习别人的知识,对于程序员而言,最简单的方法即是学习别人的代码. 今天的标题是“单字节的FIFO缓存”,其实就是做一个FIFO,看名字就知道了.也就4个函数和1个相关结构体,这样的小代码在嵌入式系统中很常用,也会很好用. 1.相关数据结构体 struct FIFO8 { unsigned char *buf;

《30天自制操作系统》笔记(12)——多任务入门

<30天自制操作系统>笔记(12)——多任务入门 进度回顾 上一篇介绍了设置显示器高分辨率的方法.本篇讲一下操作系统实现多任务的方法. 什么是多任务 对程序员来说,也许这是废话,不过还是说清楚比较好. 多任务就是让电脑同时运行多个程序(如一边写代码一边听音乐一边下载电影). 电脑的CPU只有固定有限的那么一个或几个,不可能真的同时运行多个程序.所以就用近似的方式,让多个程序轮换着运行.当轮换速度够快(0.01秒),给人的感觉就是"同时"运行了. 多任务之不实用版 我们首先从