精华内容
下载资源
问答
  • 创建表
    千次阅读
    2021-01-27 09:10:12

    转至:https://liujianshiwo.iteye.com/blog/1988094

    不同于mysql有多个数据库, oracle新增了表空间和用户的概念,表空间是虚拟的,并且只有一个数据库,为了方便维护,一般一个表空间上只创建一个用户;

    这里的用户名类似于mysql的数据库名,oracle的用户名.表名等价于mysql的数据库名.表名;因此在写兼容mysql和oracle的语句时可以用到。

    oracle安装完数据库的一般流程:先建表空间(分区)–>再建用户(分配相应的表空间和用户权限)–>登陆用户,建表

    1. 创建表空间
      create tablespace xin_datafile
      datafile ‘C:\kingstar\orcltb\xin_tb1.dbf’ size 500M --存储地址 初始大小500M
      autoextend on next 10M maxsize 200M --每次扩展10M,无限制扩展 unlimited
      extent management local autoallocate
      segment space management auto;

    –创建临时表空间
    create temporary tablespace user_temp
    tempfile ‘D:\oracle\oradata\Oracle9i\user_temp.dbf’ size 50m
    autoextend on next 50m maxsize 20480m
    extent management local;

    –删除表空间
    DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;

    –表空间属性

    每块的字节大小:8192

    表空间自增量:increment_by8192 byte ; 换算: increment_by8192/1024/1024 M 或者 increment_by/128M

    注意*:若表空间初始化大小为500M,阀值为1G,自增量为300M,自增一次后的表空间大小为800M,不会受自动扩展容量的限制,最终会扩展为与阀值相等。

    –查询表空间信息

    select * from dba_data_files t order by tablespace_name;

    –建立UNDO表空间

    CREATE UNDO TABLESPACE UNDOTBS02
    DATAFILE ‘/oracle/oradata/db/UNDOTBS02.dbf’ SIZE 50M
    #注意:在OPEN状态下某些时刻只能用一个UNDO表空间,如果要用新建的表空间,必须切换到该表空间:
    ALTER SYSTEM SET undo_tablespace=UNDOTBS02;

    –改变表空间状态

    1.使表空间脱机
    ALTER TABLESPACE game OFFLINE;

    如果是意外删除了数据文件,则必须带有RECOVER选项
    ALTER TABLESPACE game OFFLINE FOR RECOVER;

    2.使表空间联机
    ALTER TABLESPACE game ONLINE;

    3.使数据文件脱机
    ALTER DATABASE DATAFILE 3 OFFLINE;

    4.使数据文件联机
    ALTER DATABASE DATAFILE 3 ONLINE;

    5.使表空间只读
    ALTER TABLESPACE game READ ONLY;

    6.使表空间可读写
    ALTER TABLESPACE game READ WRITE;

    –扩展表空间

    首先查看表空间的名字和所属文件
    select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name;

    1.增加数据文件
    ALTER TABLESPACE game ADD DATAFILE ‘/oracle/oradata/db/GAME02.dbf’ SIZE 1000M;

    2.手动增加数据文件尺寸
    ALTER DATABASE DATAFILE ‘/oracle/oradata/db/GAME.dbf’ RESIZE 4000M;

    3.设定数据文件自动扩展
    ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf AUTOEXTEND ON NEXT 100M MAXSIZE 10000M;

    设定后查看表空间信息
    SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE, (B.BYTES100)/A.BYTES “% USED”,(C.BYTES100)/A.BYTES “% FREE”
    FROM SYS.SM T S A V A I L A , S Y S . S M TS_AVAIL A,SYS.SM TSAVAILA,SYS.SMTS_USED B,SYS.SM$TS_FREE C WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE

    2.创建用户

    create user test identified by test

    default tablespace SIRM2

    temporary tablespace TEMP
    profile DEFAULT;

    –创建用户并指定表空间
    create user username identified by password
    default tablespace user_data
    temporary tablespace user_temp;

    –删除用户命令
    drop user user_name cascade;

    3.授权

    grant dba to test;
    grant connect to test;
    grant resource to test;

    –给用户授予权限
    grant connect,resource to username;
    撤权:
    revoke 权限… from 用户名;

    1. SYS用户在CMD下以DBA身份登陆:
      在CMD中打sqlplus /nolog
      然后再 conn / as sysdba

    附加1:

    oarcle数据库真正存放数据的是数据文件(data files),Oarcle表空间(tablespaces)实际上是一个逻辑的概念,他在物理上是并不存在的,那么把一组data files 捻在一起就成为一个表空间。(https://www.cnblogs.com/fnng/archive/2012/08/12/2634485.html)

    表空间属性:

    一个数据库可以包含多个表空间,一个表空间只能属于一个数据库

    一个表空间包含多个数据文件,一个数据文件只能属于一个表空间

    表这空间可以划分成更细的逻辑存储单元

    Oracle数据库的存储结构:

    从逻辑的角度来看,一个数据库(database)下面可以分多个表空间(tablespace);一个表空间下面又可以分多个段(segment);一个数据表要占一个段(segment),一个索引也要占一个段(segment )。 一个段(segment)由多个 区间(extent)组成,那么一个区间又由一组连续的数据块(data block)组成。这连续的数据块是在逻辑上是连续的,有可能在物理磁盘上是分散。

    那么从物理的角度上看,一个表空间由多个数据文件组成,数据文件是实实在在存在的磁盘上的文件。这些文件是由oracle数据库操作系统的block 组成的。

    Segment(段) :段是指占用数据文件空间的通称,或数据库对象使用的空间的集合;段可以有表段、索引段、回滚段、临时段和高速缓存段等。

    Extent (区间):分配给对象(如表)的任何连续块叫区间;区间也叫扩展,因为当它用完已经分配的区间后,再有新的记录插入就必须在分配新的区间(即扩展一些块);一旦区间分配给某个对象(表、索引及簇),则该区间就不能再分配给其它的对象.

    附加2:oracle 表空间创建 格式及属性说明:http://blog.sina.com.cn/s/blog_3cae66560102w0vk.html

    一、创建表空间完整的格式

    CREATE [UNDO|TEMPORARY] TABLESPACE tablespace_name

     DATAFILE 'path/filename' [SIZE INTEGER[K| M]]  [REUSE] 
    
     [AUTOEXTEND [OFF | ON ] ]
    
     [NEXT INTEGER[K | M]]
    
     [MAXSIZE [UNLIMITED | INTEGER[K | M]]]
    
     [MINIMUM EXTENT INTEGER[K | M]]
    
     [BLOCKSIZE integer [k]]
    
     [DEFAULT STORAGE storage_clause]
    
     [ONLINE | OFFLINE]
    
     [LOGGING | NOLOGGING]
    
     [FORCE LOGGING]
    
     [EXTENT MANAGEMENT [DICTIONARY | LOCAL]]
    
     [AUTOALLOCATE | UNIFORM [SIZE INTEGER[K | M]]]
    
     [SEGMENT SPACE MANAGEMENT [AUTO | MANUAL]]
    

    二、表空间格式说明

    1、UNDO

      说明系统将创建一个回滚表空间。
    
       在9i中数据库管理员可以不必管理回滚段,只有建立了undo表空间,系统就会自动管理回滚段的分配,回收的工作。当然,也可以创建一般的表空间,在上         面创建回滚段.不过对于用户来说,系统管理比自己管理要好很多.如果需要自己管理,请参见回滚段管理的命令详解.
    
       当没有为系统指定回滚表空间时,系统将使用system系统回滚段来进行事务管理。
    

    2、tablespace_name表空间名满足oracle的命名规范即可。

    3、DATAFILE ‘path/filename’ [SIZE INTEGER[K| M]] [REUSE]

      指定一个或多个数据文件路径和文件名,[SIZE INTEGER[K| M]]用来指定表空间在数据文件中所占的空间大小,K|M是说大小的单位是K还是M。
    
      [REUSE] 如果创建表空间指定的数据文件已经存在,则需要使用reuse注明,否则会报错。
    
      ERROR at line 1:
    

    ORA-01537: cannot add data file ‘E:\oracle\oradata\10.1.0\ZRPTEST\TB_TEST1.dbf’

    • file already part of database

    4、[AUTOEXTEND [OFF | ON ] ]

      禁止或允许自动扩展数据文件,默认情况下为OFF
    

    5、[NEXT INTEGER[K | M]]

      指定当需要更多盘区时分配给数据文件的磁盘空间,以K或M为单位。
    

    6、[MAXSIZE [UNLIMITED | INTEGER[K | M]]]

      指定允许分配给数据文件的最大磁盘空间,当为UNLIMITED时表示只有当磁盘空间满时,才不允许再扩展数据文件。
    

    7、[MINMUM EXTENT INTEGER[K | M]]

      指定盘区大小是指定大小的整数倍。即initial和next盘区大小应为minimum extent的整数倍,这个参数可以减小空间碎片,保证表空间的范围是这个值的整数倍。
    
      【注:minextents 用于指定在创建时分配给段的盘区总数。使用这个参数,即使可用空间是不连续的,在创建对象时也能分配很大的空间。默认                    值和最小值都是1。如果minextents>1,盘区大小以next和pctincrease为基础计算。】
    

    8、[BLOCKSIZE integer [k]]

        这个参数可以设定一个不标准的块的大小。如果要设置这个参数,必须设置db_block_size,至少一个db_nk_block_size,
    
        并且声明的integer的值必须等于db_nk_block_size.
    
       注意:在临时表空间不能设置这个参数。
    

    9、 [DEFAULT STORAGE storage_clause]

       表示为在该表空间创建的全部对象指定缺省的存储参数,没有指定时oracle将会为所有对象指定一些系统默认的存储参数。
    
       storage_clause的语法格式如下:
    
       STORAGE(
    
            INITIAL integer[K|M]       --为段分配第一个区的大小
    
            NEXT     integer[K|M]       --为第一个扩展分区的大小
    
            MINEXTENTS integer|UMLIMITED      --创建段时分配的最小总区间数
    
            MAXEXTENTS integer|UMLIMITED     --创建段时分配的最大总区间数
    
            PCTINCREASE integer                           --每次扩展增量的大小
    
            FREELISTS integer                                  --模式对象中每一个自由列表组中自由列表的数量,表、族或索引的每个空闲列表组中的列表数量。
    
            FREELISTS GROUPS integer                  --指定表、族或索引的每个空闲列表组数量。
    
         )
    

    10、[ONLINE | OFFLINE]

      ONLINE是指在创建表空间之后使该表空间立即对授权访问该表空间的用户可用。
    
      OFFLINE是指offline以后,未完成的事物可以提交或回滚,但不能发起新的事物,也不能进行查询。OFFLINE的四种模式
    
       (1)NORMAL:做检查点 
    
                 alter tablespace users  offline;           alter tablespace users online;
    
       (2)TEMPORARY:可以在数据文件损坏的情况下offline tablespace
    
                 alter tablespace users offline temporary;   alter tablespace users online;
    
       (3)IMMEDIATE:不做检查点,只有在归档模式下才可以offline tablespace,online时需要recover
    
                 alter tablespace users offline immediate;    recover tablespace users;       alter tablespace users online;
    
        (4)FOR RECOVER:在归档模式下才可以offonline,在基
    

    11、[LOGGING | NOLOGGING]

      指定日志属性,它表示将来的表、索引等是否需要进行日志处理。默认值为LOGGING
    

    12、[FORCE LOGGING]

       使用这个子句指出表空间进入强制日志模式。此时,系统将记录表空间上对象的所有改变,除了临时段的改变。这个参数高于对象的nologging选项。
    
       注意:设置这个参数指数据库不可以open并且进入读写模式。而且,在临时表空间和回滚表空间中不能使用这个选项。
    

    13、[PERMANENT | TEMPORARY]

       指出表空间的属性,是永久表空间还是临时表空间。永久表空间存放的是永久对象,临时表空间存放的是session生命期中存在的临时对象。
    
       这个参数生成的临时表空间创建后一直都是字典管理,不能使用extent management local选项。
    
       如果要创建本地管理表空间,必须使用create temporary tablespace
    
       注意,声明了这个参数后,不能声明block size
    

    14、[EXTENT MANAGEMENT [DICTIONARY | LOCAL]]

        [AUTOALLOCATE | UNIFORM [SIZE INTEGER[K | M]]]
    
        这是最重要的子句,说明了表空间如何管理范围。一旦你声明了这个子句,只能通过移植的方式改变这些参数。
    
        如果希望表空间本地管理的话,声明local选项。本地管理表空间是通过位图管理的。autoallocate说明表空间自动分配范围,用户不能指定范围的大小。
    
        只有9.0以上的版本具有这个功能。uniform说明表空间的范围的固定大小,缺省是1m。
    
         不能将本地管理的数据库的system表空间设置成字典管理。oracle公司推荐使用本地管理表空间。
    
         如果没有设置extent_management_clause,oracle会给他设置一个默认值。如果初始化参数compatible小于9.0.0,那么系统创建字典管理表空间。
    
          如果大于9.0.0,那么按照如下设置:如果没有指定default storage_clause,oracle创建一个自动分配的本地管理表空间。
    
         否则,如果指定了mininum extent,那么oracle判断mininum extent 、initial、next是否相等,以及pctincrease是否=0.如果满足以上的条件,oracle创建一个本地管理
    
          表空间,extent size是initial.如果不满足以上条件,那么oracle将创建一个自动分配的本地管理表空间。
    
          如果没有指定mininum extent。initial、那么oracle判断next是否相等,以及pctincrease是否=0。表示满足oracle创建一个本地管理表空间并指定uniform。
    
           否则oracle将创建一个自动分配的本地管理表空间。
    
          注意:本地管理表空间只能存储永久对象。如果你声明了local,将不能声明default storage_clause,mininum extent、temporary.
    

    15、[SEGMENT SPACE MANAGEMENT [AUTO | MANUAL]]

       指定 表空间段的管理方式,AUTO为系统自动管理,MANUAL为手工管理。默认为AUTO。
    

    附加3:Oracle中分区表中表空间属性:https://blog.51cto.com/hbxztc/1929585

    更多相关内容
  • 细说 MySQL 创建表的三种方法

    千次阅读 多人点赞 2021-08-15 21:38:02
    MySQL 则实现了三种创建表的方法,支持自定义表结构或者通过复制已有的表结构(CREATE TABLE ... LIKE 以及 CREATE TABLE ... SELECT)来创建新表,本文给大家分别介绍一下这些方法的使用和注意事项。

    大家好!我是只谈技术不剪发的 Tony 老师。

    SQL 标准使用 CREATE TABLE 语句创建数据表;MySQL 则实现了三种创建表的方法,支持自定义表结构或者通过复制已有的表结构来创建新表,本文给大家分别介绍一下这些方法的使用和注意事项。

    如果你觉得文章有用,欢迎评论📝、点赞👍、推荐🎁

    CREATE TABLE

    CREATE TABLE 语句的基本语法如下:

    CREATE TABLE [IF NOT EXISTS] table_name
    (
      column1 data_type column_constraint,
      column2 data_type,
      ...,
      table_constraint
    );
    

    使用该语句时,我们需要手动定义表的结构。以上包含的内容如下:

    • IF NOT EXISTS 表示当该表不存在时创建表,当表已经存在时不执行该语句。
    • table_name 指定了表的名称。
    • 括号内是字段的定义;columnN 是字段的名称,data_type 是它的数据类型;column_constraint 是可选的字段约束;多个字段使用逗号进行分隔。
    • table_constraint 是可选的表级约束。

    其中,常见的约束包括主键、外键、唯一、非空、检查约束以及默认值。

    举例来说,以下语句用于创建一个新表 department:

    CREATE TABLE department
        ( dept_id    INTEGER NOT NULL PRIMARY KEY
        , dept_name  VARCHAR(50) NOT NULL
        ) ;
    

    部门表 department 包含两个字段,部门编号(dept_id)是一个整数类型(INTEGER),不可以为空(NOT NULL),同时它还是这个表的主键(PRIMARY KEY)。部门名称(dept_name)是一个可变长度的字符串,最长 50 个字符,不允许为空。

    如果我们想要创建一个自定义名称的主键约束,可以使用表级约束:

    CREATE TABLE department
        ( dept_id    INTEGER NOT NULL
        , dept_name  VARCHAR(50) NOT NULL
        , CONSTRAINT pk_department PRIMARY KEY (dept_id)
        ) ;
    

    表级约束在所有字段之后定义,其中 pk_dept 是自定义的主键名称。

    对于数字类型的主键字段,我们可以通过自增长列(auto increment)自动生成一个唯一的数字。例如:

    CREATE TABLE department
        ( dept_id    INTEGER AUTO_INCREMENT PRIMARY KEY
        , dept_name  VARCHAR(50) NOT NULL
        ) ;
    

    此时,我们在插入数据时不再需要为 dept_id 字段提供数据,MySQL 默认会产生一个从 1 开始,每次递增 1 的数字序列。

    然后我们再创建两个表:

    CREATE TABLE job
        ( job_id         INTEGER NOT NULL PRIMARY KEY
        , job_title      VARCHAR(50) NOT NULL
        ) ;
        
    CREATE TABLE employee
        ( emp_id    INTEGER NOT NULL PRIMARY KEY
        , emp_name  VARCHAR(50) NOT NULL
        , sex       VARCHAR(10) NOT NULL
        , dept_id   INTEGER NOT NULL
        , manager   INTEGER
        , hire_date DATE NOT NULL
        , job_id    INTEGER NOT NULL
        , salary    NUMERIC(8,2) NOT NULL
        , bonus     NUMERIC(8,2)
        , email     VARCHAR(100) NOT NULL
        , CONSTRAINT ck_emp_sex CHECK (sex IN ('男', '女'))
        , CONSTRAINT ck_emp_salary CHECK (salary > 0)
        , CONSTRAINT uk_emp_email UNIQUE (email)
        , CONSTRAINT fk_emp_dept FOREIGN KEY (dept_id) REFERENCES department(dept_id)
        , CONSTRAINT fk_emp_job FOREIGN KEY (job_id) REFERENCES job(job_id)
        , CONSTRAINT fk_emp_manager FOREIGN KEY (manager) REFERENCES employee(emp_id)
        ) ;
    

    job 表用于存储职位信息,和部门表相似,比较简单。

    employee 表用于存储员工信息,包含的字段和约束如下:

    • 员工编号(emp_id)是一个整数类型(INTEGER),不可以为空(NOT NULL),同时它还是这个表的主键(PRIMARY KEY)。
    • 员工姓名(emp_name)是一个可变长度的字符串,最长 50 个字符,不允许为空。
    • 性别(sex)是一个可变长度的字符串,最长 10 个字符,不允许为空;另外,我们通过表级约束 ck_emp_sex 限制了性别的取值只能为“男”或者“女”。
    • 部门编号(dept_id)代表了员工所在的部门,因此通过外键约束 fk_emp_dept 引用了部门表的主键字段。
    • 经理编号(manager)代表了员工的直接上级,可能为空。外键约束 fk_emp_manager 表示经理也属于员工。
    • 入职日期(hire_date)是一个 DATE 类型的字段,不能为空。
    • 职位编号(job_id)代表了员工的职位,因此通过外键 fk_emp_job 引用了职位表的主键字段。
    • 月薪(salary)是一个支持两位小数的数字,不能为空。检查约束 ck_emp_salary 要求月薪必须大于零。
    • 奖金(bonus)是一个可选的数字字段。
    • 电子邮箱(email)是一个可变长度的字符串,最长100 个字符,不允许为空。检查约束 uk_emp_email 要求每个员工的电子邮箱都不相同。

    CREATE TABLE … LIKE

    除了手动定义表的结构之外,MySQL 还提供了复制已有表结构的方法:

    CREATE TABLE [IF NOT EXISTS] table_name
        { LIKE old_tbl_name | (LIKE old_tbl_name) }
    

    MySQL 的 LIKE 语法只复制表结构,包括字段的属性和索引,但是不复制数据。例如:

    CREATE TABLE emp_copy
      LIKE employee;
    

    以上语句基于 employee 表的结构复制生成一个新的表 emp_copy。

    mysql> show create table emp_copy \G
    *************************** 1. row ***************************
           Table: emp_copy
    Create Table: CREATE TABLE `emp_copy` (
      `emp_id` int NOT NULL,
      `emp_name` varchar(50) NOT NULL,
      `sex` varchar(10) NOT NULL,
      `dept_id` int NOT NULL,
      `manager` int DEFAULT NULL,
      `hire_date` date NOT NULL,
      `job_id` int NOT NULL,
      `salary` decimal(8,2) NOT NULL,
      `bonus` decimal(8,2) DEFAULT NULL,
      `email` varchar(100) NOT NULL,
      PRIMARY KEY (`emp_id`),
      UNIQUE KEY `uk_emp_email` (`email`),
      KEY `fk_emp_dept` (`dept_id`),
      KEY `fk_emp_job` (`job_id`),
      KEY `fk_emp_manager` (`manager`),
      CONSTRAINT `emp_copy_chk_1` CHECK ((`salary` > 0)),
      CONSTRAINT `emp_copy_chk_2` CHECK ((`sex` in (_utf8mb4'男',_utf8mb4'女')))
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
    1 row in set (0.01 sec)
    

    对于 CREATE TABLE … LIKE 命令,目标表会保留原始表中的主键、唯一约束、非空约束、表达式默认值、检查约束(自动生成约束名),同时还会保留原始表中的计算列定义。

    CREATE TABLE … LIKE 命令不会保留外键约束(但是会保留外键索引),以及任何 DATA DIRECTORY 或者 INDEX DIRECTORY 表属性选项。

    如果原始表是一个 TEMPORARY 表,CREATE TABLE … LIKE 不会保留 TEMPORARY 关键字。如果想要创建一个临时表,可以使用 CREATE TEMPORARY TABLE … LIKE。

    使用 mysql 表空间、InnoDB 系统表空间(innodb_system)或者通用表空间创建的表包含一个 TABLESPACE 属性,表示该表所在的表空间。目前,无论 innodb_file_per_table 设置为什么参数,CREATE TABLE … LIKE 都会保留 TABLESPACE 属性。为了避免复制新表时使用原始表的 TABLESPACE 属性,可以使用下面介绍的第三种方法。例如:

    CREATE TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;
    

    以上语句会基于 orig_tbl 创建一个新的空表 new_tbl,具体参考下一节内容。

    CREATE TABLE … LIKE 使用原始表的所有 ENGINE_ATTRIBUTE 和 SECONDARY_ENGINE_ATTRIBUTE 值创建目标表。

    另外,LIKE 只能基于表进行复制,而不能复制视图。

    CREATE TABLE … SELECT

    在 MySQL 中复制表结构的另一种方法就是利用查询语句的结果定义字段和复制的数据:

    CREATE TABLE table_name
      [AS] SELECT ...;
    

    其中的 SELECT 语句定义了新表的结构和数据。以下示例基于查询的结果创建了一个新表:emp_devp,表中包含了研发部的所有员工。

    CREATE TABLE emp_devp
        AS
    SELECT e.*
      FROM employee e
      JOIN department d
        ON (d.dept_id = e.dept_id AND d.dept_name = '研发部');
    

    对于这种语法,MySQL 实际上是在已有目标表中增加新的字段。例如:

    CREATE TABLE t1(col1 INTEGER, col2 INTEGER);
    INSERT INTO t1(col1, col2) VALUES(1, 1), (2, 4);
    
    CREATE TABLE t2(id INTEGER AUTO_INCREMENT PRIMARY KEY)
           ENGINE=InnoDB
        AS SELECT col1, col2 FROM t1;
    

    我们首先为 t2 指定了一个自增 id,然后将 t1 的查询结果添加到该字段的后面。其中,ENGINE 选项属于 CREATE TABLE 语句,因此需要位于 SELECT 语句之前。

    查询 t2 可以看到以上语句不仅复制了表结构,同时还复制了 t1 中的数据:

    TABLE t2;
    
    +----+------+------+
    | id | col1 | col2 |
    +----+------+------+
    |  1 |    1 |    1 |
    |  2 |    2 |    4 |
    +----+------+------+
    2 rows in set (0.00 sec)
    

    如果只想复制结构,不需要复制数据,可以在查询语句中增加 LIMIT 0 或者 WHERE 1=0 条件。

    如果在 SELECT 语句前面增加 IGNORE 或者 REPLACE 关键字,可以处理复制数据时导致唯一键冲突的数据行。对于 IGNORE,源数据中和目标表重复的数据行就会被丢弃;对于 REPLACE,使用新数据行替换目标表中的已有数据行。如果没有指定任何选项,唯一键冲突将会返回错误。

    CREATE TABLE … SELECT 命令不会自动创建任何索引,这样可以使得该语句尽量灵活。如果想要创建索引,可以在 SELECT 语句之前指定。例如:

    CREATE TABLE t3(id INTEGER PRIMARY KEY)
    AS SELECT col1 as id, col2 FROM t1;
    

    CREATE TABLE … SELECT 命令不会保留计算列的定义,也不会保留默认值定义。同时某些数据类型可能产生转换。例如,AUTO_INCREMENT 属性不会被保留,VARCHAR 类型被转换为 CHAR 类型。保留的属性包括 NULL(NOT NULL)以及 CHARACTER SET、COLLATION、COMMENT 和 DEFAULT 子句。

    使用 CREATE TABLE … SELECT 命令创建表时,需要为查询语句中的函数和表达式指定一个别名,否则该命令可能失败或者创建意料之外的字段名:

    CREATE TABLE artists_and_works
    SELECT artist.name, COUNT(work.artist_id) AS number_of_works
    FROM artist LEFT JOIN work ON artist.id = work.artist_id
    GROUP BY artist.id;
    

    对于 CREATE TABLE … SELECT 命令,如果我们指定了 IF NOT EXISTS 并且目标表已经存在,不会将数据复制到目标表,同时该语句不会写入日志文件。

    CREATE TABLE … SELECT 命令不支持 FOR UPDATE 选项。

    CREATE TABLE … SELECT 命令只会应用字段的 ENGINE_ATTRIBUTE 和 SECONDARY_ENGINE_ATTRIBUTE 属性。表和索引的 ENGINE_ATTRIBUTE 和 SECONDARY_ENGINE_ATTRIBUTE 属性不会被应用,除非为目标表明确指定这些选项。

    总结

    本文通过一些案例介绍了 MySQL 中三种创建表的方法和注意事项。

    如果你想要了解更多 MySQL 入门知识,可以参考这篇文章

    展开全文
  • 数据库创建表

    千次阅读 2022-04-18 16:55:43
    数据库创建表: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术:HTML CSS JavaScript 作者:蒋燕 撰写时间:2022/04/17 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.创建数据库表的时候,...

    数据库创建表:

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    开发工具与关键技术:HTML CSS JavaScript

    作者:蒋燕

    撰写时间:2022/04/17

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    1.创建数据库表的时候,在SQL Server数据库中登录找到数据库然后右键:附加数据库,然后把数据库的名称写上,然后点击确定:

    2.创建好之后右键刷新,找到自己创建的表,双击打开: 

     

    3.找到第二个表右键,点击新建再选择表:

    4.列名是要写的表内容的名称,数据类型根据列名选择相对应的列名,如果表中是有ID的话数据类型使用int,允许null值就不能为空:

     

    ID旁边右键选择第一个设置主键,类型改为int,设置主键之后允许null值就会自动把√去掉:

    5在列属性中找到表设计器,在标识规范会显示标识为否:

     

     

    6.然后在左边的向下的标志点开把标识改为是就即可:

    其他表的类型就用nvarchar(max)就可以了:

     

     

    表写完之后Ctrl+S保存。

    展开全文
  • MySQL索引篇,创建表时创建索引

    千次阅读 2021-01-27 02:34:24
    索引对于MySQL数据库查询速度具有无可取代的作用,一个合适的索引能给数据查询的效率带来巨大的提升,本文来给大家讲讲如何创建索引,索引的最佳创建方式是在建表的时候就确定好要索引的字段并建立好索引。...

    索引对于MySQL数据库查询速度具有无可取代的作用,一个合适的索引能给数据查询的效率带来巨大的提升,本文来给大家讲讲如何创建索引,索引的最佳创建方式是在建表的时候就确定好要索引的字段并建立好索引。

    212e6cded9577e33adb758bd70310513.png

    索引的类型

    我们来回顾一下前文讲到的索引的类型,有以下几种:

    1.普通索引(Normal):基本索引类型,允许在定义索引的列里插入空值或重复值。

    2.唯一索引(Unique):索引列值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。主键索引是一种特殊的唯一索引,不允许有空值

    3.单列索引:只包含一个列的索引,一个表中可以有多个

    4.组合索引:包含多个列的索引,查询条件包含这些列的最左边的字段的时候,索引就会被引用,遵循最左缀原则

    5.全文索引(Full Text):在定义的值中支持全文查找,允许空值和重复值,可以在CHAR,VARCHAR或者TEXT字段类型上创建,仅支持MyISAM存储引擎

    6.空间索引:针对空间数据做的索引,支持的数据类型有4种,分别是GEOMETRY,POINT,LINESTRING和POLYGON。创建空间索引的列必须声明为非空值(NOT NULL),仅支持MyISAM存储引擎

    创建普通索引

    # 1.创建普通索引示例

    CREATE TABLE test_1 (

    id INT NOT NULL,

    num INT NOT NULL,

    test_name VARCHAR (50) NOT NULL,

    INDEX (num) #此处为创建普通索引的命令行

    );

    bf0b878910f75b576fbf84319a95360c.png创建表语句运行结果

    # 2.接下来我们可以使用以下命令查看刚创建的表的结构

    SHOW CREATE TABLE test_1;

    7780eb722310cba1bfbab0581dfbf82d.png命令语句查询结果

    # 3.还可以使用MySQL的可是话管理工具查看数据表的索引,本猿使用的是Navicat

    85d83c5204f2789705bc65a1a57124a9.pngnavicat查看所索引

    # 4.接下来我们往表中插入两条数据来用于查看索引是否起到效果(注意一定要两条数据以上才起作用)

    c0f50e7858bde4e476ebde681e640052.png测试数据

    # 5.插入完数据后使用EXPLAIN命令查看索引是否起作用

    EXPLAIN SELECT * FROM test_1 WHERE num=1;

    f3b44607bf271ccf89f8fb75c217e958.png查询结果

    查询结果的字段详解

    select_type:查询类型,可能的值:SIMPLE,PRIMARY,UNION,SUNQUERY等table:表名,按被读取的先后顺序查询type:与其他表的关系,可能的值:system,const,eq_ref,ref,range,index和Allpossible_key:搜索记录可选用的各个索引key:实际选用的索引key_len:索引按字节计算的长度,ref:行给出关联关系中另一个数据表里的数据列的名称rows:预计读出的行数extra:与关联操作相关的信息创建唯一索引

    # 1.创建唯一索引示例

    CREATE TABLE test_2 (

    id INT NOT NULL,

    num INT NOT NULL,

    test_name VARCHAR (50) NOT NULL,

    UNIQUE INDEX UniqIdx (id) #这里是创建唯一索引的命令行

    );

    8f8be194bf836baed46d114b78a5a351.png创建表语句运行结果

    # 2.查看创建的表的表结构

    SHOW CREATE TABLE test_2;

    0909cfcc885942af63ac9a5afaf98a15.png命令语句查询结果

    # 3.使用Navicat查看创建的索引

    0d061608a5de0ba1f2d99ae9920ccde8.pngNavicat查看索引

    创建单列索引

    # 1.创建单列索引

    CREATE TABLE test_3 (

    id INT NOT NULL,

    num INT NOT NULL,

    test_name VARCHAR (50) NOT NULL,

    INDEX SingleIdx (id) # 这里是创建索引的命令行

    );

    3011c3aed584fcdb9964e8c5ba5b9867.png创建表语句运行结果

    # 2.查看创建的表的表结构

    SHOW CREATE TABLE test_3;

    296a268986ea4fbea54e8ac0b405fcef.png命令行查询结果

    # 3.使用Navicat查看创建的索引

    baf7c876945f4875da1dfe22d23b0cc4.pngNavicat查看索引

    其他创建表时创建索引的关键命令行

    # 1.组合索引

    INDEX MultiIdx (列名1, 列名2,...)

    # 2.全文索引(注意仅适用于MyISAM存储引擎)

    FULLTEXT INDEX 索引名(列名)

    # 3.空间索引(注意仅适用于MyISAM存储引擎)

    SPATIAL key 索引名(列名)

    此处就不举例子说明了,大家可以自己尝试一下创建索引的命令。

    展开全文
  • Python MySQL创建表

    千次阅读 2021-11-20 21:36:13
    一、创建表 二、检查表是否存在 三、关键字
  • 怎么在MySQL创建表

    千次阅读 2021-03-15 21:16:13
    想要创建一个,你必须先有一个存储的数据库。你可以在MySQL命令行键入 USE 库名,打开数据库。如果你不记得数据库的名称,可以键入 SHOW DATABASES;,在MySQL服务器上显示所有数据库。如果你还未创建数据库,...
  • Oracle 创建表空间

    千次阅读 2022-02-11 10:30:47
    ----创建表空间并定义路径 create tablespace nacos --表空间名 datafile 'D:/app/Administrator/oradata/nacos/nacos.dbf' size 500m --大小初始值 autoextend on --自动扩展 next 50m maxsize 20480m --每次扩展50...
  • SQL创建表

    千次阅读 2021-04-28 15:28:41
    在SQL数据库中如何创建表 —步骤图如下所示— 登录数据库后–找到名为数据库的文件夹进行右击展开,展开后第一个就是创建新数据库 点击后图上图中间区域所示: 1.给数据库添加名称 2.点击确认在左侧区域刷新下,在...
  • oracle创建表+注释

    千次阅读 2021-05-01 06:21:35
    建表的时候为了以后查询方便,也为了减少数据库文档的编写,建表最好加上的注释和列的注释建表语句:CREATE table "TABLE_COUNT"("TABLE_NAME" varchar2(40 char) not null enable,"COUNT" varchar2(40 char) not ...
  • MySQL创建表

    千次阅读 2021-01-18 21:25:16
    Query OK, 0 rows affected (0.03 sec) sno varchar(9) primary key/*列级完整性约束条件sno是主码*/ 二、创建课程course: mysql> create table course -> (cno varchar(4) primary key, -> cname varchar(40), ...
  • hive创建表(内部表和外部表)

    千次阅读 2021-01-24 22:40:43
    案例实操 (1)普通创建表 create table if not exists student2( id int, name string ) row format delimited fields terminated by '\t' stored as textfile location '/user/hive/warehouse/student2';...
  • 使用SQLyog创建表

    千次阅读 2021-05-18 08:07:30
    使用SQLyog创建表 一,打开SQLyog UItimate 64,鼠标指针移到@localhost右键,创建数据库 依次输入数据库名称,基字符集,数据库排序规则 基字符集选择utf8mb4,这是Java8默认字符集,以后尽量都使用默认的吧 ...
  • SQL Server创建表

    千次阅读 2021-11-19 12:53:09
    SQL Server创建表
  • mysql创建表时设置外键约束的方法

    千次阅读 2021-01-18 19:18:26
    mysql创建表时设置外键约束的方法发布时间:2020-06-17 15:54:11来源:亿速云阅读:312作者:元一MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就...
  • SQL Server语句创建表

    万次阅读 2022-03-20 14:35:40
    今天介绍一下如何使用SQL Server语句创建表并添加数据 首先先了解一下表的模式,在数据库中根据模式进行分组避免表名称的冲突 在SQL Server 2014中直接新建表是默认的前缀dbo 而命名其他的模式需要使用SQL Server...
  • MySQL之创建表的基本操作

    万次阅读 2021-07-26 15:14:06
    前面我分享了关于数据库的基本操作,例如创建和删除等,接下来分享如何在一个数据库中创建表 1、创建一个具有id、name、salary字段的表 create table tb_tmp01 ( id INT(11), name VARCHAR(25), deptId INT(11), ...
  • Spark SQL创建表的例子

    千次阅读 2022-04-20 18:23:01
    create table if not exists orders ( id int COMMENT 'order id' ,name string COMMENT 'user name' ) comment 'Demo: Hive Partitioned Parquet Table with Partition' ...stored as PARQUET
  • 用 SELECT 的结果创建表

    千次阅读 2021-01-19 22:14:57
    用 SELECT 的结果创建表关系数据库的一个重要概念是,任何数据都表示为行和列组成的表,而每条 SELECT 语句的结果也都是一个行和列组成的表。在许多情况下,来自 SELECT 的“表”仅是一个随着您的工作在显示屏上滚动...
  • mysql如何创建表

    万次阅读 2021-01-18 18:16:59
    在mysql中,可以使用“CREATE TABLE”语句创建表;其语法格式为“CREATE TABLE ([表定义选项])[表选项][分区选项];”,其中“[表定义选项]”的格式为“ [,…] ”。创建数据表的过程是规定数据列的属性的过程,同时也...
  • mysql 创建表 指定字符集

    千次阅读 2021-01-19 12:33:34
    把现在的表导出来,然后把所有的 DEFAULT CHARSET=utf8之类的语句改成DEFAULT CHARSET=gbk,再运行,就行了 mysql 创建表: mysql> create table user( -> userid int(4) primary key not null auto_increment, ...
  • 在数据库中创建表

    万次阅读 多人点赞 2021-06-28 15:21:14
    在数据库中创建表 数据库文件的创建 点击数据库右键选择新建数据库 点击新建数据库 就会出现下面的弹出框 就可以添加到一个新的数据库文件 比如数据是存储一个表。 就要新建一个表来存储数据。新建表的...
  • mysql 创建表并设置主键自增

    千次阅读 2021-02-07 07:50:40
    mysql 创建表并设置主键自增mysql 创建表:mysql> create table user(-> userid int(4) primary key not null auto_increment,-> username varchar(16) not null,-> userpassword varchar(32) not null-...
  • 达梦数据库创建表空间和用户

    千次阅读 2020-09-28 15:38:36
    达梦数据库默认使用SYSDBA用户和默认表空间...1、创建表空间 创建表空间的语法: CREATE TABLESPACE <表空间名> <数据文件子句>[<数据页缓冲池子句>][<存储加密子句>] <数据文件子句> :
  • Java如何在数据库中创建表

    千次阅读 2021-03-23 15:49:13
    在此示例中,您可以看到如何在MySQL数据库中创建表。我们创建了一个称为表books具有以下字段,isbn,title,published_year和price。我们首先创建与数据库的连接,然后执行创建表查询。packageorg.nhooo.example....
  • 达梦数据库之创建表空间和用户

    千次阅读 2020-09-26 21:53:37
    创建表空间 达梦数据库创建表空间的语法是 CREATE TABLESPACE <表空间名> <数据文件子句>[<数据页缓冲池子句>][<存储加密子句>] <数据文件子句> ::= DATAFILE <文件说明项>{,&...
  • 创建表空间

    千次阅读 2018-04-15 11:15:23
    (四)、创建表空间1. 创建表空间要考虑的因素创建数据库完毕~ 创建所需的 非system表空间 ~创建表空间 ~ 空间数量 、对应数据文件大小 ~ 表空间存储管理方式、默认存储参数、块大小oracle本身 ~ 不限制表空间...
  • Oracle 创建表详解(create table)

    万次阅读 2021-09-22 10:14:26
    1 概述2 语法2.1 创建表 create table2.2 修改表 alter table2.3 删除表 drop table2.4 清空表 truncate table2.5 查询表、列、备注信息 3 扩展3.1 Oracle 范式详解(3NF)3.2 Oracle 约束详解(constraints) ...
  • 数据库之创建表

    万次阅读 2020-04-09 12:45:38
    一....定义子句>|<视图定义子句>|<授权定义子句>] 2.举例: 为用户WANG定义一个学生-课程模式S-T CREATE SCHEMA “S-T” AUTHORIZATION WANG; 注意:上面是sqlserver数据库,而...
  • sql server基础语法 创建数据库 创建表

    千次阅读 多人点赞 2019-03-23 23:18:08
    sql server基础语法 创建数据库 创建表1.创建数据库2.表的创建3.在现有表中添加标识列4.创建外键5.添加外键6.约束7.创建局部临时表8.创建全局临时表9.创建具有check约束字段的数据库表10.创建含有计算字段的数据库表...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,301,942
精华内容 1,320,776
关键字:

创建表

友情链接: lofar.zip