首页 > 数据库 >mysql 表

mysql 表

时间:2023-03-18 14:33:55浏览次数:47  
标签:index name definition ... mysql TABLE NULL

文档地址:https://dev.mysql.com/doc/refman/8.0/en/create-table.html

红色部分表示可以选配;

一、创建表语法

创建语法如下,红色部分为可选项;

创建:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [partition_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) }

二、 表名:

可以将表名指定为db_name.tbl_name,以便在特定数据库中创建表。无论是否有默认数据库,只要数据库存在,这都能起作用。如果使用带引号的标识符,请分别引用数据库和表的名称。例如,写入“mydb”`mytbl`,而不是`mydb.mytbl`。

例1:不带引号 只有表名;

CREATE TABLE demo_treeinfo (
`ID` int(11) not null AUTO_INCREMENT,
PRIMARY KEY (`ID`))

例2:不带引号 数据库名称.表名;

CREATE TABLE learn_index.demo_treeinfo (
`ID` int(11) not null AUTO_INCREMENT,
PRIMARY KEY (`ID`))

例3:带引号 只有表名;

CREATE TABLE `demo_treeinfo` (
`ID` int(11) not null AUTO_INCREMENT,
PRIMARY KEY (`ID`))

例4:带引号 数据库名称.表名;

CREATE TABLE `learn_index`.`demo_treeinfo` (
`ID` int(11) not null AUTO_INCREMENT,
PRIMARY KEY (`ID`))

 

[IF NOT EXISTS]:如果表存在,则防止发生错误。可选项;

TEMPORARY:TEMPORARY表仅在当前会话中可见,并在会话关闭时自动删除;一般不使用

创建表时可以使用TEMPORARY关键字。

 三、列:

例:

CREATE TABLE `demo_treeinfo` (
`ID` int(11) not null AUTO_INCREMENT,-- 类型为 int 长度为11 不能为空 自增
`PID` VARCHAR(50) NOT NULL,
`NAME` VARCHAR(50) DEFAULT NULL,,-- 类型为  VARCHAR长度为50 默认为空 如果不为空 则是`NAME` VARCHAR(50) DEFAULT ‘111’
`OPEN` CHAR(2) DEFAULT NULL,
`CREATOR` VARCHAR(50) DEFAULT NULL,
`MODIFIER` VARCHAR(50) DEFAULT NULL,
`CREATE_DATE` datetime DEFAULT NULL,
`MODIFY_DATE` datetime DEFAULT NULL,
`IS_DELETED` CHAR(2) DEFAULT NULL,
PRIMARY KEY (`ID`))

创建定义:create_definition:

create_definition: {
    col_name column_definition
  | {INDEX | KEY} [index_name] [index_type] (key_part,...)
      [index_option] ...
  | {FULLTEXT | SPATIAL} [INDEX | KEY] [index_name] (key_part,...)
      [index_option] ...
  | [CONSTRAINT [symbol]] PRIMARY KEY
      [index_type] (key_part,...)
      [index_option] ...
  | [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY]
      [index_name] [index_type] (key_part,...)
      [index_option] ...
  | [CONSTRAINT [symbol]] FOREIGN KEY
      [index_name] (col_name,...)
      reference_definition
  | check_constraint_definition
}

 列的定义 column_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
mysql 常用的数据类型 

)

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

关于data_type

可参官方文档:https://dev.mysql.com/doc/refman/8.0/en/data-types.html 

或者:

mysql 常用的数据类型 

NOT NULL | NULL

如果既没有指定NULL也没有指定NOT NULL,则该列将被视为已指定NULL。

  

DEFAULT(默认值)

指定列的默认值。

VISIBLEINVISIBLE

指定列可见性。如果两个关键字都不存在,则默认值为VISIBLE。表必须至少有一个可见列。

VISIBLE和INVISIBLE关键字从MySQL 8.0.23开始提供。在MySQL 8.0.23之前,所有列都是可见的。

 

AUTO_INCREMENT:应用场景为主键自增

整数或浮点列可以具有额外的属性AUTO_INCREMENT。在索引AUTO_INCREMENT列中插入NULL(推荐)或0的值时,该列将被设置为下一个序列值。通常情况下,这是值+1,其中值是表中当前列的最大值。AUTO_INCREMENT序列以1开头。

COMMENT(注释)

可以使用comment选项指定列的注释,最长可达1024个字符。注释由SHOW CREATE TABLE和SHOW FULL COLUMNS语句显示。它也显示在Information Schema COLUMNS表的COLUMN_COMMENT列中。

 

COLUMN_FORMAT

