数据库和数据表的基本操作
创建数据表
创建表——主键约束
1 | create table tb_emp2 |
查看数据表是否创建成功
1 | DESC tb_empl; |
非空约束、唯一性约束、默认约束、检查约束、属性自增
1 | create table tb_emp2 |
1 | # 非空约束 |
互联网开发中为什么尽量不用外键
- 避免使用外键,可以在插入数据时通过程序维持约束关系。
- 使用外键约束缺点:
- 有额外开销,每次插入数据都需要在两个表中查询判断
- 在高并发大流量的场景,使用外键更容易造成死锁
- 删除主键表的数据时,需先删除外键表的数据
- 修改外键表字段时,需重建外键约束
- 扩展性问题:
- 做平台迁移方便,从
Mysql
迁移到Oracle
,像触发器、外键这种东西,都可以利用框架本身的特性来实现,而不用依赖于数据库本身的特性,做迁移更加方便。 - 分库分表方便,在水平拆分和分库的情况下,外键是无法生效的。将数据间关系的维护,放入应用程序中,为将来的分库分表省去很多的麻烦。
- 做平台迁移方便,从
修改数据库表
修改表名
1 | ALTER TABLE <tablename> RENAME TO <newname> |
修改字段
1 | ALTER TABLE <tablename> MODIFY <fieldname> <datatype> |
修改字段名
1 | ALTER TABLE <tablename> RENAME COLUMN <fieldname> TO <newfieldname> |
添加字段
1 | ALTER TABLE <tablename> ADD <fieldname> <datatype> |
删除字段
1 | ALTER TABLE <tablename> DROP COLUMN <fieldname> |
视图的操作
视图概述
视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的。视图只有逻辑定义。每次使用的时候, 只是重新执行SQL。
视图看上去非常象数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些Oracle视图可以修改对应的基表,有些则不能(仅仅能查询)。
视图的作用
- 简单化
- 看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
- 安全性
- 通过视图用户只能查询和修改他们所能见到的数据。数据库中的其它数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过Oracle视图,用户可以被限制在数据的不同子集上
- 逻辑数据独立性
- 视图可帮助用户屏蔽真实表结构变化带来的影响。
创建视图
1 | # 简单视图 |
查看视图
1 | DESCRIBE view_t; |
修改视图
1 | CREATE OR REPLACE VIEW view_t |
更新视图
1 | UPDATE view_t SET quty=5 |
更新视图view_t后,基本表t的内容也更新了,基本表更新后,另一个视图的view_t2中的内容也会更新。
视图的删除操作最终也是通过删除基本表的记录实现的。
删除视图
1 | DROP VIEW <view_name> |
限制视图的数据操作
设置视图的只读属性
1 | CREATE OR REPLACE VIEW view_tt AS |
设置视图的检查属性
1 | CREATE OR REPLACE VIEW view_tc AS |
视图的应用
创建表:
1 | CREATE TABLE stu{ |
1 | create table sign( |
1 | create table stu_mark( |
创建北京大学的学生视图
1 | create view view_peking as |
创建考上清华的学生视图
1 | create view view_tsinghua as |
更正XiaoTian的成绩
1 | update stu_mark set mark = mark-50 |
视图和表中的数据都同时更改了
总结
Oracle中视图和表的区别以及联系是什么?
区别:
- 视图是已经编译好的sql语句。而表不是
- 视图没有实际的物理记录。而表有。
- 表是内容,视图是窗口表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时四对它进行修改,但视图只能有创建的语句来修改
- 表是内模式,试图是外模式
- 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
- 表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
- 视图的建立和删除只影响视图本身,不影响对应的基本表。
联系:
视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。
什么时候视图不能进行更新操作?
- 视图中不包含基表被定义为非空的列
- 在定义是图的SELECT语句后的字段列表中使用了数学表达式
- 在定义是图的SELECT语句后的字段列表中使用了集合函数
- 在定义视图的SELECT语句中使用了DISTINCT、UNION、TOP、GROUP BY、HAVING子句
插入、更新、删除数据
插入数据
1 | # 一条记录,可指定字段 |
更新数据
1 | update person set age = 15,name = 'LiMing' where id = 11; |
删除数据
1 | delete from person where id = 11 |
综合实例
update
1 | update books set price=price+5 where note = 'novel'; |