Mysql数据类型、数据库操作、数据表操作

目录

  • 1. 数据类型
  • 2. 数据库操作
  • 3. 数据表操作
    • 3.1 创建数据表
    • 3.2 查看数据表
    • 3.3 修改表结构
    • 3.4 重命名表
    • 3.5 删除表
    • 3.6 InnoDB表的DDL支持事务完整性

1. 数据类型

类型 类型举例
整数类型 TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT
浮点类型 FLOAT、DOUBLE
定点数类型 DECIMAL
位类型 BIT
日期时间类型 YEAR、TIME、DATE、DATETIME、TIMESTAMP
文本字符串类型 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
枚举类型 ENUM
集合类型 SET
二进制字符串类型 BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB
JSON类型 JSON对象、JSON数组
空间数据类型 单值:GEOMETRY、POINT、LINESTRING、POLYGON
集合:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、 GEOMETRYCOLLECTION

常用的几类类型介绍如下:

数据类型 描述
INT − 2 31 -2^{31} 231 2 31 − 1 2^{31}-1 2311的整型数据。存储大小为4个字节
CHAR(size) 定长字符数据。若未指定,默认为1个字符,最大长度255
VARCHAR(size) 可变长字符数据,根据字符串实际长度保存,必须指定长度
FLOAT(M,D) 单精度,占用4个字节,M=整数位+小数位,D=小数位。D<=M<=255, 0<=D<=30,默认M+D<=6
DOUBLE(M,D) 双精度,占用8个字节,D<=M<=255, 0<=D<=30,默认M+D<=15
DECIMAL(M,D) 高精度小数,占用M+2个字节,D<=M<=65,0<=D<=30,最大取值范围与DOUBLE相同
DATE 日期型数据,格式YYYY-MM-DD
BLOB 二进制形式的长文本数据,最大可达4G
TEXT 长文本数据,最大可达4G

2. 数据库操作

创建数据库

mysql> create database if not exists test character set utf8mb4;
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> 

database不能改名。一些可视化工具可以改名,它是建新库,把所有表复制到新库,再删旧库完成的

查看当前正在使用的数据库

mysql> select database();
+------------+
| database() |
+------------+
| test       |
+------------+
1 row in set (0.00 sec)

mysql> 

更改数据库字符集

mysql> alter database test character set utf8mb4;
Query OK, 1 row affected (0.03 sec)

mysql>

3. 数据表操作

3.1 创建数据表

创建方式一语法

CREATE TABLE [IF NOT EXISTS] 表名(
字段1, 数据类型 [约束条件] [默认值],
字段2, 数据类型 [约束条件] [默认值],
......
[表约束条件]
);

创建表时,int类型会被设置为int(11),这里的11是int类型的显示宽度

创建方式二语法

CREATE TABLE 表名
[(column, column, ......)]
As subquery;

示例如下:

mysql> create table tb2 (
    -> id int not null default 0,
    -> name varchar(64)
    -> ) select id, name from tb1;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql>

3.2 查看数据表

mysql> desc tb2;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   |     | 0       |       |
| name  | varchar(64) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> 

3.3 修改表结构

向已有的表中添加列
语法:

ALTER TABLE 表名 ADD [COLUMN] 字段名 字段类型 [FIRST|AFTER 字段名];

修改现有表中的列
可以修改列的数据类型,长度、默认值和位置,语法如下:

ALTER TABLE 表名 MODIFY [COLUMN] 字段名 字段类型 [DEFAULT 默认值] [FIRST|AFTER 字段名];

对默认值的修改只影响后面插入的行数据

删除现有表中的列
语法:

ALTER TABLE 表名 DROP [COLUMN] 字段名

重命名现有表中的列
语法:

ALTER TABLE 表名 CHANGE [column] 列名 新列名 新数据类型;

3.4 重命名表

方式一:

RENAME TABLE 表名 TO 表名;

方式二:

ALTER TABLE 表名 RENAME [TO] 表名;

3.5 删除表

删除表结果和数据语法:

DROP TABLE [IF EXISTS] 数据表1[, 数据表2, …..., 数据表n];

清空表数据使用truncate,truncate不支持事务且不能触发trigger

3.6 InnoDB表的DDL支持事务完整性

InnoDB表的DDL支持事务完整性,即DDL操作要么成功要么回滚 。DDL操作回滚日志写入到data dictionary数据字典表mysql.innodb_ddl_log(该表是隐藏的表,通过show tables无法看到)中,用于回滚操作

如下所示:

mysql> drop table tb2, tb3;
ERROR 1051 (42S02): Unknown table 'test.tb3'
mysql> 
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| tb1            |
| tb2            |
+----------------+
2 rows in set (0.01 sec)

mysql> 

tb2表被回滚,并没有删除

你可能感兴趣的:(数据库和数据湖,mysql,数据类型,修改表结果,重命名表,事务完整性)