在NDB集群中,也可以使用COLUMN_format为NDB表的各个列指定数据存储格式。允许的列格式有FIXED、DYNAMIC和DEFAULT。FIXED用于指定固定宽度存储,DYNAMIC允许列为可变宽度,DEFAULT使列使用由列的数据类型(可能被ROW_FORMAT说明符重写)确定的固定宽度或可变宽度存储。

 

四、表的克隆和复制:

LIKE

复制 orig_tbl 表结构;不包括数据;

CREATE TABLE new_tbl LIKE orig_tbl;

query_expression

复制 orig_tbl 表结构和数据;

CREATE TABLE new_tbl AS SELECT * FROM orig_tbl;

 

五、索引

{INDEX | KEY} [index_name] [index_type] (key_part,...)
      [index_option] ...
  | {FULLTEXT | SPATIAL} [INDEX | KEY] [index_name] (key_part,...)
      [index_option] ...

mysql 索引(InnoDB)

 

六、表列的操作:

 

添加列

ALTER TABLE table
ADD [COLUMN] column_name column_definition [FIRST|AFTER existing_column]; 

 

ALTER TABLE VendorsCopy
ADD vend_phone CHAR(20) DEFAULT 'a';
  • 首先,在ALTER TABLE子句后指定表名。
  • 其次,将新列及其定义放在ADD COLUMN子句之后。请注意,COLUMN关键字是可选的,因此可以省略它。
  • 第三,MySQL允许您通过指定FIRST关键字将新列添加为表的第一列。它还允许您使用AFTER existing_column子句在现有列之后添加新列。如果您没有明确指定新列的位置,MySQL会将其添加为最后一列。

 

添加多列

 

ALTER TABLE table
ADD [COLUMN] column_name_1 column_1_definition [FIRST|AFTER existing_column],
ADD [COLUMN] column_name_2 column_2_definition [FIRST|AFTER existing_column],
...; 

 

删除列:

 

ALTER TABLE Vendors DROP COLUMN vend_phone;

 

修改列的数据类型

 

ALTER TABLE <表名> MODIFY <字段名> <数据类型>

 

ALTER TABLE tbl_test MODIFY IS_DELETED char(2)

 

 

 

标签:index,name,definition,...,mysql,TABLE,NULL
From: https://www.cnblogs.com/lixiuming521125/p/17229548.html

相关文章

  • MySQL 2023-03-18
    MySQLpractice1.createadatabasewithnameexample,andsetthecharactersettoutf82.altertheexampledatabase,andsetthecharactersettogbk3.dropthe......
  • linux下安装绿色版(glibc版)mysql-5.7.31
    安装依赖库libaio库#yuminstalllibaio-y上传软件包解压#tar-xfmysql-5.7.31-linux-glibc2.12-x86_64.tar.gz软件的安装第一步:创建一个数据库专用账号mysql(其所属组也......
  • mysql 常用的数据类型
    官网文档地址:https://dev.mysql.com/doc/refman/8.0/en/data-types.html常用的数据类型:NumericDataTypesDateandTimeDataTypesStringDataTypes,SpatialData......
  • MySQL行锁和表锁的含义及区别
    MySQL常用引擎有MyISAM和InnoDB,而InnoDB是mysql默认的引擎。MyISAM不支持行锁,而InnoDB支持行锁和表锁。如何加锁MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读......
  • MySQL中myisam与innodb的区别
    MyISAM不支持事务,但是每次查询都是原子的;支持表级锁,即每次操作对整个表加锁;存储表的总行数;一个MYISAM表有三个文件:索引文件、表结构文件、数据文件;采用非聚集索引,索......
  • Docker Mysql限制内存
    买了个阿里云的1G单核的服务器,运行了Docker装了数据库占用内存2/3的内存,然后再跑个Java小型程序直接死机,无奈只能减小mysql内存解决后效果:查询了网上资料总结解决方案:......
  • Redis:我大哥是mysql
    Redis:我大哥是mysql本文说明:简单梳理redis的设计redis某种角度上只是mysql的手下的工具人1.缓存管理redis的出现:作为缓冲区、以免mysql被大量请求冲烂宕机如果同......
  • 路飞:上线架构图、阿里云购买云服务器ECS、云服务器安装mysql、云服务器安装redis(源码
    目录一、上线架构图二、阿里云购买云服务器ECS2.1试用版云服务器ECS获取流程2.2ssh客户端连接远程服务器2.3finalshell连接远程数据库2.4远程服务器的准备工作三、云服务器......
  • mysql-information_schema 数据库
    1概述information_schema数据库跟performance_schema一样,都是MySQL自带的信息数据库。其中performance_schema用于性能分析,而information_schema用于存储数据库......
  • mysql count()的底层实现和其优化
    mysqlcount(*)的底层实现和其优化在业务中经常使用count(*)来计算行数,当有人问起其实现方式时,不能很好的解答......