您的位置:首页 > 其它

学习笔记-数据操控语言DML,表和约束

2018-01-15 12:42 423 查看
数据操控语言

DML,数据操控语言

insert 语句
1, insert into table_name (col1, col2, col3,.....) values (value1, value2, value3, ...);
2, insert into table_name values (value1, val2, val3,...);
两种使用形式,第一种形式中,字段的顺序可以乱,但是字段的名字要和表中的字段的名字相同。
第二种使用形式中,只能按照表中字段的顺序要插入,没写的字段为null。
在插入时,只有字符和日期需要使用 单引号 括起来。

插入日期
insert into employess values ('17-6 月- 13');
在oracle中,日期的默认形式为 DD-MON-RR ,如果日期字符的格式为默认形式,系统就会自动转换。
如果输入的格式不是默认格式,就要自己使用to_date函数进行转换。

insert into employess values (to_date('2013/06/28', 'YYYY/MM/DD'));
insert into employess values (sysdate);
获取当前时间不需要转换。

插入多行
在insert后面跟select语句

insert into employess (employee_id, last_name, hire_date)
select employee_id, last_name, hire_date from other_table_name;

update语句
更新表中的数据
update tab_name set col1 = val1, col2 = val2, ... [where];

delete语句
删除表中的记录
delete [from] tab_name [where];


事务处理

什么是事务?有什么用?

事务是数据库中非常重要的概念,主要用于确保数据的完整性,是程序员可以更加灵活的操作数据库。

事务由一组DML语句组成。

SQL语言按照其功能分类:
数据查询语言:DQL  select之类的
数据操作语言:DML  insert,delete,update
数据定义语言:DDL  创建表
数据控制语言:DCL  给用户分配权限

select语句是属于DQL的,不是属于DML的。但是实际中,大部分还是把它归位DML。
当第一条DML SQL语句执行或者一个事务结束下一个SQL开始执行,事务开始。
当遇到commit,rollback语句时,事务结束。

DDL和DCL不需要显示的提交事务,系统会自动的提交事务,也叫隐式提交。
DQL用不到事务。
另外当数据库退出时,也会自动提交事务,保存数据,方便下次使用。
当数据库客户端异常退出时,不会提交事务,防止不必要的数据改变,确保数据的安全。

事务控制语句
commit              提交当前的事务,之前做的改变永久作用于数据库。
rollback            回滚当前事务,之前做的修改无效。
savepoint name      在当前事务中标记保存点
rollback to name    回滚到当前事务的指定保存点。

细节深入
事务的操作是在当前用户的数据缓冲区进行的,因此这些操作可以被恢复。
当执行DML语句时,执行的操作并不会立刻反应到数据库中。
在当前事务没有提交前,当前用户得到的数据和其他用户得到的数据是不一样的。



4000

什么是表?有什么用?

表示数据库的基础,是基本存储单元,用来存储数据,有字段(列)和记录(行)组成。

表和字段的命名规则:
必须以字母开头
只能包含字母,数字,下划线,$和#
长度为1-30个字符
不能使用Oracle关键字

表的分类
一种是用户创建的表,叫做用户表。
一种是服务器创建的表,叫做数据字典表,并且由系统维护。

全部数据字典表的所有者是SYS,但是一般用户都很少访问数据字典表,因为里面的东西很难理解。
所以一般用户都访问数据字典视图,这个里面的东西都好理解。

数据字典视图
前缀                说明
user_               存放关于用户拥有对象的所有信息
all_                包含用户可访问所有表的信息
dba_                受限制的视图,只有由dbs用户进行访问
v$                  动态执行的视图,包含数据库的信息,性能等

select * from  user_table;

创建表
create table table_name (col1 type [default], col2 type [default], ....);

使用子查询创建表
1, create table mytab (id, first_name, last_name) as
select id, first_name, last_name from employees;

2, create table mytab as select id, last_name, emaile from employess;

两种创建方式,相同点:在创建表的使用只能指定表字段的名字和默认值,
字段类型是从子查询中传过来的。
不同点:就是一个写了显示的写了字段的名字,另一个没有写就只有用子查询传过来的名字了。

修改表
alter table table_name add (col1 type [default], col2 type [default],....);
alter table table_name modify (col1 type [default], ...);
alter table table_name drop(column);

删除表
drop table table_name;

重命名
rename old_name to new_name;

截断表
truncate table table_name;

截断表会删除表中所有的记录,并且释放空间。delete语句只是删除表中的记录,不会释放表中的空间。


内置约束

使用约束,为了防止无效的数据进入表中。保护数据的实体完整性。

约束可以在创建表的时候使用,也可以在表已经创建好的情况下使用。

查询表中约束定义,可以查看user_contraints数据字典视图。

在使用约束的时候,最好给其命名,这样易于约束的引用。如果没有对其进行命名,
系统会自动采用SYS_Cn的方式给约束命名。n是一个唯一标志的数字,所以约束名是唯一的。
没有显示命名的约束,在 pl/sql dev 工具的 checks 约束项中是看不到的。

常用约束
not null            指定字段不能为空
unique              指定字段的值对于表中所有的行必须是唯一的
primary key         指定表中的每行的唯一标识,又称主键约束
foreign key         在指定字段中和引用表的一个字段建立强制外键关系,又叫外键约束
check               指定一个必须为真的条件

约束又可以分为:字段约束和表约束,但是not null约束不能用于表约束。

create table mytable (id number(2) not null, first_name varchar2(10) not null,
last_name varchar2(10) not null, contraint mytab_id_pk primary key (id));

unique约束
允许向行中输入空值,空值的行数也可以是任意行,因为null不是任意数。
alter table mytab add (emaile varchar2(20) contraint emaile_uk unique);

主,外键约束
注意事项:一个外键的输入值必须存在于父表的主键中,要是在外键中插入一个主键不存在的值,
系统会提示错误。同样在父表的主键中不能删除这个行。
主键约束只能有一个,但是unique约束可以有多个。

alter table tab_name add contraint tn_foreign_key
foreign key (col1) reference new_tab_name (col);

check约束
一种灵活的约束,定义每行都必须满住的条件。
alter table mytab add contraint mytab_salary_min check (salay >= 0);

添加约束
alter table tab_name add [contraint c_name] type(约束类型) (column(影响的字段名));

删除约束
alter table tab_name drop primary key [cascade];
alter table tab_name drop unique (column);
alter table tab_name drop contraint c_name [cascade];
cascade 会导致任何与其相依赖的约束也被删除。

启用或禁止约束
alter table tab_name disable contraint c_name [cascade];
alter table tab_name enable contraint c_name;

查看表的结构
select dbms_metadata.get_ddl('table', '表名') from dual;
这里的表名必须大写。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: