精华内容
下载资源
问答
  • 2021-01-19 19:20:19

    在创建数据库之后,接下来就要在数据库中创建数据表。所谓创建数据表,指的是在已经创建的数据库中建立新表。

    创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性)约束的过程。接下来我们介绍一下创建数据表的语法形式。

    基本语法

    在 MySQL 中,可以使用 CREATE TABLE 语句创建表。其语法格式为:

    CREATE TABLE ([表定义选项])[表选项][分区选项];

    其中,[表定义选项]的格式为:

    [,…]

    CREATE TABLE 命令语法比较多,其主要是由表创建定义(create-definition)、表选项(table-options)和分区选项(partition-options)所组成的。

    这里首先描述一个简单的新建表的例子,然后重点介绍 CREATE TABLE 命令中的一些主要的语法知识点。

    CREATE TABLE 语句的主要语法及使用说明如下:

    CREATE TABLE:用于创建给定名称的表,必须拥有表CREATE的权限。

    :指定要创建表的名称,在 CREATE TABLE 之后给出,必须符合标识符命名规则。表名称被指定为 db_name.tbl_name,以便在特定的数据库中创建表。无论是否有当前数据库,都可以通过这种方式创建。在当前数据库中创建表时,可以省略 db-name。如果使用加引号的识别名,则应对数据库和表名称分别加引号。例如,'mydb'.'mytbl' 是合法的,但 'mydb.mytbl' 不合法。

    :表创建定义,由列名(col_name)、列的定义(column_definition)以及可能的空值说明、完整性约束或表索引组成。

    默认的情况是,表被创建到当前的数据库中。若表已存在、没有当前数据库或者数据库不存在,则会出现错误。

    提示:使用 CREATE TABLE 创建表时,必须指定以下信息:

    要创建的表的名称不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INSERT等。

    数据表中每个列(字段)的名称和数据类型,如果创建多个列,要用逗号隔开。

    在指定的数据库中创建表

    数据表属于数据库,在创建数据表之前,应使用语句“USE”指定操作在哪个数据库中进行,如果没有选择数据库,就会抛出 No database selected 的错误。

    【实例 1】创建员工表 tb_emp1,结构如下表所示。

    字段名称

    数据类型

    备注

    id

    INT(ll)

    员工编号

    name

    VARCHAR(25)

    员工名称

    deptld

    INT(ll)

    所在部门编号

    salary

    FLOAT

    工资

    选择创建表的数据库 test_db,创建 tb_emp1 数据表,输入的 SQL 语句和运行结果如下所示。

    mysql> USE test_db;

    Database changed

    mysql> CREATE TABLE tb_emp1

    -> (

    -> id INT(11),

    -> name VARCHAR(25),

    -> deptId INT(11),

    -> salary FLOAT

    -> );

    Query OK, 0 rows affected (0.37 sec)

    语句执行后,便创建了一个名称为 tb_emp1 的数据表,使用 SHOW TABLES;语句查看数据表是否创建成功,如下所示。

    mysql> SHOW TABLES;

    +--------------------+

    | Tables_in_test_db |

    +--------------------+

    | tb_emp1 |

    +--------------------+

    1 rows in set (0.00 sec)

    查看表结构

    在 MySQL 中,使用 SQL 语句创建好数据表之后,可以查看结构的定义,以确认表的定义是否正确。在 MySQL 中,查看表结构可以使用 DESCRIBE 和 SHOW CREATE TABLE 语句。

    DESCRIBE/DESC 语句可以查看表的字段信息,包括字段名、字段数据类型、是否为主键、是否有默认值等,语法规则如下:

    DESCRIBE ;

    或简写成:

    DESC ;

    【实例 2】使用 DESCRIBE 查看表 tb_emp1 的结构,输入的 SQL 语句和运行结果如下所示。

    mysql> DESCRIBE tb_emp1;

    +--------+-------------+------+-----+---------+-------+

    | Field | Type | Null | Key | Default | Extra |

    +--------+-------------+------+-----+---------+-------+

    | id | int(11) | YES | | NULL | |

    | name | varchar(25) | YES | | NULL | |

    | deptId | int(11) | YES | | NULL | |

    | salary | float | YES | | NULL | |

    +--------+-------------+------+-----+---------+-------+

    4 rows in set (0.14 sec)

    其中,各个字段的含义如下:

    Null:表示该列是否可以存储 NULL 值。

    Key:表示该列是否已编制索引。PRI 表示该列是表主键的一部分,UNI 表示该列是 UNIQUE 索引的一部分,MUL 表示在列中某个给定值允许出现多次。

    Default:表示该列是否有默认值,如果有,值是多少。

    Extra:表示可以获取的与给定列有关的附加信息,如 AUTO_INCREMENT 等。

    SHOW CREATE TABLE语句可以用来显示创建表时的CREATE TABLE语句,语法格式如下:

    SHOW CREATE TABLE \G;

    【实例 3】使用 SHOW CREATE TABLE 查看表 tb_emp1 的详细信息,输入的 SQL 语句和运行结果如下所示。

    mysql> SHOW CREATE TABLE tb_emp1\G

    *************************** 1. row ***************************

    Table: tb_emp1

    Create Table: CREATE TABLE `tb_emp1` (

    `id` int(11) DEFAULT NULL,

    `name` varchar(25) DEFAULT NULL,

    `deptId` int(11) DEFAULT NULL,

    `salary` float DEFAULT NULL

    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312

    1 row in set (0.03 sec)

    提示:使用 SHOW CREATE TABLE 语句不仅可以查看创建表时的详细语句,而且可以查看存储引擎和字符编码。如果不加“\G”参数,显示的结果可能非常混乱,加上“\G”参数之后,可使显示的结果更加直观,易于查看。

    < 上一页MySQL二进制类型

    MySQL修改数据表下一页 >

    更多相关内容
  • 使用SQL语句创建数据表(SQL Server)

    千次阅读 2021-10-04 17:37:35
    使用SQL语句创建数据表 CREATE TABLE的语法格式如下 database_name:其中创建表的数据库的名称。database_name必须指定现有数据库的名称。如果未指定,则database_name默认为当前数据库。 schema_name:新所属...

    数据库 表的创建(SQL Server)

    使用SQL语句创建数据表

    CREATE TABLE的语法格式如下

    image-20211004171317808

    • database_name:在其中创建表的数据库的名称。database_name必须指定现有数据库的名称。如果未指定,则database_name默认为当前数据库。
    • schema_name:新表所属架构的名称。
    • table_name:新表的名称。表名必须遵循标识符规则。
    • <column_definition>:主要用于设置数据表列的属性。
    • <computed_column_definition>:用于定义计算列。
    • <table_constraint>:用于设置数据表约束,指同时针对多个列设置约束。
    • ON{<partition_scheme>|filegroup|"default"}:指定存储表的分区架构或文件组。
    • TEXTIMAGE_ON{filegroup|"default"}:用于指示text、ntext、image、xml、varchar(max)、nvarchar(max)或varbinary(max)列存储在指定文件组的关键字。

    举例:

    CREATE TABLE course(
    	courseno nchar(6) NOT NULL,
        cname ncchar(20) NULL,
        type nchar(8) NULL,
        period int NULL
        CONSTRAINT PK_course PRIMARY KEY CLUSTERED (courseno ASC)
    )
    
    • PK_course表示创建主键时的索引名称,可以是任意标识符。
    • CLUSTERED表示聚集索引类型。
    • ASC表示按courseno值升序方式排列数据,若是DESC则表示降序。
    • PRIMARY KEY 表主键
    CREATE TABLE student(
    	sname nchar(11) NOT NULL,
        courseno ncchar(6) NOT NULL,
        CONSTRAINT PK_sname PRIMARY KEY CLUSTERED (sname ASC)
        FOREIGN KEY (courseno) REFERENCES course(courseno),
    )
    
    • FOREIGN KEY 表示外键 此表的courseno 对应course表的courseno
    展开全文
  • MySQL创建数据库和创建数据表

    万次阅读 多人点赞 2019-10-20 23:44:40
    这之前,需要先安装好 MySQL ,然后创建好数据库、数据表、操作用户。 一、数据库操作语言 数据库操作时,需要使用专门的数据库操作规则和语法,这个语法就是SQL(Structured Query Language) 结构化查询语言。...

    MySQL 创建数据库和创建数据表

    MySQL 是最常用的数据库,在数据库操作中,基本都是增删改查操作,简称CRUD。

    在这之前,需要先安装好 MySQL ,然后创建好数据库、数据表、操作用户。

    一、数据库操作语言

    数据库在操作时,需要使用专门的数据库操作规则和语法,这个语法就是 SQL(Structured Query Language) 结构化查询语言。

    SQL 的主要功能是和数据库建立连接,进行增删改查的操作。SQL是关系型数据库管理系统的标准语言。

    SQL 语言的作用:

    1. 数据定义语言 DDL(Data Definition Language) 。用于创建数据库,数据表。

    2. 数据操作语言 DML(Data Manipulation Language) 。用于从数据表中插入、修改、删除数据。

    3. 数据查询语言 DQL(Data Query Language) 。用于从数据表中查询数据。

    4. 数据控制语言 DCL(Data Control Language) 。用来设置或修改数据库用户或角色的权限。

    使用 SQL 操作数据库时,所有的 SQL 语句都以分号结束。(切换数据库时可以不用分号)

    在 SQL 语句中,不区分大小写,编写 SQL 语句时可以根据情况用大小写的区别来增加可读性。

    二、创建数据库

    1. 连接 MySQL

    输入 mysql -u root -p 命令,回车,然后输入 MySQL 的密码(不要忘记了密码),再回车,就连接上 MySQL 了。

    mysql -u root -p

    最初,都是使用 root 用户登录,工作中如果一直用 root 用户登录,因为权限太大,风险是很大的,所以等创建好权限适合的用户后,就不要经常登录 root 用户了。

    2. 查看当前的数据库

    使用 show databases; 查看当前安装的 MySQL 中有哪些数据库。

    show databases;

    刚安装 MySQL 时,默认有四个数据库,information_schema,mysql,perfomance_schema,sys 。通常情况下,我们不会直接使用这四个数据库,但千万不要把这四个数据库删了,否则会带来很多不必要的麻烦。如果不小心删了,建议是重新安装 MySQL ,在重装之前把自己的数据迁移出来备份好,或者从其他服务器上迁移一个相同的数据库过来。

    3. 创建数据库

    使用 create database 数据库名; 创建数据库。

    create database MyDB_one;

    创建数据库成功后,数据库的数量变成了5个,多了刚才创建的 MyDB_one 。

    4. 创建数据库时设置字符编码

    使用 create database 数据库名 character set utf8; 创建数据库并设置数据库的字符编码。

    create database MyDB_two character set utf8;
    

    直接创建的数据库,数据库的编码方式是 MySQL 默认的编码方式 latin1 (单字节编码) ,通常我们会在数据库中存放中文数据,所以最好把数据库的编码方式设置成 utf-8 ,这样中文才能正常显示。

    create database MyDB_three charset utf8;

    character set 可以缩写成 charset ,效果是一样的。

    5. 查看和显示数据库的编码方式

    使用 show create database 数据库名; 显示数据库的创建信息。

    show create database MyDB_one;
    show create database MyDB_two;

    如果不知道一个数据库的编码方式是什么,可以使用 show create database 数据库名 来查看数据库的编码方式。可以看到刚才创建的 MyDB_one 的编码方式是 MySQL 的默认编码 latin1 ,MyDB_two 的编码方式是 utf-8 。

    当然,这种方式不能在创建的同时显示,只能查看一个已经存在的数据库的编码方式。

    6. 使用 alter database 数据库名 character set utf8; 修改数据库编码

    alter database MyDB_one character set utf8;

    如果一个数据库的编码方式不符合使用需求,可以进行修改。刚才创建的 MyDB_one 经过修改后,编码方式也变成了 utf-8 。

    7. 进入或切换数据库

    使用 use 数据库名 进入或切换数据库。

    use MyDB_one
    use MyDB_two;

    刚连接上 MySQL 时,没有处于任何一个数据库中,如果要使用某一个数据库,就需要进入到这个数据库中。

    use 数据库名 这个命令后面的分号可以省略,这是 SQL 语句中唯一可以省略分号的语句。

    8. 显示当前数据库 select database();

    select database();

    进入数据库中,可以使用 select database(); 来查看当前处于哪个数据库中。长时间操作数据库时,在很多数据库中来回切换后,查看当前的数据库,避免操作错了数据库。

    三、创建数据表

    1. 查看当前数据库中的表

    使用 show tables;查看当前数据库中有哪些表。

    show tables;
    

    在刚才创建的数据库 MyDB_one 中,还没有创建任何表,所以当前是空的。

    2. 创建表

    使用 create table 表名(字段1 字段类型,字段2 字段类型,字段3 字段类型,…); 来创建一张表。

    create table Phone_table(pid INT, name CHAR(20), price INT);

    在 MyDB_one 中创建了一个叫 Phone_table 的数据表,这张表有三个字段 pid,name,price 。为了增加 SQL 的可读性,字段名我用的是小写,字段类型用大写。

    3. 显示表信息

    用 show create table 表名; 来显示已创建的表的信息。

    show create table Phone_table;

    使用 show create table 表名;  可以显示表的字段信息, MySQL 的引擎,和默认的字符编码等信息。与显示数据库信息一样,show 只能显示已经创建了的数据表的信息,不能在创建的同时显示信息。

    如果想更好地展示表的字段信息,可以使用 desc 表名; 来显示表的字段信息。

    4. 给表增加字段

    使用 alter table 表名 add 字段名 数据类型; 为已存在的表添加一个新字段。

    alter table Phone_table add color CHAR(20);

    添加后,刚才的表中多了一个字段,新增成功。

    5. 删除表的字段

    使用 alter table 表名 drop 字段名; 删除一个表中已存在的字段。

    alter table Phone_table drop price;

    删除字段后,表中不再有该字段。

    6. 修改字段的数据类型

    使用 alter table 表名 modify 字段名 数据类型; 修改表中现有字段的数据类型。

    alter table Phone_table modify name VARCHAR(12);

    修改之后,该字段的数据类型发生改变。

    7. 修改字段的数据类型并且改名

    使用 alter table 表名 change 原字段名 新字段名 数据类型; 修改表中现有字段的字段名和类型。

    alter table Phone_table change name pname CHAR(18);

    现在,将表的 name 改成了 pname ,同时修改了 pname 的数据类型。

    四、MySQL 常用字段类型

    一个数据表是由若干个字段组成的,一个表十几个字段也很正常,每个字段表示不同的信息,需要使用不同类型的数据。

    所以在创建表的时候,要为每个字段指定适合的数据类型。

    MySQL 中常用的字段类型有以下这些:

    1. 整数类型

    数据类型数据范围
    TINYINT-128 -- 127
    SMALLINT-32768 -- 32767
    MEDIUMINT-2^23 -- 2^23-1
    INT-2^31 -- 2^31-1
    BIGINT-2^63 -- 2^63-1

    2. 字符串类型

    数据类型字节范围用途
    CHAR(n)0 -- 255字节定长字符串
    VARCHAR(n)0 -- 65535字节变长字符串
    TEXT0 -- 65535字节长文本数据
    LONGTEXT0 -- 2^32-1字节极大文本数据
    BLOB0 -- 65535字节二进制长文本数据
    LONGBLOB0 -- 2^32-1字节二进制极大文本数据

    3. 小数类型

    m 表示浮点数的总长度,n 表示小数点后有效位数。

    数据类型数据用法数据范围
    FloatFloat(m,n)7位有效数
    DoubleDouble(m,n)15位有效数
    DecimalDecimal(m,n)28位有效数

    4. 时间类型

    数据类型格式用途
    DATEYYYY-MM-DD日期
    TIMEHH:MM:SS时间
    YEARYYYY年份
    DATETIMEYYYY-MM-DD HH:MM:SS日期和时间
    TIMESTAMP10位或13位整数(秒数)时间戳

    5. 枚举类型

    enum(枚举值1,枚举值2,...)

    枚举类型只能在列出的值中选择一个,如性别。

     

     

    展开全文
  • 版权声明:本文为博主原创文章,欢迎转载,转载请注明出处! ... 注:hive其他语法hive官网有说明,建议初学者,去官网学习一手的资料, 官网:htt...
    版权声明:本文为博主原创文章,欢迎转载,转载请注明出处! https://blog.csdn.net/qq_36743482/article/details/78383964

    注:hive其他语法在hive官网有说明,建议初学者,去官网学习一手的资料,
    官网:https://cwiki.apache.org/confluence/display/Hive/Home#Home-UserDocumentation

    Create Table

    官网说明

    Hive建表方式共有三种:

    • 直接建表法
    • 查询建表法
    • like建表法

    首先看官网介绍
    ’[]’ 表示可选,’|’ 表示二选一

    CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name    -- (Note: TEMPORARY available in Hive 0.14.0 and later)
      [(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
      [COMMENT table_comment]
      [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
      [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
      [SKEWED BY (col_name, col_name, ...)                  -- (Note: Available in Hive 0.10.0 and later)]
         ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
         [STORED AS DIRECTORIES]
      [
       [ROW FORMAT row_format] 
       [STORED AS file_format]
         | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]  -- (Note: Available in Hive 0.6.0 and later)
      ]
      [LOCATION hdfs_path]
      [TBLPROPERTIES (property_name=property_value, ...)]   -- (Note: Available in Hive 0.6.0 and later)
    

    [AS select_statement]; – (Note: Available in Hive 0.5.0 and later; not supported for external tables)

    CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
    LIKE existing_table_or_view_name
    [LOCATION hdfs_path];

    data_type
    primitive_type
    | array_type
    | map_type
    | struct_type
    | union_type – (Note: Available in Hive 0.7.0 and later)
    primitive_type
    TINYINT
    | SMALLINT
    | INT
    | BIGINT
    | BOOLEAN
    | FLOAT
    | DOUBLE
    | DOUBLE PRECISION – (Note: Available in Hive 2.2.0 and later)
    | STRING
    | BINARY – (Note: Available in Hive 0.8.0 and later)
    | TIMESTAMP – (Note: Available in Hive 0.8.0 and later)
    | DECIMAL – (Note: Available in Hive 0.11.0 and later)
    | DECIMAL(precision, scale) – (Note: Available in Hive 0.13.0 and later)
    | DATE – (Note: Available in Hive 0.12.0 and later)
    | VARCHAR – (Note: Available in Hive 0.12.0 and later)
    | CHAR – (Note: Available in Hive 0.13.0 and later)
    array_type
    ARRAY < data_type >
    map_type
    MAP < primitive_type, data_type >
    struct_type
    STRUCT < col_name : data_type [COMMENT col_comment], …>
    union_type
    UNIONTYPE < data_type, data_type, … > – (Note: Available in Hive 0.7.0 and later)
    row_format
    DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
    [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
    [NULL DEFINED AS char] – (Note: Available in Hive 0.13 and later)
    | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, …)]
    file_format:
    SEQUENCEFILE
    | TEXTFILE – (Default, depending on hive.default.fileformat configuration)
    | RCFILE – (Note: Available in Hive 0.6.0 and later)
    | ORC – (Note: Available in Hive 0.11.0 and later)
    | PARQUET – (Note: Available in Hive 0.13.0 and later)
    | AVRO – (Note: Available in Hive 0.14.0 and later)
    | INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname
    constraint_specification:
    [, PRIMARY KEY (col_name, …) DISABLE NOVALIDATE ]
    [, CONSTRAINT constraint_name FOREIGN KEY (col_name, …) REFERENCES table_name(col_name, …) DISABLE NOVALIDATE
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

    观察可发现一共有三种建表方式,接下来我们将一一讲解。

    1.直接建表法:

    create table table_name(col_name data_type);
    
     
    • 1

    这里我们针对里面的一些不同于关系型数据库的地方进行说明。

    row format

    row_format
      : DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
            [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
            [NULL DEFINED AS char]   -- (Note: Available in Hive 0.13 and later)
      | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]
    

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Hive将HDFS上的文件映射成表结构,通过分隔符来区分列(比如’,’ ‘;’ or ‘^’ 等),row format就是用于指定序列化和反序列化的规则。
    比如对于以下记录:

    1,xiaoming,book-TV-code,beijing:chaoyang-shagnhai:pudong
    2,lilei,book-code,nanjing:jiangning-taiwan:taibei
    3,lihua,music-book,heilongjiang:haerbin
    
     
    • 1
    • 2
    • 3

    逗号用于分割列,即FIELDS TERMINATED BY char,分割为如下列 IDnamehobby(该字段是数组形式,通过 ‘-’ 进行分割,即COLLECTION ITEMS TERMINATED BY ‘-’)、address(该字段是键值对形式map,通过 ‘:’ 分割键值,即 MAP KEYS TERMINATED BY ‘:’);
    而FIELDS TERMINATED BY char用于区分不同条的数据,默认是换行符;

    file format(HDFS文件存放的格式)

    默认TEXTFILE,即文本格式,可以直接打开。

    如下:根据上述文件内容,创建一个表t1

    create table t1(
        id      int
       ,name    string
       ,hobby   array<string>
       ,add     map<String,string>
    )
    row format delimited
    fields terminated by ','
    collection items terminated by '-'
    map keys terminated by ':'
    ;
    
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    这里写图片描述
    2. 查看表的描述:desc t1;
    这里写图片描述

    1. 下面插入数据
      注:一般很少用insert (不是insert overwrite)语句,因为就算就算插入一条数据,也会调用MapReduce,这里我们选择Load Data的方式。
    LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
    
     
    • 1

    创建一个文件粘贴上述记录,并上载即可,如下图:
    这里写图片描述
    然后上载

    load data local inpath '/home/hadoop/Desktop/data' overwrite into table t1;
    
     
    • 1

    别忘记写文件名/data,笔者第一次忘记写,把整个Desktop上传了,一查全是null和乱码。。。。
    查看表内容:

    select * from t1;
    
     
    • 1

    这里写图片描述

    external

    未被external修饰的是内部表(managed table),被external修饰的为外部表(external table);
    区别:
    内部表数据由Hive自身管理,外部表数据由HDFS管理;
    内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定;
    删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
    对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

    创建一个外部表t2

    create external table t2(
        id      int
       ,name    string
       ,hobby   array<string>
       ,add     map<String,string>
    )
    row format delimited
    fields terminated by ','
    collection items terminated by '-'
    map keys terminated by ':'
    location '/user/t2'
    ;
    
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    这里写图片描述

    装载数据
    load data local inpath '/home/hadoop/Desktop/data' overwrite into table t2;
    
     
    • 1

    这里写图片描述

    查看文件位置

    如下图,我们在NameNode:50070/explorer.html#/user/目录下,可以看到t2文件
    这里写图片描述

    t1在哪呢?在我们之前配置的默认路径里
    这里写图片描述

    同样我们可以通过命令行获得两者的位置信息:

    desc formatted table_name;
    
     
    • 1

    这里写图片描述

    这里写图片描述
    注:图中managed table就是内部表,而external table就是外部表。

    分别删除内部表和外部表

    下面分别删除内部表和外部表,查看区别
    这里写图片描述

    观察HDFS上的文件

    发现t1已经不存在了
    这里写图片描述

    但是t2仍然存在
    这里写图片描述
    因而外部表仅仅删除元数据

    重新创建外部表t2
    create external table t2(
        id      int
       ,name    string
       ,hobby   array<string>
       ,add     map<String,string>
    )
    row format delimited
    fields terminated by ','
    collection items terminated by '-'
    map keys terminated by ':'
    location '/user/t2'
    ;
    
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    这里写图片描述

    不往里面插入数据,我们select * 看看结果
    这里写图片描述
    可见数据仍然在!!!

    官网说明
    A table created without the EXTERNAL clause is called a managed table because Hive manages its data. 
    Managed and External Tables
    By default Hive creates managed tables, where files, metadata and statistics are managed by internal Hive processes. A managed table is stored under the hive.metastore.warehouse.dir path property, by default in a folder path similar to /apps/hive/warehouse/databasename.db/tablename/. The default location can be overridden by the location property during table creation. If a managed table or partition is dropped, the data and metadata associated with that table or partition are deleted. If the PURGE option is not specified, the data is moved to a trash folder for a defined duration.
    Use managed tables when Hive should manage the lifecycle of the table, or when generating temporary tables.
    An external table describes the metadata / schema on external files. External table files can be accessed and managed by processes outside of Hive. External tables can access data stored in sources such as Azure Storage Volumes (ASV) or remote HDFS locations. If the structure or partitioning of an external table is changed, an MSCK REPAIR TABLE table_name statement can be used to refresh metadata information.
    Use external tables when files are already present or in remote locations, and the files should remain even if the table is dropped.
    Managed or external tables can be identified using the DESCRIBE FORMATTED table_name command, which will display either MANAGED_TABLE or EXTERNAL_TABLE depending on table type.
    Statistics can be managed on internal and external tables and partitions for query optimization. 
    
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.查询建表法

    通过AS 查询语句完成建表:将子查询的结果存在新表里,有数据
    一般用于中间表

    CREATE TABLE new_key_value_store
       ROW FORMAT SERDE "org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe"
       STORED AS RCFile
       AS
    SELECT (key % 1024) new_key, concat(key, value) key_value_pair
    FROM key_value_store
    SORT BY new_key, key_value_pair;
    
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    根据例子我们建一张表:t3

    create table t3 as
    select
        id
       ,name
    from t2
    ;
    
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    会执行MapReduce过程。
    查看表结构及内容,发现是有数据的,并且由于没有指定外部表和location,该表在默认位置,即是内部表。
    这里写图片描述

    3.like建表法

    会创建结构完全相同的表,但是没有数据。
    常用语中间表

    CREATE TABLE empty_key_value_store
    LIKE key_value_store;
    
     
    • 1
    • 2

    例子

    create table t4 like t2;
    
     
    • 1

    可以发现,不会执行MapReduce,且表结构和t2完全一样,但是没有数据。
    这里写图片描述

            </div>
    					<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-2787195726.css" rel="stylesheet">
                </div>
    
    展开全文
  • MySQL使用DDL语句创建表

    千次阅读 2019-06-30 21:35:57
    使用DDL语句创建表 知识要点 CREATE TABLE语句 列的数据类型 添加数据类型选项 根据已有的创建 列选项 选项 约束 对表名和列名使用反引号 CREATE TABLE语句 对于一个有列和行,对于列有标题和数据...
  • MySQL之创建数据表(CREATE TABLE语句

    千次阅读 2019-08-23 10:24:35
    使用 CREATE TABLE 语句创建表。其语法格式为: CREATE TABLE <表名> ([定义选项])[选项][分区选项]; [定义选项]的格式为: <列名1> <类型1> [,…] <列名n> <类型n> CREATE ...
  • < MySQL数据表的基本操作MySQL修改数据表 > 在创建数据库之后,接下来就要... MySQL ,可以使用 CREATE TABLE 语句创建表。其语法格式为: CREATE TABLE <表名> ([定义选项])[选项][分区选项]
  • mysql数据库如何创建数据表

    千次阅读 2021-01-19 03:36:30
    mysql数据库创建数据表的方法是:可以通过CREATE TABLE语句创建,基本... MySQL ,可以使用 CREATE TABLE 语句创建表。其语法格式为:(推荐教程:mysql教程)CREATE TABLE ([定义选项])[选项][分区选项];其...
  • 【学习环境】:sql server 2012【学习内容】:使用sql语句进行库与创建【涉及知识点】:一、数据库的创建 Sql server 2012,分为界面操作和代码语句操作,界面操作后续说明,今天所记为Sql语句的操作 ...
  • ShardingSphere-Proxy 单表创建规则

    千次阅读 2022-04-14 09:58:19
    single table 的概念只出现5.1版本的ShardingSphere-Proxy 下。 创建方法通过DIstSQL下的RDL语法创建。单创建并不是proxy的重点,但确实proxy新版本下的一个提升,这5.0开始的DISTSQL里是没有的。
  • 一、操作环境 数据库版本:sql server 2012 测试数据库:Northwind,安装方法请...上图结果返回了“Northwind”的所有,然后看“type”列,其对应的关系如下 规则 对应缩写 规则 对应缩写 规则 对...
  • phpMyAdmin是众多MySQL图形化管理工具使用最广泛的一种,不管是Windows还是Linux,都可以通过该管理工具可以对MySQL进行各种操作。 一、下载及安装 用户可以官方网站上免费下载最新版本,免费下载 下载好后,把...
  • 2)student数据库建立基于XSKC模式的数据表结构如下所示; student(学生信息) 字段名称 字段类型及长度 说明 备注 sno char(9) 学生学号 主关键字 sname nvarchar(6) 学生姓名 非空 ssex ...
  • 数据库后 + 数据表的相应段 最后加上 CHARACTER SET utf8 COLLATE utf8_general_ci 即可     与网页交互的时候,需要设置网页的编码为utf-8,request交互的字符编码也为 utf-8   1.设置.jsp,...
  • DDL语句--创建表

    万次阅读 2016-03-31 11:13:01
    是数据库存储数据的基本单位。一个包含若干字段和记录。的操作包含创建,修改,删除。这些操作都是数据库管理最基本,也是最重要的操作。 具体而言,关于的相关操作...创建表是指已存在的数据库
  • 简单的创建数据库的 SQL语句: use master go if exists(select * from sysdatabases where name='Test') begin select '该数据库已存在' drop database Test --如果该数据库已经存在,那么就删除它 end else ...
  • SQL查询语句之查询数据

    千次阅读 2021-11-11 22:08:11
    MySQL 是使用SELECT语句来查询数据的。 1、基本查询语句 查询数据是数据库操作最常用的操作。通过对数据库的查询,用户可以从数据库获取需要的数据。数据库可能包含着无数的表中可能包含着无数的...
  • 数据类型 数据类型 含义 CHARACTER(n) 字符/字符串。固定长度 n。 VARCHAR(n) 或 CHARACTER VARYING(n) 字符/字符串。可变长度。最大长度 n。 BINARY(n) 二进制串。固定长度 n。 BOOLEAN 存储 TRUE 或...
  • MySQL创建数据表

    千次阅读 2020-03-13 16:19:11
    创建数据表,指的是已经创建的数据库建立新创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性)约束的过程。 创表语法 MySQL ,可以使用 ...
  • 用SQL语句创建表

    万次阅读 多人点赞 2016-07-28 23:22:41
    数据库的所有数据存储在表中数据表包括行和列。列决定了表中数据的类型。行包含了实际的数据。  例如,数据库pubsauthors有九个字段。其中的一个字段名为为au_lname,这个字段被用来存储作者的...
  • 运行环境Microsoft SQL Server ... 按要求创建数据库student和收费创建方法可分别参考如下链接https://blog.csdn.net/Sleepnowake/article/details/103303250,https://blog.csdn.net/Sleepnowake/article/det...
  • 一文搞懂MySQL的分层架构和select语句在MySQL的执行流程!
  • thinkphp5 创建数据表

    千次阅读 2019-03-25 12:06:11
    如果需要分表1000个,也不能马上创建1000张表,监听另一张数据是否有新的数据增减,如果有增加,我们就要自动去创建相应的数据表 具体实现方法如下: public function testCreateTable() { //创建数据表 ...
  • MySQL-删除数据(DELECT)

    千次阅读 2021-03-04 04:44:01
    因此,执行DELETE语句之前,应该先备份数据库,以防万一要找回删除过的数据。MySQL提供了非常有用的工具,用于服务器上本地备份或转储MySQL数据库。MySQLDump是由MySQL提供的程序,可用于转储数据库以备数据库...
  • Hive:创建分区并插入数据

    千次阅读 2021-07-19 15:11:15
    Hive 分区 partition 必须在表定义时,指定对应的 ... 单分区、按天分区、在表结构存在 id,content,dt 三列,dt 为文件夹区分 create table dayhour_table(id int, content string) partitioned by (dt strin
  • Oracle创建索引的基本规则

    千次阅读 2021-05-03 05:20:03
    选择索引字段的原则:WHERE子句中最频繁使用的字段联接语句中的联接字段选择高选择性的字段(如果很少的字段拥有相同值,即有很多独特值,则选择性很好)OracleUNIQUE和主键字段上自动建立索引选择性很差的字段上...
  • 关系数据库,数据库通常包含多个数据表,数据库数据信息都是存储在数据表当中的。数据表是对数据进行存储和操作的一种逻辑结构,对于用户而言,一个数据表表示一个数据库对象。 3.1 创建数据表—CREATE ...
  • MySQL---查看数据表结构

    千次阅读 2019-08-29 14:57:47
    MySQL,查看结构可以使用describe和show create table语句,下面详细介绍这两种语句: 1.查看基本结构语句describe: describe/desc 语句可以查看的字段信息,包括字段名、字段数据类型、是否为主键、是否...
  • MySQL创建语句和修改语句

    千次阅读 2018-10-01 20:54:31
    1.创建表的语法规则:  create table &lt;表名&gt; (  字段名1 数据类型 [列级别约束条件] [默认值],  字段名2 数据类型 [列级别约束条件] [默认值],  ......  [级别约束条件]  );  使用create ...
  • 使用SQLyog创建表

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

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 345,707
精华内容 138,282
关键字:

在数据表中创建规则的语句是