本篇文章着重点在创建表的语句解释,内容较浅,适合刚接触数据库的朋友
随着对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'