# 数据库用于存储大量数据，并可以快速查找（分为网络、层级、关系数据库）
# 当前的物理数据库都是按照E-R模型进行设计的（关系数据库）
# E: entry 实体    R: relationship 关系
# 关系型数据库：存储在磁盘中
# 非关系型数据库：存储在内存中

# 一个实体转换为数据库中的一个表；关系描述两个实体间的对应规则（一对一、一对多、多对多）
# 一对多：可以在“多”表中创建一个“一”的字段，来维护多对一的关系
# 多对多：增加一个中间表，与对应的其他表形成多个多对一的关系
# 三范式： 1.列不可拆分（表中的每一个字段都不能再拆分了）
#          2.唯一标识（可以通过一个字段唯一地找到一个对象）
#          3.引用主键
# 后一个范式都是在前一个范式的基础上建立的

# 常用的数据（字段）类型：
# 数字：int（tinyint、smallint等）、decimal（浮点型）  decimal（4，2）最多可以有4位，其中小数最多占2位
# 字符串：char（固定）、varchar（可变）（前两个是有限长度的字符串）、text（大文本）
# 日期：date(yyyy-mm-dd)、time(hh:ii:ss)、datetime（同时包含日期与时间）
# timestamp（时间戳）：（从格林威治时间开始）其类型不能为空，默认值为当前时间戳对于时间，数据更新时，\
# 这个字段自动更新为当前最新的时间。
# Enum（枚举类型）（单选框）：如果某个字段数据只有固定的几种值，就可以使用Enum（enum(值1,值2...)）
# 布尔：bit（二进制数据）  bit(8)存储8个二进制位。该类型可以用于表示不同状态，比如灯的开关状态
# 集合(set)（复选框）：将多个数据同时保存的数据类型，1表示该选项被选中，0表示该选项未被选中
# set基本语法：set('值1','值2'...)； 插入值时：value('值1，值2...')

# 约束：
# 主键约束primary key：不能重复，唯一标识，根据主键找数据速度贼快
# 非空not null：数据不能为空
# 唯一unique：数据值不能重复
# 默认default：可以设置数据默认值
# 外键foreign key

# 一个对象一个表、一个属性一个字段

# ===============================================================

# 字段属性（列属性）：
# 分别为：null、默认值、列描述、主键、唯一键、自动增长
# 在语句字段属性后添加 NOT NULL可以设置不能为空
# 在语句字段属性后添加default 值 可以设置默认值
# 用insert插入数据的时候可以使用default来触发默认值
# 列描述（comment）相当于注释，在字段属性后加入comment '字段描述' 来添加
# 只能通过表创建语句来查看comment

# 主键：表中，有且只有一个字段，其值具有唯一性，不能为空
# 随表创建主键：1.直接在需要当作主键的字段属性后增加primary key属性
#               2.在所有字段后增加primary key选项：primary key(字段信息)
# 表后增加：基本语法：alter table 表名 add primary key(字段名);
#                   alter table student add primary key(id);
# 删除主键：alter table 表名 drop primary key;
# 复合主键：单一字段允许重复，但两个字段组合的值不能重复

# 唯一键：(unique key)用来保证对应的字段中数据的唯一性。在一张表中可以有多个唯一键
# 唯一键可以为null，唯一键为索引
# 创建唯一键：(同主键)在字段属性后加 unique key；或者在字段后使用unique key(字段列表)
# 表后增加唯一键：alter table 表名 add unique key(字段列表);
# 删除唯一键：alter table 表名 drop index 唯一键名字;
# 复合唯一键与复合主键一样
# 创建索引：create index 索引名 on 表名(字段名(长度));
# 删除索引：drop index 索引名 on 表名;

# ===============================================================
# 自动增长(auto_increment)：自动按序列填充数据，常用于逻辑主键
# 基本语法：在字段属性之后添加 auto_increment
# 修改自增长：alter table 表名 auto_increment = 值;
# 删除自增长：用modify重新定义字段属性即可
# 查看自增长初始变量：show variables like 'auto_increment%';

# ===============================================================
# 命令行方式启动MySQL：
# net start mysql开启服务   net stop mysql关闭服务

# 通过客户端(mysql.exe)登陆MySQL：
# 1.输入服务器地址 -h （host[IP地址/域名]）
# 2.输入MySQL监听端口 -P（port，默认3306）
# 3.输入用户名 -u（username）或root
# 4.输入密码 -p（password）或root
# mysql.exe -hlocalhost -P3306 -uroot -proot
# 退出：Exit;      或者\q

