天天看点

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据

课程视频:

Oracle数据库开发必备利器之SQL基础

文章目录

  • 登入数据库
  • 用户操作
    • 查看登入用户
    • 启用scott用户
  • 表空间
    • 查找表空间的位置
    • 修改数据文件
  • 数据类型
    • 数值型
    • 日期型
    • 其他类型
  • 创建表
  • 修改表
    • 字段操作
      • 添加字段
      • 更改字段数据类型
      • 删除字段
      • 修改字段名
    • 修改表名
    • 删除表
  • 操作表数据
    • 添加数据
      • 向表中所有字段添加值
      • 向表中指定字段添加值
    • 向表中添加默认值
      • 建表时添加默认值
      • 建表后添加默认值
    • 复制表数据
      • 建表时复制
        • *全部列复制
        • *部分列复制
      • 在添加时复制
        • *全部复制
        • *部分复制
    • 修改数据
      • 无条件更新
      • 有条件更新
    • 删除数据
      • 全部删除
      • 部分删除

登入数据库

F:\>sqlplus

SQL*Plus: Release 11.2.0.1.0 Production on 星期三 11月 6 17:15:33 2019

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

请输入用户名:  system
输入口令:

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> connect sys
输入口令:
ERROR:
ORA-28009: connection as SYS should be as SYSDBA or SYSOPER


警告: 您不再连接到 ORACLE。
           

用户操作

查看登入用户

SQL> show user
USER 为 "SYSTEM"
SQL> --使用dba_user字典
SQL> desc dba_users;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- -------------------

 USERNAME                                  NOT NULL VARCHAR2(30)
 USER_ID                                   NOT NULL NUMBER
 PASSWORD                                           VARCHAR2(30)
 ACCOUNT_STATUS                            NOT NULL VARCHAR2(32)
 LOCK_DATE                                          DATE
 EXPIRY_DATE                                        DATE
 DEFAULT_TABLESPACE                        NOT NULL VARCHAR2(30)
 TEMPORARY_TABLESPACE                      NOT NULL VARCHAR2(30)
 CREATED                                   NOT NULL DATE
 PROFILE                                   NOT NULL VARCHAR2(30)
 INITIAL_RSRC_CONSUMER_GROUP                        VARCHAR2(30)
 EXTERNAL_NAME                                      VARCHAR2(4000)
 PASSWORD_VERSIONS                                  VARCHAR2(8)
 EDITIONS_ENABLED                                   VARCHAR2(1)
 AUTHENTICATION_TYPE                                VARCHAR2(8)

SQL> select username from dba_users;

USERNAME
------------------------------
MGMT_VIEW
SYS
SYSTEM
DBSNMP
SYSMAN
SCOTT
OUTLN
FLOWS_FILES
MDSYS
ORDSYS
EXFSYS

USERNAME
------------------------------
WMSYS
APPQOSSYS
APEX_030200
OWBSYS_AUDIT
ORDDATA
CTXSYS
ANONYMOUS
XDB
ORDPLUGINS
OWBSYS
SI_INFORMTN_SCHEMA

USERNAME
------------------------------
OLAPSYS
ORACLE_OCM
XS$NULL
BI
PM
MDDATA
IX
SH
DIP
OE
APEX_PUBLIC_USER

USERNAME
------------------------------
HR
SPATIAL_CSW_ADMIN_USR
SPATIAL_WFS_ADMIN_USR

已选择36行。
           

启用scott用户

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
SQL> alter user scott account unlock;

用户已更改。

SQL> --使用scott用户登入SQL Plus
SQL> --默认密码tiger
SQL> connect scott/tiger
已连接。
SQL> show user
USER 为 "SCOTT"
           

表空间

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
SQL> --查看用户的表空间
SQL> desc dba_tablespaces
ERROR:
ORA-04043: 对象 "SYS"."DBA_TABLESPACES" 不存在


SQL> conn system
输入口令:
已连接。
SQL> desc dba_tablespaces
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------

 TABLESPACE_NAME                           NOT NULL VARCHAR2(30)
 BLOCK_SIZE                                NOT NULL NUMBER
 INITIAL_EXTENT                                     NUMBER
 NEXT_EXTENT                                        NUMBER
 MIN_EXTENTS                               NOT NULL NUMBER
 MAX_EXTENTS                                        NUMBER
 MAX_SIZE                                           NUMBER
 PCT_INCREASE                                       NUMBER
 MIN_EXTLEN                                         NUMBER
 STATUS                                             VARCHAR2(9)
 CONTENTS                                           VARCHAR2(9)
 LOGGING                                            VARCHAR2(9)
 FORCE_LOGGING                                      VARCHAR2(3)
 EXTENT_MANAGEMENT                                  VARCHAR2(10)
 ALLOCATION_TYPE                                    VARCHAR2(9)
 PLUGGED_IN                                         VARCHAR2(3)
 SEGMENT_SPACE_MANAGEMENT                           VARCHAR2(6)
 DEF_TAB_COMPRESSION                                VARCHAR2(8)
 RETENTION                                          VARCHAR2(11)
 BIGFILE                                            VARCHAR2(3)
 PREDICATE_EVALUATION                               VARCHAR2(7)
 ENCRYPTED                                          VARCHAR2(3)
 COMPRESS_FOR                                       VARCHAR2(12)

SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
EXAMPLE
TEMPTEST1_TABLESPACE

已选择7行。

SQL> desc user_tablespaces
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------

 TABLESPACE_NAME                           NOT NULL VARCHAR2(30)
 BLOCK_SIZE                                NOT NULL NUMBER
 INITIAL_EXTENT                                     NUMBER
 NEXT_EXTENT                                        NUMBER
 MIN_EXTENTS                               NOT NULL NUMBER
 MAX_EXTENTS                                        NUMBER
 MAX_SIZE                                           NUMBER
 PCT_INCREASE                                       NUMBER
 MIN_EXTLEN                                         NUMBER
 STATUS                                             VARCHAR2(9)
 CONTENTS                                           VARCHAR2(9)
 LOGGING                                            VARCHAR2(9)
 FORCE_LOGGING                                      VARCHAR2(3)
 EXTENT_MANAGEMENT                                  VARCHAR2(10)
 ALLOCATION_TYPE                                    VARCHAR2(9)
 SEGMENT_SPACE_MANAGEMENT                           VARCHAR2(6)
 DEF_TAB_COMPRESSION                                VARCHAR2(8)
 RETENTION                                          VARCHAR2(11)
 BIGFILE                                            VARCHAR2(3)
 PREDICATE_EVALUATION                               VARCHAR2(7)
 ENCRYPTED                                          VARCHAR2(3)
 COMPRESS_FOR                                       VARCHAR2(12)


SQL> select tablespace_name from user_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
EXAMPLE
TEMPTEST1_TABLESPACE

已选择7行。

SQL> conn scott
输入口令:
已连接。
SQL> select tablespace_name from dba_tablespaces;
select tablespace_name from dba_tablespaces
                            *
第 1 行出现错误:
ORA-00942: 表或视图不存在


SQL> select tablespace_name from user_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
EXAMPLE
TEMPTEST1_TABLESPACE

已选择7行。


SQL> conn system
输入口令:
已连接。
SQL> desc dba_users;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------

 USERNAME                                  NOT NULL VARCHAR2(30)
 USER_ID                                   NOT NULL NUMBER
 PASSWORD                                           VARCHAR2(30)
 ACCOUNT_STATUS                            NOT NULL VARCHAR2(32)
 LOCK_DATE                                          DATE
 EXPIRY_DATE                                        DATE
 DEFAULT_TABLESPACE                        NOT NULL VARCHAR2(30)
 TEMPORARY_TABLESPACE                      NOT NULL VARCHAR2(30)
 CREATED                                   NOT NULL DATE
 PROFILE                                   NOT NULL VARCHAR2(30)
 INITIAL_RSRC_CONSUMER_GROUP                        VARCHAR2(30)
 EXTERNAL_NAME                                      VARCHAR2(4000)
 PASSWORD_VERSIONS                                  VARCHAR2(8)
 EDITIONS_ENABLED                                   VARCHAR2(1)
 AUTHENTICATION_TYPE                                VARCHAR2(8)

