您的位置:首页 > 数据库 > MySQL

MySQL 数据库学习笔记 2

2016-04-04 00:51 429 查看

1. 字符集

1.1 字符集变量

show variables;

show variables like ‘character_set%’; 显示所有和字符集相关的变量

show create database db_name; 显示数据库创建的字符集



windows 中 的my.ini 和 linux 中的 my.conf 中 设置了 mysql server 端的编码格式

1.2 校对规则

校对规则是指, 在当前编码格式下, 字符之间的比较顺序。

1. ci : 不区分大小写

2. cs: 区分大小写

3. bin: 二进制比较, 默认区分

可以使用 show collation; 来查看字符集

并且字符集一般都是 按照 : 字符集_地区名_比较规则 构成的。

show collation like ‘utf8%’; 显示和utf 相关的字符集



在创建表格的时候, 可以同时制定相应表格的字符集和相应的校对规则:

create table tbl_name(id int) character set gbk collate gbk_chinese_ci;



在我们创建完一个数据库后, 硬盘上会创建相应的 db.opt 文件, 里面有 数据库的基本信息, 其中就包含数据库所使用的字符集和 校对规则。



另外, 校对规则一般对数据的存储没什么影响, 但是对涉及到 排序操作 order by 的时候, 会有影响。

2. 列类型

列类型主要可以分为 3 类:

1. 数值类型

2. 日期时间类型

3. 字符串类型

2.1 数值类型

2.1.1 整数类型

tinyint , smallint, mediumint, int, bigint, 分别 占据 1, 2, 3, 4, 8 个字节

和 C/C++ 一样, 整数类型是区分有符号和 无符号的, 用unsigned 区分。

TYPE(M) , 这里 M 一般用来表示显示的最小宽度

使用 前导零填充 zerofill

2.1.2 小数类型

2.1.2.1 浮点数

容易造成精度丢失的问题。

float 一般 6 ~ 7 有效位数, 4 字节

double 一般 16 ~ 17 有效位数, 8字节

TYPE(M, N) 可以用来控制表示范围, 其中, M 表示所有数字的位数, 不包含小数点和正负号。 而 N 表示所允许的小数部分的位数, 在确定了 M, N 之后, M-N 就确定了 整数部分的最大的位数。

2.1.2.2 定点数

decimal(M, N), M 表示所有有效数字的位数, N 为 小数部分的位数

默认情况下, M : 10, N : 0

他能保证精度不会丢失, 支持zerofill

需要注意的是, 他是一个变长的类型。

2.2 日期和时间类型

Datetime 年月日时分秒, 8字节, 分割符可以随意

timestamp 时间戳类型, 4 字节, 按整数类型存储, 但是按照Datetime 类型表示

Date 年月日 3字节

time 时分秒 3字节 既可以表示1天中的某个时刻, 也可以表示35 天以内的时间间隔

year 年 1字节 1901 ~ 2155

ps: 检索的时候, xxx + 0 表示用他实际存储的类型表示

2.3 字符串类型

char(M) 固定长度, M 表示允许的字符串的长度(字符数), 物理上, 最大字节数 255

varchar(M) 变长, 当字符数大于 255 时候, 需要2 个额外字节保存字符串长度, 小于 255 时候, 只要 1 个额外字节。

字段的最大长度限制, 和 类型本身限制 以及 row 长度限制 有关联。

真实 varchar 的长度讨论,

在一个表中, row 一般不超过 65535, 而 varchar 超过255时候, varchar 自身占据 2 个字节, 另外如果表中有允许null 属性的字段, 需要额外 1 个字节进行记录 null 的信息, 此时对结构:

create table tbl_name(
varchar(65532)
) character set latin1;


这是成立的, 并且varchar 最大最大也就只能分配这么多给数据了。

5. text, tinytext,mediumtext, longtext, 它相当于指定了最大长度的varchar。

6. enum 枚举类型, 内部是整形

7. set 集合类型, 8字节, 最多64 个状态, 每个状态使用一个bit 表示

8. binary, varbinary, blob 二进制数据 字节表示的。

3. 列属性

not null

default

primary key 主键, 通常主键不应该与实体有联系, 他是代表记录唯一的索引。

2 中定义方法:

type_name type [primary key]

primary key(key) 这种方法, 较上面这种可以定义组合主键 : primary key(a, b), ie, 一个主键上面包含了 a, b 两个字段, 然而, 一个表韩式只有一个主键

auto_increment, 主动增长, 要求 整形数据, 带有索引。 在插入数据的时候, 可以插入null 或者 不插入该项数据。

另外, 我们可以设置表的默认自动增长的起始值, 默认为 1, 但是如果设置的值, 比我们当前的最大值 小的话, 是无效的。

外键约束

数据库中的相应约束:

唯一性主键外键检查约束空值默认值
uniqueprimary keyforeign keychecknot nulldefault

4. 实体之间的关系

4.1 1: 1 实体关联

通常用在数据库优化的过程中, 将一个较大的表拆成两个部分, 一个部分是常用信息实体, 另一个部分是详细但不常用的信息实体(垂直分割)

在数据库中, 通常采用 在两个实体表内存放相同主键字段来实现这种关联

4.2 1:n 实体关联

通常采用在较多对象那一侧添加一个字段的方式, 用来存储另一个实体的标识信息(主键)

ex. 一个班级对应多个学生

4.3 M:N 实体关联

通常采用一个中间表, 记录实体之间的对应关系。

本质上, 就是将 M : N 实体关联拆解成 两个 1: N 实体关联。

ex. 班级 和 讲师之间的关系
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: