德胜云资讯,添加一些关于程序相关的内容,仅供大家学习交流(https://www.wxclwl.com)

网站地图

搜索
德胜云咨询
后端分类 爬虫 网络安全 PHP SQL
热门标签:
最新标签:

如何使用mysql创建数据表MySQL创建数据表语法与部分必须知识点整理「数据表的创建(一)」如何使用mysql创建数据库难以置信,

日期:2023/04/25 08:54作者:何美玲人气:

导读:小贴纸:本篇文章,基本都是概念,阅读比较枯燥。不过通过本篇阅读后,将理解如何看MySQL系统中的帮助文件内容,特别是语法将有很大帮助,同时也对如何在 MySQL系统中 创建数据表,需要掌握的知识点有一个基本的逻辑概念。 小贴纸“文章阅读与部分提示信息说明”文章中,使用白底黑字部分为叙述、说明。黑底显示部分,为系统命令行下的代码信息显示区域;其中白色文字...

小贴纸:本篇文章,基本都是概念,阅读比较枯燥。不过通过本篇阅读后,将理解如何看MySql系统中的帮助文件内容,特别是语法将有很大帮助,同时也对如何在 MySQL系统中 创建数据表,需要掌握的知识点有一个基本的逻辑概念。

小贴纸“文章阅读与部分提示信息说明”文章中,使用白底黑字部分为叙述、说明。黑底显示部分,为系统命令行下的代码信息显示区域;其中白色文字为输入的SQL语句或系统输出的信息,为了特别着重说明这些信息,也会用蓝色、加粗等方式 突出显示效果;其中红色文字为注释说明,也会用到加粗方式 突出显示效果 。

万丈高楼平地起!

作为关系数据中最基础的数据表建立,有非常多的内容需要学习。知识点也非常多。

我们还是老办法,先通过HELP命令查看一下,创建数据表是什么语法结构?

GO!

mysql> HELP ‘CREATE TABLE’; #输入帮助语句,查看命令内容。Name: ‘CREATE TABLE’Description:Syntax:CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name(create_definition,…)[table_options]CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name[(create_definition,…)][table_options][partition_options][IGNORE | REPLACE][AS] query_expressionCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name{ LIKE old_tbl_name | (LIKE old_tbl_name) }

create_definition: {col_name column_definition| {INDEX | KEY} [index_name] index_type[index_option] …| {FULLTEXT | SPATIAL} [INDEX | KEY] index_name[index_option] …| [CONSTRAINT [symbol]] PRIMARY KEYindex_type[index_option] …| [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY][index_name] index_type[index_option] …| [CONSTRAINT [symbol]] FOREIGN KEYindex_namereference_definition| check_constraint_definition}

column_definition: {

data_type [NOT NULL | NULL] [DEFAULT {literal | (expr)} ]

[VISIBLE | INVISIBLE]

[AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY]

[COMMENT ‘string’]

[COLLATE collation_name]

[COLUMN_FORMAT {FIXED | DYNAMIC | DEFAULT}]

[ENGINE_ATTRIBUTE [=] ‘string’]

[SECONDARY_ENGINE_ATTRIBUTE [=] ‘string’]

[STORAGE {DISK | MEMORY}]

[reference_definition]

[check_constraint_definition]

| data_type

[COLLATE collation_name]

[GENERATED ALWAYS] AS (expr)

[VIRTUAL | STORED] [NOT NULL | NULL]

[VISIBLE | INVISIBLE]

[UNIQUE [KEY]] [[PRIMARY] KEY]

[COMMENT ‘string’]

[reference_definition]

[check_constraint_definition]

}

data_type:

(see https://dev.mysql.com/doc/refman/8.0/en/data-types.html)

key_part: {col_name [(length)] | (expr)} [ASC | DESC]

index_type:

USING {BTREE | HASH}

index_option: {

KEY_BLOCK_SIZE [=] value

| index_type

| WITH PARSER parser_name

| COMMENT ‘string’

| {VISIBLE | INVISIBLE}

|ENGINE_ATTRIBUTE [=] ‘string’

|SECONDARY_ENGINE_ATTRIBUTE [=] ‘string’

}

check_constraint_definition:

[CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]

reference_definition:

REFERENCES tbl_name (key_part,…)

[MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]

[ON DELETE reference_option]

[ON UPDATE reference_option]

reference_option:

RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT

table_options:

table_option [[,] table_option] …

table_option: {AUTOEXTEND_SIZE [=] value| AUTO_INCREMENT [=] value| AVG_ROW_LENGTH [=] value| [DEFAULT] CHARACTER SET [=] charset_name| CHECKSUM [=] {0 | 1}| [DEFAULT] COLLATE [=] collation_name| COMMENT [=] ‘string’| COMPRESSION [=] {‘ZLIB’ | ‘LZ4’ | ‘NONE’}| CONNECTION [=] ‘connect_string’| {DATA | INDEX} DIRECTORY [=] ‘absolute path to directory’| DELAY_KEY_WRITE [=] {0 | 1}| ENCRYPTION [=] {‘Y’ | ‘N’}| ENGINE [=] engine_name| ENGINE_ATTRIBUTE [=] ‘string’| INSERT_METHOD [=] { NO | FIRST | LAST }| KEY_BLOCK_SIZE [=] value| MAX_ROWS [=] value| MIN_ROWS [=] value| PACK_KEYS [=] {0 | 1 | DEFAULT}| PASSWORD [=] ‘string’| ROW_FORMAT [=] {DEFAULT | DYNAMIC | FIXED | COMPRESSED | REDUNDANT | COMPACT}| SECONDARY_ENGINE_ATTRIBUTE [=] ‘string’| STATS_AUTO_RECALC [=] {DEFAULT | 0 | 1}| STATS_PERSISTENT [=] {DEFAULT | 0 | 1}| STATS_SAMPLE_PAGES [=] value| TABLESPACE tablespace_name [STORAGE {DISK | MEMORY}]| UNION =}

partition_options:PARTITION BY{ [LINEAR] HASH(expr)| [LINEAR] KEY ALGORITHM={1 | 2}| RANGE{(expr) | COLUMNS(column_list)}| LIST{(expr) | COLUMNS(column_list)} }[PARTITIONS num][SUBPARTITION BY{ [LINEAR] HASH(expr)| [LINEAR] KEY ALGORITHM={1 | 2} }[SUBPARTITIONS num]][(partition_definition [, partition_definition] …)]

partition_definition:

PARTITION partition_name

[VALUES

{LESS THAN {(expr | value_list) | MAXVALUE}

|

IN (value_list)}]

[[STORAGE] ENGINE [=] engine_name]

[COMMENT [=] ‘string’ ]

[DATA DIRECTORY [=] ‘data_dir’]

[INDEX DIRECTORY [=] ‘index_dir’]

[MAX_ROWS [=] max_number_of_rows]

[MIN_ROWS [=] min_number_of_rows]

[TABLESPACE [=] tablespace_name]

[(subpartition_definition [, subpartition_definition] …)]

subpartition_definition:

SUBPARTITION logical_name

[[STORAGE] ENGINE [=] engine_name]

[COMMENT [=] ‘string’ ]

[DATA DIRECTORY [=] ‘data_dir’]

[INDEX DIRECTORY [=] ‘index_dir’]

[MAX_ROWS [=] max_number_of_rows]

[MIN_ROWS [=] min_number_of_rows]

[TABLESPACE [=] tablespace_name]

query_expression:

SELECT … (Some valid select or union statement)

CREATE TABLE creates a table with the given name. You must have the

CREATE privilege for the table.

By default, tables are created in the default database, using the

InnoDB storage engine. An error occurs if the table exists, if there is

no default database, or if the database does not exist.

MySQL has no limit on the number of tables. The underlying file system

may have a limit on the number of files that represent tables.

Individual storage engines may impose engine-specific constraints.

InnoDB permits up to 4 billion tables.

For information about the physical representation of a table, see

https://dev.mysql.com/doc/refman/8.0/en/create-table-files.html.

URL: https://dev.mysql.com/doc/refman/8.0/en/create-table.html

我的人民币呀!一个昏天黑地呀!这样多!!!!!!

没有错,真的 多到让人感觉吐!

笔者吧这些现实的内容,复制到其它编辑软件中,最后发现,足足有181行。

如果您去官网的帮助文件查看,光语法格式也有160行。这个如何是好?有点无从下手了!

乐意探究的我,硬着头皮,打着点滴也要为了祖国能强大起来而继续学习。相信您和我也一样!

下来看最后几段吧。

倒数第一段,

For information about the physical representation of a table, see

https://dev.mysql.com/doc/refman/8.0/en/create-table-files.html.

URL: https://dev.mysql.com/doc/refman/8.0/en/create-table.html

告诉你,也就是让你如果不明白的,详细信息可以通过浏览网页继续看帮助文件。

倒数第二段,

MySQL has no limit on the number of tables. The underlying file system

may have a limit on the number of files that represent tables.

Individual storage engines may impose engine-specific constraints.

InnoDB permits up to 4 billion tables.

告诉你,表的建立是有限制的,如果使用InnoDB 存储引擎 将 允许多达 40 亿个表。好吧,我们现在40个都用不到,可以忽略。

倒数第三段,By default, tables are created in the default database, using theInnoDB storage engine. An error occurs if the table exists, if there isno default database, or if the database does not exist.告诉你,默认情况下,表是在默认数据库中创建的,使用 InnoDB 存储引擎。好了,第二次出现这个 存储引擎 这个词汇了。我们将在后文中简单说明。

倒数第四段,

CREATE TABLE creates a table with the given name. You must have the

CREATE privilege for the table.

告诉你,你必须拥有 表的 CREATE 权限,才可以创建表。

除了以上倒数四段,其他的段,都是语法语句结构。

好吧,我们必须看明白语法结构才可以。

以下是分离出来的第1~3段信息。

蓝色文字标出的是语法结构。

mysql> HELP ‘CREATE TABLE’; #输入帮助语句,查看命令内容。Name: ‘CREATE TABLE’Description:

Syntax:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

(create_definition,…)

[table_options]

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

[(create_definition,…)]

[table_options]

[partition_options]

[IGNORE | REPLACE]

[AS] query_expression

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

{ LIKE old_tbl_name | (LIKE old_tbl_name) }

有意思的是,这次看到的语法结构,与之前学习的创建数据库 语法结构 很像,但又不像。分为三段,这是因为创建数据表,可以用有三种方法完成创建,也就出现了3段(3种) 语法结构 。 有意思的是,不管是那种结构,第一行都是一样的。 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

聪明的您,一定会举一反三的学习。之前我们说过,语法结构中的[] 中括号 表示子句或者非必要的辅助语句;{} ”大括号 表示主句,也就是必须要出现的语句。按之前的理论, CREATE TABLE tbl_name 就可以建立一个数据表。

还等什么,现在就操作呀!

GO!

mysql> SHOW DATABASES; #查看现有数据库。+——————–+| Database |+——————–+| information_schema || mysql || performance_schema || sys |+——————–+4 rows in set (0.01 sec)mysql> CREATE DATABASE db_test1; #创建测试学习用数据库db_test1。Query OK, 1 row affected (0.01 sec)mysql> SHOW DATABASES; #查找数据库db_test1是否建立。+——————–+| Database |+——————–+| db_test1 | #查看到 db_test1 已经存在。| information_schema || mysql || performance_schema || sys |+——————–+5 rows in set (0.01 sec)mysql> USE db_test1; #选择需要操作的数据库。Database changedmysql> CREATE TABLE tbl_my_table; #创建数据表 tbl_my_table 。ERROR 4028 (HY000): A table must have at least one visible column. #系统报错,语句执行失败。

失败了,系统有报错,信息是 A table must have at least one visible column. 一张表必须至少有一个可见列。

在刚才创建数据表的语句中,我们只输入了数据表的名字,没输入数据列名字,所以系统报错。

问题来了,数据表中,数据列名字如何输入?语法格式是什么?

我们还是继续来看帮助文件吧。

mysql> HELP ‘CREATE TABLE’; #输入帮助语句,查看命令内容。Name: ‘CREATE TABLE’Description:Syntax:CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name(create_definition,…)[table_options]

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

[(create_definition,…)]

[table_options]

[partition_options]

[IGNORE | REPLACE]

[AS] query_expression

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

{ LIKE old_tbl_name | (LIKE old_tbl_name) }

我们先来查看,语法格式的第一段。发现第二行中有 (create_definition,…)创建定义 这样的显示。说明需要查看带有 create_definition 创建定义 信息的部分。

create_definition:{ #找到创建定义部分col_name column_definition#查看到还需要有列定义。| {INDEX | KEY} [index_name] index_type[index_option] …| {FULLTEXT | SPATIAL} [INDEX | KEY] index_name[index_option] …| [CONSTRAINT [symbol]] PRIMARY KEYindex_type[index_option] …| [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY][index_name] index_type[index_option] …| [CONSTRAINT [symbol]] FOREIGN KEYindex_namereference_definition| check_constraint_definition}

查看到,需要有 col_name 列名意外,还需要有 column_definition 列定义。好吧,继续找。

column_definition: { #找列定义。data_type [NOT NULL | NULL] [DEFAULT {literal | (expr)} ] #告诉你定义必须要用 data_type数据类型 。[VISIBLE | INVISIBLE][AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY][COMMENT ‘string’][COLLATE collation_name][COLUMN_FORMAT {FIXED | DYNAMIC | DEFAULT}][ENGINE_ATTRIBUTE [=] ‘string’][SECONDARY_ENGINE_ATTRIBUTE [=] ‘string’][STORAGE {DISK | MEMORY}][reference_definition][check_constraint_definition]| data_type[COLLATE collation_name][GENERATED ALWAYS] AS (expr)[VIRTUAL | STORED] [NOT NULL | NULL][VISIBLE | INVISIBLE][UNIQUE [KEY]] [[PRIMARY] KEY][COMMENT ‘string’][reference_definition][check_constraint_definition]}

data_type数据类型 又是什么?继续找吧。

data_type:

(see https://dev.mysql.com/doc/refman/8.0/en/data-types.html)

让您看网页上的帮助文件。

Chapter 11 Data TypesTable of Contents11.1 Numeric Data Types11.2 Date and Time Data Types11.3 String Data Types11.4 Spatial Data Types11.5 The JSON Data Type11.6 Data Type Default Values11.7 Data Type Storage Requirements11.8 Choosing the Right Type for a Column11.9 Using Data Types from Other Database Engines

以上是MySQL官网中的部分信息。需要知道什么是数据类型,还需要继续看9个项目。

我感觉要死!俄罗斯套娃的感觉!

其实,如果你现在手头上有中文的MySQL学习书籍,你会发现,根本没有我说的这样复杂,就可以建立一个数据表了。

之所以这样说,需要告诉大家,书本上说的虽然简单,但是很不详细和全面,遗漏地方非常多。多到数不清楚。

好吧,现在我大致解释一下,什么是数据类型?

计算机上处理数据都是二进制数字,通过编码方式,转换成人类能看懂的语言字符。

这些字符是有一个大致的分类。

1:数字

2:时间日期

3:字符

先记住这几点,有一个大致概念。

Table 11.1 Required Storage and Range for Integer Types Supported by MySQL

上面的表格中,显示的是MySQL数据中支持的,数字(整数)的 数据类型 。 Type 列中是名字。后面有部分信息,说明了不同类型需要耗费多少字节、最小最大支持多少等信息。

那既然这里,我们先来整理一下,最基本的需要建立数据表的一些元素,和语句关键字。CREATE TABLE tbl_name ( col_name column_definition( data_type ) )按照这个思路,我们来操作一下,建立数据表。

mysql> CREATE TABLE tbl_my_table (col_id TINYINT); #输入数据表建立语句。Query OK, 0 rows affected (0.06 sec) #系统显示建立完成。mysql> SHOW TABLES; #输入查看数据表语句。+——————–+| Tables_in_db_test1 |+——————–+| tbl_my_table | #系统显示在 db_test1 里有一个 tbl_my_table 数据表。+——————–+1 row in set (0.02 sec)mysql> SHOW CREATE TABLE tbl_my_table; #输入数据表创建查看语句。+————–+———————————————————————————————————————————-+| Table | Create Table |+————–+———————————————————————————————————————————-+| tbl_my_table | CREATE TABLE tbl_my_table (col_id tinyint DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |+————–+———————————————————————————————————————————-+ #蓝色文字部分,该表创建的完整语句。1 row in set (0.00 sec)mysql> SHOW COLUMNS FROM tbl_my_table; #输入查看表结构语句。+——–+———+——+—–+———+——-+| Field | Type | Null | Key | Default | Extra |+——–+———+——+—–+———+——-+| col_id | tinyint | YES | | NULL | |+——–+———+——+—–+———+——-+1 row in set (0.01 sec)

以上是创建数据表的操作。

完成后,

使用 SHOW TABLES 语句查看新建立的数据表。

再使用 SHOW CREATE TABLE 语句查看创建数据表的语句。

需要注意的是!语句中,部分并非我们在创建数据表中输入字符信息。这与创建数据库时,系统将默认值都补全一样。换句话说,这样的信息,其实就是创建数据表时,必须输入的最少信息。

最后使用 SHOW COLUMNS FROM 语句查看数据表结构。

以上三个语句也是MySQL系统常用查看语句,之后也将会经常使用到。请大家务必牢记。之后的文章中该语句因太过于简单,又经常使用,将不再具体说明。

小贴纸:

在MySQL 8版本中查看数据表的表结构时,需要用到 SHOW COLUMNS FROM tbl_name 语句。不过使用DESC TABLES tbl_name语句在老版本的系统中才能看到一样的显示效果。

当然,这2个语句,都可以在不同版本的MySQL中运行,只是显示信息结果有不同。

MySQL数据库系统,建立数据表的语句还有很多。不可能用一篇文章就完成所有讲解。敬请关注之后的文章。

小贴纸笔者水平有限,难免有错误的地方,如果您发现,很希望能告诉我。raoul@foxmail.com是我的联系方式。也期待在学习中有任何的问题,能一起来讨论,期待您的来信。谢谢!

举报/反馈

排行

网站地图

Copyright © 2002-2022 香港德胜云网络 版权所有 | 备案号:蜀ICP备2023007363号-5

声明: 本站内容全部来自互联网,非盈利性网站仅供学习交流