SQL> --查看system用户默认表空间和临时表空间
SQL> select default_tablespace,temporary_tablespace from dba_users where usernam
e='SYSTEM';

DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE
------------------------------ ------------------------------
SYSTEM                         TEMP
           
Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
SQL> alter user system
  2  default tablespace system;

用户已更改。

SQL> select default_tablespace,temporary_tablespace from dba_users where usernam
e='SYSTEM';

DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE
------------------------------ ------------------------------
SYSTEM                         TEMP
           
Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
SQL>  create tablespace test1_tablespace
  2   datafile 'test1file.dbf' size 10m;

表空间已创建。

SQL> create temporary tablespace temptest1_tablespace
  2  tempfile 'tempfile1.dbf' size 10m;

表空间已创建。
           

查找表空间的位置

SQL> select file_name from dba_data_files where tablespace_name='TEST1_TABLESPAC
E';

FILE_NAME
--------------------------------------------------------------------------------
--------------------
F:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\TEST1FILE.DBF

SQL> select file_name from dba_temp_files where tablespace_name='TEMPTEST1_TABLE
SPACE';

FILE_NAME
--------------------------------------------------------------------------------
--------------------
F:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\TEMPFILE1.DBF
           
Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
SQL> --修改表空间的状态
SQL> alter tablespace test1_tablespace
  2  offline;

表空间已更改。

SQL> desc dba_tablespaces
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------

 TABLESPACE_NAME                           NOT NULL VARCHAR2(30)
 BLOCK_SIZE                                NOT NULL NUMBER
 INITIAL_EXTENT                                     NUMBER
 NEXT_EXTENT                                        NUMBER
 MIN_EXTENTS                               NOT NULL NUMBER
 MAX_EXTENTS                                        NUMBER
 MAX_SIZE                                           NUMBER
 PCT_INCREASE                                       NUMBER
 MIN_EXTLEN                                         NUMBER
 STATUS                                             VARCHAR2(9)
 CONTENTS                                           VARCHAR2(9)
 LOGGING                                            VARCHAR2(9)
 FORCE_LOGGING                                      VARCHAR2(3)
 EXTENT_MANAGEMENT                                  VARCHAR2(10)
 ALLOCATION_TYPE                                    VARCHAR2(9)
 PLUGGED_IN                                         VARCHAR2(3)
 SEGMENT_SPACE_MANAGEMENT                           VARCHAR2(6)
 DEF_TAB_COMPRESSION                                VARCHAR2(8)
 RETENTION                                          VARCHAR2(11)
 BIGFILE                                            VARCHAR2(3)
 PREDICATE_EVALUATION                               VARCHAR2(7)
 ENCRYPTED                                          VARCHAR2(3)
 COMPRESS_FOR                                       VARCHAR2(12)

SQL> select status from dba_tablespaces where tablespace_name='TEST1_TABLESPACE'
;

STATUS
---------
OFFLINE

SQL> alter tablespace test1_tablespace
  2  online;

表空间已更改。

SQL> select status from dba_tablespaces where tablespace_name='TEST1_TABLESPACE'
;

STATUS
---------
ONLINE
           
Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
SQL> alter tablespace test1_tablespace
  2  read only;

表空间已更改。

SQL> select status from dba_tablespaces where tablespace_name='TEST1_TABLESPACE'
;

STATUS
---------
READ ONLY

SQL> alter tablespace test1_tablespace
  2  read write;

表空间已更改。

SQL> select status from dba_tablespaces where tablespace_name='TEST1_TABLESPACE'
;

STATUS
---------
ONLINE

SQL>
           

修改数据文件

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据

