ENGINE=InnoDB,Row_Format

本文深入解析Mysql表创建语句,包括字段编码格式、默认状态、校验、注解及约束等内容,适合初学者理解NOT NULL、DEFAULT、ENGINE=InnoDB等关键字的含义及其在表结构中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇文章着重点在创建表的语句解释,内容较浅,适合刚接触数据库的朋友

随着对Mysql不断学习,近期在使用Navicat创建数据库模型,发现不能保存模型了,于是出项了下面的一系列问题,我将设计好的模型通过复制,然后黏贴到word文档里,发现变成了sql创建语句。在观察语句时发现一些,以前没注意的事项,例如:表字段的编码格式,默认状态,校验,注解,表的约束等。在本文中如有错误的地方,麻烦读者指出,以便互相学习。

一般sql创建的认知

创建表:

create table user (id int primary key ,name varchar(30),address varchar(30) );

通过查询表属性结构:

 show create tables user

查询结果:

CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `name` varchar(30) DEFAULT NULL,
  `address` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE = utf8_general_ci COMMENT = '' ROW_FORMAT = Dynamic;

查询的创建语句和我们自己的语句比较,多出了一些修饰词,
NOT NULL、DEFAULT、ENGINE=InnoDB DEFAULT CHARSET=utf8等
一下就来解释一下他的含义。

NOT NULL为修饰词,通俗表示含义为该字段默认不能为空(此段落的空表示为NULL)。解释:如果一个字段中没有指定DEFAULT修饰符,MySQL会依据这个字段是NULL还是NOT NULL自动设置默认值。如果指定字段可以为NULL,则MySQL为其设置默认值为NULL。如果是NOT NULL字段,MySQL对于数值类型插入0,字符串类型插入空字符串,时间戳类型插入当前日期和时间。

ENGINE=InnoDB

这里是引用MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的 顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具. MyISAM表格可以被压缩,而且它们支持全文搜索.它们不是事务安全的,而且也不支持外键。如果事物回滚将造成不完全回滚,不具有原子性。如果执行大量 的SELECT,MyISAM是更好的选择。

InnoDB:这种类型是事务安全的.它与BDB类型具有相同的特性,它们还支持外键.InnoDB表格速度很快.具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。

启动mysql数据库的命令行中添加了以下参数可以使新发布的mysql数据表都默认为使用事务(
只影响到create语句。)
–default-table-type=InnoDB

Row_Format:

在MYSQL中,
若一张表里面不存在varchar、text以及其变形、blob以及其变形的字段的话,
那么张这个表其实也叫静态表[static/fixed],即该表的row_format是fixed,就是说每条记录所占用的字节一样。其优点读取快,缺点浪费额外一部分空间。
那么实际开发中,这种表很少,大部分表的字段类型都是有很多种的,那么这种表就叫做:dynamic :动态表
,优点是节省空间,缺点是读取的时间的开销

ROW_FORMAT 的值如下:

> DEFAULT
> FIXED 
> DYNAMIC
> COMPRESSED
> REDUNDANT
> COMPACT

修改row_format的参数:

 ALTER TABLE table_name ROW_FORMAT = DEFAULT 命令执行的结果:

 fixed--->dynamic: 这会导致CHAR变成VARCHAR

 dynamic--->fixed: 这会导致VARCHAR变成CHAR

注意:只有在MYSAM 的数据库引擎才支持这个属性:

mysql> alter table oem_idlib row_format = fixed; ERROR 1478 (HY000): 
Table storage engine 'InnoDB' does not support the create option 'ROW_TYPE'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值