精华内容
下载资源
问答
  • 创建表空间 创建表空间: 逻辑单位, 通常我们新建一个项目,就会去... create tablespace 表空间名称 datafile '文件的路径' (虚拟机服务器上的存放路径) 文件后缀为.dbf size 大小 autoextend on 设置自动扩展 ...

    创建表空间

    创建表空间: 逻辑单位, 通常我们新建一个项目,就会去新建表空间,在表空间中创建用户来创建表
         语法:
             create tablespace 表空间的名称
             datafile '文件的路径'   (虚拟机服务器上的存放路径)  文件后缀为.dbf
             size 大小
             autoextend on  设置自动扩展
             next 每次扩展的大小
    		 
    
    --创建表空间
    create tablespace table01
    datafile 'c:\table01.dbf'
    size 100m
    autoextend on
    next 10m;
    
    --删除表空间
    drop tablespace handong;   --只删除逻辑关系,不删除磁盘文件
    

    创建用户

    创建用户 
        create user 用户名
        identified by 密码
        default tablespace 表空间的名称
    
    create user user01
    identified by user01
    default tablespace table01;
    
    授权 --- 语法:  grant 权限 to 用户
       
    三种权限: 
           dba: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。可使用其他用户表空间
           Resource:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
           Connect:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
    
    --授予Connect权限
    grant connect to user01;
    
    --授予dba权限
    grant dba to user01;
    
    

    创建表

    1.直接创建表
      语法格式:
         create table 表名(
           列名  列的类型 [列的约束],
           列名  列的类型  [列的约束]      
         );
         
    	 
    2.子查询创建表  :create table 表名 as 查询语句; 
    
    相当于复制被查询表。(只复制表结构和表数据,不复制约束)  
    	
    create table test1(    --创建表,设置三列
       name1 varchar2(10),  
       name2 char(10),
       age   number(2,3)    
    );
    

    列的类型:
         1.varchar ,在Oracle中,目前是支持的, 但是不保证以后还支持
         
         2.varchar2(长度) 可变字符长度    varchar2(10)  hello  占5个字符
         3.char(长度)   固定长度字符      char(10)      hello  占10个字符,用空格填充
         4.number(总长度,小数长度)     数字类型  ***小数长度不能大于等于总长度
         
         5.date                   年月日时分秒 2017/4/13 9:43:49
         6.timestamp              时间戳, 比date类型更加精确 13-APR-17 09.44.08.272000 AM +08:00
         
         7.LONG/CLOB : 存放一本小说
         8.BLOB      : 存放电影  java 存进去,  再读取出来
     
    约束:用来约束表中数据的规则
    列的五大约束  
    	 1.主键约束: primary key 不能为空, 必须唯一
    	 2.非空约束
    	 3.唯一约束
    	 4.检查约束 check(条件)  在mysql中是可以写的,但是mysql直接忽略了检查约束
    	 5.外键约束:  主要是用来约束从表A中的记录,必须是存在于主表B中
    

    增删改

    插入数据:
         insert into 表名 values(所有列的值都要对应写上)
         insert into 表名(列1,列2) values(值1,值2);
             
        使用子查询插入数据
             insert into 表名 查询语句
    	
    
    更新数据
        update 表名 set 列名 = 列的值  [where 条件]
    	update emp1 set ename='HUAAN' where ename = 'KING';
    
    
    
    删除数据:
           delete from 表名  [where 条件] 
    	   
           delete和truncate 区别
            delete:                truncate:
            DML                    DDL
            逐条删除                先删除表再创建表
            支持事务操作            不支持事务操作,
                                   执行效率要高  
    							   						   
    --设置默认级联删除 on delete
    
    --级联删除 : 先删除从表中关联数据,然后再删除表中的数据
    
    --强制删除表(不建议使用) : 先删除外键关联表的外键约束,然后再删除自己, 先删除product的外键约束,再删除原表
    drop table 表 cascade constraint;
    

    事务

       四大特性: 原子性,隔离性,持久性,一致性
          
       如果不考虑隔离级别: 脏读,虚读,不可重复读
            MYSQL隔离级别: READ UNCOMMITTED , READ COMMITTED, REPEATABLE READ, SERIALIAZABLE
            ORACLE隔离级别: READ COMMITTED SERIALIZABLE READ ONLY 
                        默认隔离级别: READ COMMITTED
                        
      提交 : commit
      事务的保存点/回滚点: savepoint 保存点的名称
      回滚: rollback
    

    视图: 就像窗户一样, 封装查询结果 , 通常视图创建只读视图

    序列: 主要是用来实现ID自增长

    索引: 相当于目录,能够提高查询效率, 原理 平衡二叉树, 每隔一段时间DBA都需要去重建索引

    同义词: create synonym 名称 for 对象的名称

    视图

      视图: 是对查询结果的一个封装,视图里面所有的数据,都是来自于它查询的那张表。
             
          1.能够封装复杂的查询结果
          2.屏蔽表中的细节
       语法: 
          create [or replace] view 视图的名称 as 查询语句 [ with read only]
          
       注意: 通常不要通过视图去修改,视图创建的时候,通常要加上with read only
    

    序列

    序列: 生成类似于 auto_increment 这种ID自动增长 1,2,3,4,5....
       auto_increment 这个是mysql  
       
       语法:
           create sequence 序列的名称
           start with 从几开始
           increment by 每次增长多少
           maxvalue 最大值 | nomaxvalue
           minvalue 最小值 | nominvalue
           cycle | nocycle  是否循环    1,2,3,1,2,3
           cache 缓存的数量3 | nocache  1,2,3,4,5,6 
           
      如何从序列获取值
          currval : 当前值
          nextval : 下一个值
          
               注意: currval 需要在调用nextval之后才能使用      
               
               永不回头,往下取数据, 无论发生异常, 回滚   
    

    索引

    索引:相当于是一本书的目录,能够提高我们的查询效率
       如果某一列,你经常用来作为查询条件,那么就有必要创建索引,数据量比较的情况
       
       语法: 
             create index 索引的名称 on 表名(列)   
        
       注意:主键约束自带主键索引, 唯一约束自带唯一索引
       
       索引原理: btree   balance Tree 平衡二叉树
       
             如果某列作为查询条件的时候,可以提高查询效率,但是修改的时候,会变慢
             
             索引创建好之后,过了一段,DBA都会去做重构索引
             
       SQL调优:
             1.查看执行计划F5
             2. 分析里面的cost 和 影响行数, 想办法降低            
    

    PLSQL编程

     PLSQL编程 : procedure Language 过程语言 Oracle对SQL的一个扩展
             让我们能够像在java中一样写 if else else if 条件, 还可以编写循环逻辑 for while
             
             declare
                --声明变量
                变量名 变量类型;
                变量名 变量类型 := 初始值;
                  vsal emp.sal%type;  --引用型的变量  
                  vrow emp%rowtype;   --声明记录型变量          
             begin
                --业务逻辑
             end;
             
             dbms_output.put_line()相当于java中 syso 
    

    PL条件判断

     if then
     
     elsif then
       
     else 
     
     end if;
    

    循环操作

    1.  while 循环
          while 条件 loop
            
          end loop;
        
    2.  for循环
          for 变量  in [reverse] 起始值..结束值 loop
            
          end loop;
      
    3.  loop循环  
          loop
            exit when 条件
          end loop;
    
    展开全文
  • 1、创建数据表-- 创建表 2、将表关联起来,要使用外键(froeign key)如:下面的商品表...放到mysql 中一块执行3、查看一下: 加了6个表查看表中包含的字段名、数据类型、是否允许为空键的信息等show 外键的话4、重...

    1、创建数据表

    -- 创建表
    

    5dbdb9e215fdcca19c2f4ec63b26e83d.png

    2、将表关联起来,要使用外键(froeign key)

    如:下面的商品表和供应商表,在商品表中创建一个字段与供应商表的主键关联起来,好处就是节省了空间时间,当这个供应商改名了,你只要只修改供应商表就行了,

    ALTER 

    c696ae8d0be6f6b0590ac8fa00267ca4.png

    插入数据

    05382c1e205cb1ed87f9a7227823e3ca.png

    可以拷贝多个,放到mysql 中一块执行

    3、查看一下: 加了6个表

    d9d305fa32d3900f66e40c1a79b03f4c.png

    查看表中包含的字段名、数据类型、是否允许为空键的信息等

    show 

    c773a3bdf62ddc122786a1901c0a6113.png

    外键的话

    51dab3df0eeaff5d6e5404e0b30d13d5.png

    4、重命名表(RENAME TABLE)

    查看一下有几个表,给tbuser1 重命名一下

    64c0f565bf6e4764a4bea5d0dd736ecd.png
    -- 将tbuser1 改名为
    

    8fc81673e28fb7fdde315ac1db185700.png

    也可以修改多个

    1a0a60a4e8166536e4a4a54e6bb0c62c.png

    5、删除表(DROP TABLE)

    删除没有确认也不能撤销,执行该语句将永久删除该表

    --  删除表 tb_obgeshuai     
    

    a53d73e407d72bbe17ffd894065df7ff.png

    6、更新表(ALTER TABLE)

    理想状态下,当表中存储数据后,表就不应该更新了,所以在设计表时要多多考虑,以便后期不对表进行较大改动

    查看一下原有表中列

    2160e77ba94a4479bb0706a88fcae3fb.png
    -- 更改表,增加一列    
    

    b52dbc9de5ec7eaba178479257a60e31.png
    -- 删除表中列 
    

    6fc0050ac98c95eaccc68ecb1817bfab.png

    还有一种就是定义外键

    4a163a3245bec419d47d12c1410ee0d8.png

    注意:

      1、对单个表进行多个更改,可以使用单条ater table 语句,每个更改使用逗号分隔

      2、复杂的表结构更改一般要手动删除过程

    主要步骤:    
     a、用新的列布局创建一个新表    
     b、使用insert select 从旧表中复制数据到新表,如果有必要,可使用转换函数和字段    
     c、检验包含所需数据的新表    
     d、重命名旧表(如果确定可以删除)     
     e、用旧表原来的名字重命名新表     
     f、根据需要重新创建触发器、存储过程、索引和外键

      3、使用alter table 要极为小心,应该在进行改动前做一个完整备份(模式和数据的备份),数据表更改后不能撤销,如果删了不该删除的列可能会丢失数据

    End

    数据定义语言 DDL (全称:Data Query Language):定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引四个部分

    语句:包括动词CREATE(创造),ALTER(修改)和DROP(删除)。

    展开全文
  • 本文主要是针对《Mysql技术内幕:InnoDB 存储引擎》一书中第三章关于相关概念的概括和总结,主要包括组织索引,InnoDB 逻辑存储结构,InnoDB 行记录格式,InnoDB 数据页结构,相关的约束问题,视图,分区。...

    292ce67a5479ca35cc8533db982fce39.png

    本文主要是针对《Mysql技术内幕:InnoDB 存储引擎》一书中第三章关于表相关概念的概括和总结,主要包括组织索引表,InnoDB 逻辑存储结构,InnoDB 行记录格式,InnoDB 数据页结构,表相关的约束问题,视图,表分区。

    一、索引组织表

    索引组织表是指按照主键的顺序组织存放数据的表,InnoDB 存储引擎创建的表都是索引组织表。InnoDB 主键定义规则如下:

    • 如果定义表时,显式指定了 Primary Key,Primary Key 便是主键。
    • 如果没有使用 Primary Key 指定主键,判断表中是否有非空的唯一索引,如果有则该列即为主键,如果表中有多个非空的唯一索引,会选择第一个非空唯一索引为主键,这里是索引的定义顺序,并非列的定义顺序。
    • 如果不存在非空的唯一索引,InnoDB 会主动创建一个 6 个字节大小的指针为主键。
    • _rowid 在单个列为主键的情况下可以查看主键对应的值,多个列则无能为力。

    二、InnoDB 逻辑存储结构

    表空间

    InnoDB 所有数据都存放在一个空间中,称之为表空间,表空间由段,区,页组成。

    innodb_file_per_table 参数:

    • InnoDB 默认情况下所有表的数据都存放在共享表空间 ibdata1 中,该参数决定了是否每为张表内的数据单独设置一个表空间。
    • 如果开启该功能,单独表空间中只存放数据、索引、插入缓存 Bitmap 页,其它数据包括回滚信息,插入缓存索引页,系统事务信息等还是存放在原来的共享表空间中。

    表空间由各个段组成,主要分为索引段,数据段以及回滚段。其中数据段存放在 B+ 树的叶子节点,索引段存放在 B+ 树的非叶子节点。

    区由连续的页组成:

    • 每个区的大小是固定的:1MB
    • 默认页的大小是 16KB,所以一个区中有 64 个连续页。
    • innodb_page_size 参数,在 1.2.x 版本以后可以设置对页的大小进行设置。
    • 当创建一个表时,并不是直接使用连续的 64 个页存放数据,而是先用每个段开始时的 32 个碎片页来存放数据,等使用完这些碎片页才开始申请 64 个连续页,这样做的主要目的对于一些小表,刚开始可以申请较少的空间,节省磁盘容量的开销。

    InnoDB 存储引擎中,常见的页的类型有:

    • 数据和索引页
    • undo 页
    • 系统页
    • 事务数据页
    • 插入缓存 Bitmap 页
    • 插入缓存空闲列表页
    • 未压缩的二进制大对象页
    • 压缩的二进制大对象页

    InnoDB 存储引擎中,数据是按照行进行存放的,最多可以存放 7992 条行记录

    三、InnoDB 行记录格式

    InnoDB 中行记录格式通过在建表语句中关键字 ROW_FORMAT=xxx 来指定。

    create 

    在 InnoDB 1.0.x 版本之前,提供了 Compact 和 Redundant 两种格式来存放行记录数据。

    在 InnoDB 1.0.x 版本之后,引入了新的两种行记录格式:Compressed 和 Dynamic。

    Compact

    存放顺序:

    • 变长字段列表:按照列的顺序逆序存放每个非 NULL 变长字段所占的长度
    • NULL 标志位:存放哪些字段是NULL值
    • 记录头信息:固定5个字节,记录一些关于行是否被删除,下一行记录的相对位置等信息
    • 列1数据,列2数据...:存放每一列的数据

    不管是 CHAR 类型还是 VARCHAR 类型,NULL 在 Compact 存储格式下都不占用存储空间。

    Redundant

    存放顺序:

    • 字段长度偏移列表:逆序存放每个字段的偏移量
    • 记录头信息:固定6个字节,记录一些关于行是否被删除,下一行记录的相对位置等信息
    • 列1数据,列2数据...:存放每一列的数据

    对于 VARCHAR 类型的 NULL 值同样不占用存储空间,但是 CHAR 类型的 NULL 值会占用存储空间。

    Compressed 和 Dynamic

    • 对于存放在 BLOB 中的数据,完全采用行溢出数据存放
    • Compressed 存放的行数据会采用 zlib 算法进行压缩

    行溢出数据

    • InnoDB 会将一些大对象数据存放在数据页之外的 BLOB 页中
    • 要不要将数据放在 BLOB 页中,取决于当前页中是否可以存放下至少两行数据
    • VARCHAR 类型的数据也有可能被存放在 BLOB 页中,而 BLOB 类型和 TEXT 类型的数据也有可能不被存放在 BLOB 页中
    • 对于 Compact 和 Redundant 格式存放的数据,采用的是部分行溢出存储,前 768 字节还是会存放在数据页中的
    • 对于 Compressed 和 Dynamic 格式存放的数据,采用的完全行溢出存储,只用 20 个字节存放指针,其余所有数据都放在行溢出数据中

    CHAR 类型的存储

    • 对于单字节的字符编码,CHAR 类型是固定长度的字符串
    • 对于多字节的字符编码,CHAR 类型不再代表固定长度的字符串了,innoDB 将其看作变长字符存放,例如对于 UTF-8 下的 CHAR(10) 类型,最小可以存放10字节的字符,最大可以存放30字节的字符

    四、InnoDB 数据页结构

    InnoDB 数据页由以下七个部分组成:File Header 文件头、Page Header 页头、Infimun 和 Supremum Records、User Records 行记录、Free Space 空闲空间、Page Directory 页目录、File Trailer 文件结尾信息。

    File Header

    File Header 用来记录页的一些头信息,共占用 38 个字节,主要存放关于当前页的一些信息,包括下面一些信息:

    • 当前页在表空间的偏移量
    • 上一页和下一页的位置,方便查找下一页和上一页数据
    • 页的类型,包括索引页,数据页,系统页,插入缓存位图等
    • ...

    Page Header

    Page Header 用来记录数据页的状态信息,主要包括下面一些信息:

    • 指向可重用空间的首指针
    • 已删除的记录数
    • 页中记录的数量
    • 当前页在索引树中的位置
    • 索引ID,表示当前页属于那些索引
    • B+ 树所在的段信息,只有 Root 节点才会定义
    • ...

    Infimun 和 Supremum Records

    Infimun 和 Supremum Records 是两个虚拟的行记录,用来存放记录的边界, Infimun 记录比所有主键值都要小的记录,Supremum Records 记录比所有主键值都要大的值,这两个值在页创建时被创建,任何情况下都不会删除。

    User Records 和 Free Space

    User Records 存放行记录数据,Free Space 指的是空闲空间,当一条记录被删除时就加入到空闲链表结构里

    Page Directory

    Page Directory 存放了记录的相对位置,称为槽,并不是每行记录一个槽,是一个稀疏目录,一个槽里面可能有多个记录,按照主键值顺序索引存放。

    Page Directory 主要用于在页中根据索引查询某条记录时,通过二分查找法查到一个粗略的位置,最后在通过行记录中的 next_record 来继续查找相关记录。

    所以整个数据查询的逻辑如下:

    - 通过 B+ 树找到该记录所在的页,数据库把该页载入内存
    - 然后再根据  Page Directory 的二分查找法找到一个粗略的记录位置
    - 最后再根据行记录中的 next_record 来继续查找相关记录

    File Trailer

    File Trailer 为了检查页是否被完整的写入磁盘或者是否完整从磁盘读取,可以通过以下两个参数对其进行控制:

    • innodb_checksums: 是否开启页面完整性检查
    • innodb_checksum_algorithm:设置页面完整性检查算法,默认是 crc32

    五、约束

    数据的完整性包括下面三个部分:

    • 实体完整性:主键约束,Primary Key 和 Unique Key
    • 域完整性:保证每列的值满足一些条件,通过默认值,NOT NULL 等来约束
    • 参照完整性:保证两张表之间的关系,通过外键和触发器来约束

    触发器

    • 触发器用于在执行 INSERT,DELETE,UPDATE 之前或者之后自动调用的 sql 语句或者存储过程
    • 创建触发器命令是 CREATE TRIGGER,只有具备 Super 权限的 MYSQL 数据库用户才能执行该命令
    • 一个表最多创建 6 个触发器,分别是 before insert/before delete/before update/after insert/after delete/after update
    • 触发器可以用来实现对数据完整性约束做检查,物化视图,高级复制,审计等功能

    外键约束

    • InnoDB 在创建外键时,自动会给该列加上索引
    • 外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以
    • 外键通过 FOREIGN KEY ... REFERENCES 来定义:
    CREATE 
    • 定义外键时可以指定 ON DELETE 和 ON UPDATE,表示对外键进行 DELETE 和 UPDATE时,子表的行为:
    - SET NULL:表示外键发生变化时,子表相应字段被设置为 NULL
    - NO ACTION:表示外键发生变化时,抛出错误,不允许该类操作
    - SET DEFAULT:表示外键发生变化时,设置成相应的默认值
    - RESTRICT:表示父表发生变化时,抛出错误,不允许该类操作,和 NO ACTION 类似
    • 创建外键约束时,每次插入和更新会花费大量时间去检查相关依赖,对于性能有一定的消耗,通过 set foreign_key_checks = 0 或者 = 1 来关闭或者开启外键约束检查

    对错误数据的约束

    默认情况下,如果向 mysql 中插入不符合约束规范的数据,mysql 会给予警告提示,并且将不符合规范的数据自动转换为符合符合规范的数据,并不会报错。

    可以通过参数 sql_mode = "STRICT_TRANS_TABLES" 强制对输入值进行合法性检查,如果不满足条件则报错。

    六、视图

    • 视图没有实际的物理存储
    • 视图可以被更新数据,本质上是对基表进行更新的
    • 视图的优点是简化查询,数据安全(只查询部分数据),数据独立
    • 创建视图时如果添加 WITH CHECK OPTION 选项,则会对插入视图的数据作检查,不满足视图定义的数据会报错
    • SHOW TABLES 命令查看到所有基表及视图,如果只想看到视图或者基表,可以查看 information_schema 下的 Table 和 Views 表查看
    • mysql 不支持物化视图,不过可以通过触发器的方式来模拟物化视图,每次更新时,把表中的数据清空,重新导入一遍数据
    • 创建视图通过 CREATE VIEW AS ... 语句实现:
    create 

    七、分区表

    区分特性:

    • 分区功能并不是在存储引擎层完成的,但并不是所有存储引擎都支持分区功能。
    • MYSQL 数据库不支持垂直分区,支持水平分区,也就是按照行进行分区。
    • MYSQL 数据库的分区是局部分区索引,即一个分区中既存放了数据又存放了索引。
    • have_partion 参数用来设置数据库是否开启分区功能
    • 不管创建何种分区,如果表中存在唯一主键或者索引时,分区列必须是唯一索引的一个组成部分
    • 通过 explain partition 可以查看当前 SQL 的分区命中情况
    • 可以通过查看 information_schema 下的 PARTITIONS 表来查看每个分区的具体信息
    • 插入值应该严格遵守分区的定义,如果插入的值不在分区定义范围内,MYSQL 数据库会抛出一个异常
    • RANGE,LIST,HASH,KEY 分区的结果必须是整型,如果不是整型,需要根据函数计算转换为整型

    分区优点:

    • 和单个磁盘或文件系统分区相比,可以存储更多的数据。
    • where 子句中包含分区条件时,可以只扫描必要的分区,提高查询效率。
    • 涉及聚合函数的查询时,可以容易的在每个分区上并行处理,最终只需汇总得到结果。
    • 对于已经过期或者不需要保存的数据,可以通过删除与这些数据有关的分区来快速删除数据。

    分区分类:

    RANGE 分区

    • 行数据基于属于一个给定的连续区间的列值被放入分区
    • 对于某些具有连续意义的列进行分区可能会提高查询效率,一般用于日期列的分区
    • 如果是根据日期函数对某列的计算结果进行分区,分区优化器只能对 YEAR(),TO_DAYS(),TO_SECONDS(),UNIX_TIMESTAMP() 这类函数进行查询优化
    • 特殊值 MAXVALUE 表示正无穷值
    create 

    LIST 分区

    • 和 RANGE 分区类似, LIST 分区是面向离散的值,Range 分区用 values less then 定义分区,而 List 分区用 values in 定义分区
    • 在用 INSERT 插入多行数据的过程中遇到分区未定义的情况,MyISAM 引擎会将之前的数据都插入,之后的数据不会插入,而 InnoDB 引擎会将其视为一个事务,不插入任何数据
    create 

    HASH 分区

    • 根据用户自定义的表达式的返回值进行分区,返回值是正整数
    • 通过 PARTITION BY HASH(expr) 来指定分区,expr 必须返回一个整数的表达式
    • 通过 PARTITIONS 字段指定分区的个数,系统会根据 HASH(expr) 表达式返回的结果使用取余方法将数据拆分为多个分区
    create 

    KEY 分区

    • 和 HASH 分区类似,只是根据 mysql 存储引擎自己提供的哈希函数来进行分区
    create 

    COLUMNS 分区

    • 和其它四种分区相比,COLUMNS 分区可以直接使用非整数类型的数据进行分区,根据数据类型直接比较,不需要转换为整型
    • COLUMNS 分区分为 RANGE COLUMNS 和 LIST COLUMNS 两种
    • 对于 RANGE COLUMNS 可以使用多个列进行分区
    create 

    子分区:

    • 在已经分区的基础上再进行分区,也称为复合分区
    • 可以在 LIST 和 RANGE 的基础上再进行 HASH 和 KEY 分区
    • 每个子分区的数量必须相同,子分区的名字必须唯一
    • 要在任何一个分区表上明确定义子分区,就必须在所有分区上都明确定义子分区
    • 创建子分区的两种方式:
    --  不定义每个子分区
    

    分区中 NULL 值处理:

    • mysql 不禁止在分区键值上使用 NULL
    • range 分区对于 NULL 值的处理是将 NULL 值视为小于任何一个非 NULL 值
    • 对于 list 分区如果插入 NULL 值会报错
    • hash 和 key 分区对于 NULL 值的处理将含有 NULL 值的记录都返回为 0

    分区与性能:

    并不是所有启动了分区的表,数据库查询就会变快。一般对于 OLTP(在线事务处理) 的应用不建议使用分区,建议对于 OLAP(在线分析处理)使用分区。一般 OLTP 表数据量不是特别大,而且大部分查询会根据索引查询,采用分区反而会增加 IO 的读写次数使性能下降。

    表和分区交换数据:

    通过 ALTER TABLE ... EXCHANGE PARTITION 语法可以将某个分区的数据和另外一个非分区表中的数据进行交换,必须满足以下条件:

    • 表结构必须相同
    • 非分区表中的数据必须在交换分区定义内
    • 被交换的表中不能含有外键或者其他对该表的外键引用
    • 使用该语句时不会触发交换表和被交换表上的触发器
    • AUTO_INCREMENT 列会自动被重置
    • 用户需要有 DROP 的权限
    alter 
    展开全文
  • PLSQL--表空间管理

    2021-07-10 16:09:28
    查看表空间信息 --查看表空间信息 SELECT TABLESPACE_NAME, STATUS, CONTENTS, LOGGING FROM DBA_TABLESPACES; --查看数据文件信息 SELECT TABLESPACE_NAME, 'PERMANENT' TABLESPACE_KIND, FILE_NAME, ...
    查看表空间信息
      --查看表空间信息
      SELECT TABLESPACE_NAME,
             STATUS,
             CONTENTS,
             LOGGING
        FROM DBA_TABLESPACES;
      --查看数据文件信息
      SELECT TABLESPACE_NAME,
             'PERMANENT' TABLESPACE_KIND,
             FILE_NAME,
             STATUS,
             AUTOEXTENSIBLE,
             BYTES/1024/1024 CURR_BYTES_M,
             ONLINE_STATUS
        FROM DBA_DATA_FILES --永久表空间(含撤销表空间)
       UNION ALL
      SELECT TABLESPACE_NAME,
             'TEMPORARY' TABLESPACE_KIND,
             FILE_NAME,
             STATUS,
             AUTOEXTENSIBLE,
             BYTES/1024/1024 CURR_BYTES_M,
             'ONLINE' ONLINE_STATUS
        FROM DBA_TEMP_FILES; --临时表空间
      查看用户默认表空间信息
      SELECT USERNAME 用户名,
             DEFAULT_TABLESPACE 默认表空间,
             TEMPORARY_TABLESPACE 默认临时表空间
        FROM DBA_USERS;
      
    创建表空间
    CREATE TABLESPACE tbs_name --指定新表空间的名字
    DATAFILE '/path/filename' SIZE num[K/M] --映射的数据文件路径及初始大小
    [AUTOEXTEND [ON|OFF] NEXT num[K/M] MAXSIZE num[K/M]] --是否自动扩展及自动扩展时每次扩展的大小和最大值
    [ONLINE|OFFLINE] --表空间在线或离线
    [LOGGING|NOLOGGING]; --该空间下对象加载时是否记录日志
    
    
    修改表空间
      增加数据文件
        --非自动扩展
      ALTER TABLESPACE tbs_name ADD DATAFILE '/path/filename' SIZE 10M AUTOEXTEND OFF ;
        --自动扩展
      ALTER TABLESPACE tbs_name ADD DATAFILE '/path/filename' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
      修改数据文件
        扩展和缩小
        ALTER DATABASE DATAFILE '/path/filename' RESIZE num[K/M];
        修改自动扩展属性
        ALTER DATABASE DATAFILE '/path/filename' AUTOEXTEND ON NEXT num[K/M] MAXSIZE UNLIMITED;
        ALTER DATABASE DATAFILE '/path/filename' AUTOEXTEND OFF;
      删除数据文件
      ALTER TABLESPACE tbs_name DROP DATAFILE '/path/filename';
      重命名表空间
      ALTER TABLESPACE tbs_name_old RENAME TO tbs_name_new;
      SYSTEM、SYSAUX表空间及处于OFFLINE状态的表空间不能重命名。
    删除表空间
    DROP TABLESPACE tbs_name INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
    
    修改表空间状态
      修改为只读状态--禁止DML操作,小部分数据库对象允许删除,基本该表空间只读禁写
      ALTER TABLESPACE tbs_name READ ONLY;
      修改为读写状态(默认)--即ONLINE状态,允许正常操作
      ALTER TABLESPACE tbs_name READ WRITE;
      
    创建用户、表和索引时指定表空间
      用户
      CREATE USER user_name IDENTIFIED BY pwd 
      DEFAULT TABLESPACE tbs_name TEMPORARY TABLESPACE tmp_tbs_name;CREATE TABLE tb_name(
      col_name col_type
      ...)
      TABLESPACE tbs_name;
      ALTER TABLE tb_name MOVE TABLESPACE tbs_name;
      索引
      CREATE INDEX ind_name on tb_name(col_name) TABLESPACE tbs_name;
      ALTER INDEX ind_name REBUILD TABLESPACE tbs_name;
      --出于性能和安全考虑,表和索引建议分开放至不同的表空间内。
      
    调整用户的默认表空间
      调整默认的永久表空间
      ALTER USER user_name DEFAULT TABLESPACE tbs_name;
      调整默认的临时表空间
      ALTER USER user_name TEMPORARY TABLESPACE tbs_name;
      
    设置数据库的默认表空间
      设置默认永久表空间
      ALTER DATABASE DEFAULT TABLESPACE tbs_name;
      设置默认临时表空间
      ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tbs_anme;
    
    临时表空间迁移
      1)创建新的临时表空间
      CREATE TEMPORARY TABLESPACE tmp_tbs_name_new
      TEMPFILE '/path/filename' SIZE num[K/M]
      [AUTOEXTEND ON|OFF NEXT num[K/M] MAXSIZE UNLIMITED];
      2)修改数据库的临时表空间为新的临时表空间
      ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tmp_tbs_name_new;
      3)删掉旧的临时表空间
      DROP TABLESPACE tmp_tbs_name_old INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
    
    表空间预警方案
      eg:表空间使用率超过95%或剩余表空间少于30M时,存储过程不能开始进行。
    SELECT A.TABLESPACE_NAME 表空间名称,
           ROUND(TOTAL/1024/1024,4) 表空间大小M,
           ROUND(FREE/1024/1024,4) 表空间剩余大小M,
           ROUND((TOTAL-FREE)/1024/1024,4) 表空间使用大小M,
           ROUND((TOTAL-FREE)/TOTAL,4)*100 使用率
      FROM (SELECT TABLESPACE_NAME,SUM(BYTES) FREE
              FROM DBA_FREE_SPACE
             GROUP BY TABLESPACE_NAME) A,
           (SELECT TABLESPACE_NAME,SUM(BYTES) TOTAL
              FROM DBA_DATA_FILES
             GROUP BY TABLESPACE_NAME) B
        ON A.TABLESPACE_NAME=B.TABLESPACE_NAME
     WHERE /*A.TABLESPACE_NAME=UPPER('tbs_name')*/
     ORDER BY ROUND((TOTAL-FREE)/TOTAL,4)*100 DESC;
    
    展开全文
  • 通过pl/sql登录到Oracle数据库上,然后执行菜单:文件/新建/命令窗口 ,打开一个命令窗口然后在该命令窗口中执行脚本创建和删除表空间: 1.创建表空间: create tablespace MOF_TEMPdatafile 'D:\oracle\product\...
  • 创建数据基本语法MySQL数据库管理系统使用SQL结构化查询语法实现对数据进行创建。数据创建主要包括数据表名字的确定、字段属性的定义与约束的设置等。数据创建的基本语法描述如下:创建数据表语法其中...
  • (1)创建基础 为利用create table创建,必须给出下列信息:(一)新名字,在create table之后给出。(二)列的名字和定义,用逗号隔开。//的主键可以在创建时用PRIMARY KEY关键字...
  • create temporary tablespace banksuptest_temp(临时表空间名称) tempfile 'D:\oracle\product\10.2.0\oradata\orcl\banksuptest_temp.dbf' size 100m autoextend  on next 32m maxsize 2048m extent management ...
  • PLSQL工具创建表空间 我们要先登录PLSQL管理员账户 登录名:sys 口令:自己在安装Oracle时的口令 数据库:orcl 连接为:SYSDBA 在工具内新建一个sql window窗口 建完之后我们开始写sql语句建表空间 ...
  • 第一节:Oracle 表空间 一个数据库可以有多个表空间,一个表空间里可以有多个表。表空间就是存多个表的物理空间; 可以指定表空间的大小位置等。 创建表空间:create tablespace ts1 datafile 'C:\tablespace\ts1....
  • PLSQL Developer上建立表空间脚本

    千次阅读 2009-09-29 23:37:00
    Oracle在PLSQL Developer上创建表空间和用户脚本在PLSQL Developer上建立表空间脚本创建表空间一、create tablespace MOF_TEMP //namedatafile D:/oracle/product/10.2.0/oradata/orcl/MOF_TEMP.def size 500M //--...
  • 1、创建临时表空间 select name from v$tempfile; 查出当前数据库临时表空间,主要是使用里面的存放路径; 创建临时表空间:create temporary tablespace teest_temp tempfile '临时表空间路径/test_temp.dbf' ...
  • 创建一个表空间 Conference (表空间在oracle中就是数据库的意思) 然后指明表空间的dbf文件 2.create user conference identified by conference2020 default tablespace Conference; 创建一个用户,以及密码,并...
  • plsql服务器查询数据库连接 内容精选换一换CDM目前支持迁移以下关系型数据库:数据仓库服务(DWS)云数据库 MySQL云数据库 PostgreSQL云数据库 SQL ServerMySQLPostgreSQLMicrosoft SQL ServerOracleIBM Db2Fusion...
  • 用户 sys 无所不能 system scott 当前用户 创建用户 ... 查看当前账户 show user; ...conn / as sysdba 切换为超...查用户 select * from scott.emp; 查看所有用户 select * from All_users; 用户登录 conn 用户名/密码 ...
  • 针对下面的文章做点调整,第二种方案,应将查询的语句改为:  Select ‘alter table ‘||table_name||’ allocate extent;’ from user_tables where segment_created=’NO’;  /****************************...
  • PLSQL使用方法简单,平常使用较多,但在平常使用过程中,遇到一些问题,下面简单罗列并进行解决。这些解决方法大多通过网络查找获得,这里只是进行简单整理。 使用的数据库版本为:Oracle11g。 通用方法:结构和...
  • PLSQL建用户和

    2020-09-03 09:05:49
    查询当前数据库已存在的用户: ...drop tablespace 表空间名称 including contents and datafiles cascade constraint; 例如:删除用户名成为LYK,表空间名称为LYK –删除用户,及级联关系也删除掉 dro
  • PLSQL查看ORACLE数据库及信息的方法

    万次阅读 2018-11-28 16:23:26
    -- 查看ORACLE 数据库中本用户下的所有 SELECT table_name FROM user_tables; -- 查看ORACLE 数据库中所有用户下的所有 select user,table_name from all_tables; -- 查看ORACLE 数据库中本用户下的所有列 ...
  • 清除arcsde空间垃圾数据以及解决sde图层名称被占用的问题 引言一:空间数据的存储通常都是通过支持空间数据存储的关系型数据库外挂一个空间数据引擎来提供解决方案,例如著名的esri的ArcSDE以及国外的skyline公司...
  • oracle表空间及维护(待整理到plsql库中)(转载) 2009-07-27 14:06 ORACLE数据库被划分成称作为表空间的逻辑区域——形成ORACLE数据库的逻辑结构。一 个ORACLE数据库能够有一个或多个表空间,而一个表空间则...
  • plsql

    2016-07-07 15:43:04
    PL/SQL pl/sql(procedual language/sql)过程化 是oracle在标准的sql语言上的扩展 不仅允许嵌入sql语言,还可以定义变量和常量...编写一个存储过程,该过程可以向某中添加记录create table mytest (name varchar2(20),
  • 一、导出数据结构和数据 导出结构: 找到工具——》导出用户对象——》选择当前用户——》导出文件为xxx.sql位置自己选择(导出的只是数据结构) 导出数据: 找到工具——》导出——》选择当前用户——》...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,967
精华内容 1,986
关键字:

plsql查询表空间名称