1:E-R图
正方体:实体,一般为名词
椭圆形:属性,一般为名词
菱形:关系,一般为动词
2:E-R图与关系模式的转化
用二维表的形式表示实体和实体间联系的数据模型即关系模式
E-R图转换为关系模式的步骤 1. 把每个实体都转化为关系模式R(U)形式 2. 建立实体间联系的转换
3:为什么需要数据规范化
不合规范的表设计 信息重复 更新异常 插入异常 无法正确表示信息 删除异常
4:三大范式:
第一范式的目标是确保每列的原子性 如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)
第二范式要求每个表只描述一件事情
第三范式如果一个关系满足2NF,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式(3NF)
第一范式确保每列的原子性
第二范式要求每个表只描述一件事情
第三范式要求表中各列必须和主键直接相关,不能间接相关
5:规范化和性能的关系
为满足某种商业目标,数据库性能比规范化数据库更重要 通过在给定的表中添加额外的字段,以大量减少需要从中搜索信息所需的时间 通过在给定的表中插入计算列(如成绩总分),以方便查询 在数据规范化同时,要综合考虑数据库的性能
my sql运行机制总结:
MySQL的优势 运行速度快 使用成本低 可移植性强 适用用户广
MySQL的配置
使用配置向导配置 端口号:3306 默认字符集:utf8 将bin目录写入 环境变量 root密码设置
命令行连接MySQL
语法:mysql –h服务器主机地址 –u 用户名 –p密码
创建数据库
语法:CREATE DATABASE 数据库名;
查看数据库列表
语法:SHOW databases;
选择数据库
语法:USE 数据库名;
删除数据库
语法:DROP DATABASE 数据库名;
MySQL数据类型
TINYINT 非常小的数据
SMALLINT 较小的数据
MEDIUMINT 中等大小的数据
INT 标准整数
BIGINT 较大的整数
FLOAT 单精度浮点数
DOUBLE 双精度浮点数
DECIMAL 字符串形式的浮点数
UNSIGNED属性 标识为无符号数
ZEROFILL属性 宽度(位数)不足以0填充
字符串
CHAR[(M)] 定长字符串
VARCHAR[(M)] 可变字符串
TINYTEXT 微型文本串
TEXT 文本串
日期类型
DATE YYYY-MM-DD,日期格式
DATETIME YY-MM-DD hh:mm:ss:
TIME hh:mm:ss:
TIMESTAMP YYYYMMDDHHMMSS
YEAR YYYY格式的年份
创建表
CREATE TABLE [IF NOT EXISTS] 表名 ( 字段1 数据类型 [字段属性|约束][索引][注释], …… 字段n 数据类型 [字段属性|约束][索引][注释] )[表类型][表字符集][注释];
字段的约束及属性
字段的约束及属性3-1
非空约束 NOT NULL 字段不允许为空
默认约束 DEFAULT 赋予某字段默认值
唯一约束 UNIQUE KEY(UK) 设置字段的值是唯一的允许为空,但只能有一个空值
主键约束 PRIMARY KEY(PK) 设置该字段为表的主键可唯一标识该表记录
外键约束 FOREIGN KEY(FK) 用于在两表之间建立关系,需要指定引用主表的哪
一 字段
自动增长 AUTO INCREMENT 设置该列为自增字段默认每条自增1通常用于设置主键
查看表
DESCRIBE 表名; 或 DESC 表名;
删除表
DROP TABLE [IF EXISTS] 表名;
MySQL的存储引擎
语法:SHOW VARIABLES LIKE ‘storage_engine%’;
修改存储引擎
default-storage-engine= InnoDB
设置表的存储引擎
CREATE TABLE 表名( #省略代码 )ENGINE=存储引擎;
MySQL系统帮助
语法:HELP 查询内容;
修改表
#修改表名
ALTER TABLE 旧表名 RENAME [TO] 新表名;
#添加字段
ALTER TABLE 表名 ADD 字段名 数据类型 [属性];
#修改字段
ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型 [属性];
#删除字段
ALTER TABLE 表名 DROP 字段名;
添加主键
语法:
ALTER TABLE 表名 ADD CONSTRAINT 主键名 PRIMARY KEY 表名(主键字段);
添加外键
语法:
ALTER TABLE 表名 ADD CONSTRAINT 外键名
FOREIGN KEY(外键字段)
REFERENCES 关联表名(关联字段);
DML语句——插入单条数据记录
语法:
INSERT INTO 表名 [(字段名列表)] VALUES (值列表);
DML语句——插入多条数据记录
语法:
INSERT INTO 新表(字段名列表) VALUES(值列表1),(值列表2),……,(值列表n);
LIMIT子句
语法:
SELECT <字段名列表> FROM <表名或视图>
[WHERE <查询条件>] [GROUP BY <分组的字段名>]
[ORDER BY <排序的列名> [ASC 或 DESC]] [LIMIT [位置偏移量, ]行数];
子查询
子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询 子查询在WHERE语句中的一般用法
语法:
SELECT … FROM 表1 WHERE 字段1 比较运算符(子查询)
比较运算符:子查询只能返回单个数值
IN/NOT IN:子查询可返回多条记录
常用IN替换等于(=)的子查询
IN后面的子查询可以返回多条记录
数据库优化
1、选取最适用的字段属性
2、使用连接(JOIN)来代替子查询(Sub-Queries)
3、使用外键
sql语句优化