`

SQL> alter tablespace test1_tablespace
  2  add datafile 'test2_file.dbf' size 10m;

表空间已更改。

SQL> select file_name from dba_data_files where tablespace_name='TEST1_TABLESPAC
E';

FILE_NAME
--------------------------------------------------------------------------------

F:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\TEST1FILE.DBF
F:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\TEST2_FILE.DBF
           
Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
SQL> alter tablespace test1_tablespace
  2  drop datafile 'test2_file.dbf';

表空间已更改。

SQL> select file_name from dba_data_files where tablespace_name='TEST1_TABLESPAC
E';

FILE_NAME
--------------------------------------------------------------------------------

F:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\TEST1FILE.DBF
           
Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
SQL> drop tablespace test1_tablespace including contents;

表空间已删除。
           
Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据

数据类型

字符型、数值型、日期型、其他类型(存放大对象数据)

字符型:

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据

以上类型,位数没有填满需要在后面补充空格。

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据

varchar(n)/nvarchar(n):位数没有填满不用补充空格,varchar里的n最大支持4000,nvarchar最大支持2000。

数值型

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据

float(n):用于二进制数据。

日期型

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据

timestamp:比date更精确,精确到秒

其他类型

blob

clob

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据

创建表

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据

修改表

字段操作

添加字段

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
SQL> alter table userinfo
  2  add remarksd varchar2(500);

表已更改。

SQL> desc userinfo
 名称                                      是否为空? 类型
 ----------------------------------------- -------- -------------------------

 ID                                                 NUMBER(6)
 USERNAME                                           VARCHAR2(20)
 USERPWD                                            VARCHAR2(20)
 EMAIL                                              VARCHAR2(30)
 REGDATE                                            DATE
 REMARKSD                                           VARCHAR2(500)
           

更改字段数据类型

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据

注意:如果表中数据已有数据,则表不能修改了。

SQL> alter table userinfo
  2  modify remarksd varchar2(400);

表已更改。

SQL> desc userinfo
 名称                                      是否为空? 类型
 ----------------------------------------- -------- -------------------------

 ID                                                 NUMBER(6)
 USERNAME                                           VARCHAR2(20)
 USERPWD                                            VARCHAR2(20)
 EMAIL                                              VARCHAR2(30)
 REGDATE                                            DATE
 REMARKSD                                           VARCHAR2(400)
           

删除字段

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
SQL> alter table userinfo
  2  drop column remarksd;

表已更改。

SQL> desc userinfo
 名称                                      是否为空? 类型
 ----------------------------------------- -------- -------------------------

 ID                                                 NUMBER(6)
 USERNAME                                           VARCHAR2(20)
 USERPWD                                            VARCHAR2(20)
 EMAIL                                              VARCHAR2(30)
 REGDATE                                            DATE
           

修改字段名

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
SQL> alter table userinfo
  2  rename column email to new_emal;

表已更改。

SQL> desc userinfo
 名称                                      是否为空? 类型
 ----------------------------------------- -------- -------------------------

 ID                                                 NUMBER(6)
 USERNAME                                           VARCHAR2(20)
 USERPWD                                            VARCHAR2(20)
 NEW_EMAL                                           VARCHAR2(30)
 REGDATE                                            DATE
           

修改表名

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据
SQL> rename userinfo to new_userinfo;

表已重命名。

SQL> desc new_userinfo
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------

 ID                                                 NUMBER(6)
 USERNAME                                           VARCHAR2(20)
 USERPWD                                            VARCHAR2(20)
 NEW_EMAIL                                          VARCHAR2(30)
 REGDATE                                            DATE

           

删除表

Truncate Table table_name:删除表中数据,很快。

SQL> truncate table new_userinfo;

表被截断。

SQL> desc new_userinfo
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------

 ID                                                 NUMBER(6)
 USERNAME                                           VARCHAR2(20)
 USERPWD                                            VARCHAR2(20)
 NEW_EMAIL                                          VARCHAR2(30)
 REGDATE                                            DATE
           

Drop Table table_name:删除整张表,较慢。

SQL> drop table new_userinfo;

表已删除。

SQL> desc new_userinfo
ERROR:
ORA-04043: 对象 new_userinfo 不存在
           

操作表数据

添加数据

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据

向表中所有字段添加值

SQL> insert into userinfo
  2  values(1,'xxx','123','[email protected]',sysdate);

已创建 1 行。

SQL> select * from userinfo;

        ID USERNAME             USERPWD
---------- -------------------- --------------------
EMAIL                          REGDATE
------------------------------ --------------
         1 xxx                  123
[email protected]                    06-11月-19
           

向表中指定字段添加值

SQL> insert into userinfo(id,username,userpwd) values(2,'yyy','123');

已创建 1 行。

SQL> select username,userpwd from userinfo;

USERNAME             USERPWD
-------------------- --------------------
xxx                  123
yyy                  123
           

向表中添加默认值

有两种方式:

1.建表时添加默认值 2.建表后添加默认值

建表时添加默认值

SQL> create table userinfo1
  2  ( id number(6,0),
  3  regdate date default sysdate);--建表时添加默认值

表已创建。


SQL> insert into userinfo1(id)
  2  values(1);

已创建 1 行。

SQL> select * from userinfo1;

        ID REGDATE
---------- --------------
         1 06-11月-19
           

建表后添加默认值

SQL> alter table userinfo
  2  modify email default '无';--建表后添加默认值

表已更改。

SQL> insert into userinfo(id)
  2  values(3);

已创建 1 行。

SQL> select id,email from userinfo;

        ID EMAIL
---------- ------------------------------
         1 [email protected]
         2
         3 无

SQL> insert into userinfo(id,email)
  2  values(4,'aaa');

已创建 1 行。

SQL> select id,email from userinfo;

        ID EMAIL
---------- ------------------------------
         1 [email protected]
         2
         3 无
         4 aaa
           

复制表数据

1.建表时复制 2.添加时复制

建表时复制

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据

*全部列复制

SQL>  create table userinfo_new
  2   as
  3   select * from userinfo;

表已创建。
           

*部分列复制

SQL>  create table userinfo_new1
  2   as
  3   select id,username from userinfo;

表已创建。

SQL> select * from userinfo_new1;

        ID USERNAME
---------- --------------------
         1 xxx
         2 yyy
         3
         4
           

在添加时复制

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据

*全部复制

SQL> insert into userinfo_new
  2  select * from userinfo;

已创建4行。

SQL> select id from userinfo_new;

        ID
----------
         1
         2
         3
         4
         1
         2
         3
         4

已选择8行。
           

*部分复制

SQL> insert into userinfo_new(id,
  2  select id,username from user

已创建4行。

SQL> select id,username from
  2  userinfo_new;

        ID USERNAME
---------- --------------------
         1 xxx
         2 yyy
         3
         4
         1 xxx
         2 yyy
         3
         4
         1 xxx
         2 yyy
         3

        ID USERNAME
---------- --------------------
         4

已选择12行。
           

修改数据

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据

注修改的数据需要与源数据类型一致。

无条件更新

SQL> update userinfo
  2  set userpwd='111111';

已更新4行。

SQL> select userpwd from userinfo;

USERPWD
--------------------
111111
111111
111111
111111

SQL> update userinfo
  2  set userpwd='111',email='[email protected]';

已更新4行。

SQL> select userpwd,email from userinfo;

USERPWD              EMAIL
-------------------- ------------------------------
111                  [email protected]
111                  [email protected]
111                  [email protected]
111                  [email protected]
           

有条件更新

SQL> update userinfo
  2  set userpwd='123456'
  3  where username='xxx';

已更新 1 行。

SQL> select username,userpwd from userinfo;

USERNAME             USERPWD
-------------------- --------------------
xxx                  123456
yyy                  111
                     111
                     111
           

删除数据

Oracle之SQL基础 1登入数据库用户操作表空间数据类型创建表修改表操作表数据

chuncate table比delete高效。

全部删除

SQL> create table testdel
  2  as
  3  select * from userinfo;

表已创建。

SQL> delete from testdel;

已删除4行。

SQL> select * from testdel;

未选定行
           

部分删除

SQL> select username from userinfo;

USERNAME
--------------------
xxx
yyy



SQL> delete from userinfo
  2  where username='yyy';

已删除 1 行。

SQL> select username from userinfo;

USERNAME
--------------------
xxx