MySQL数据库基础知识
MySQL自带4个数据库
information_schema:存储表信息,列信息等等,用户信息,简单理解为数据目录信息, 元数据
mysql:mysql数据库的核心数据库
performance_schema:数据库性能相关的信息
sys:数据都来自performance_schema,给DBA人员看更加方便
基础操作语句
查看所有的数据库 show databases;
创建数据库 create database 数据库名;
删除数据库 drop database 数据库名;
使用数据库 use 数据库名;
查看当前使用的数据库: select database(); ·默认没有使用数据库,显示null
退出mysql: exit 或者 quit
开发时,选择utf8编码,mysql配置就是utf8
查看编码相关信息: show variables like '%character%';
创建表基本语法:
create table 表名(
列1 类型 [约束],
列2 类型 [约束],
...
列n 类型 [约束]
);
表的命名:
组成:
mysql:字母,_,数字 oracle:字母,_,$,#,数字
长度不能超过32个字母
一般都是小写,多个单词之间用_分隔
建议:系统关系字大写, 大小写都不会报错
不能使用系统关键字
数据类型:
数值型
整型:
tinyint(1字节),smallint(2字节),mediumint(3字节),int(4字节),bigint(8字节)
主要使用int
小数:
浮点型:存储的是近似值
float(4字节):
double(8字节):
eg: float(10,2):根据需要制定有效位数是10,小数位2位
定点型:
decimal:精确存储,内部用字符串来存储的
eg:decimal(10,3): 有效位10位,小数位3位,实际占用空间有效位+2
文本型
char:定长的文本型
eg: name char(20):开辟20个字节,如果没有存储满,用空格填满
varchar:变成的文本型
eg: name varchar(20):最多可以存储20个字节,实际开辟空间由内容大小决定
char效率更高,如果值的长度是固定的,可以选择char
varchar:节约空间,如果值的长度不一致,可以选择varchar,使用的比较多
日期型
date:存储年月日 2019-01-21
time:存储时分秒 22:48:30
year:存储年 2019
datetime:存储年月日时分秒 2019-01-21 22:48:30 1000~9999范围 重点
timestamp:存储年月日时分秒 1970~2038范围, 如果不指定值,值会取当前时间
大数据量类型:
blob:可以存储大数据量的字节数据
text:可以存储大数据量的文本数据
比如存储图形信息:可以选择blob,但是也可以把图片存储到本地,把图片路径存到数据库
查看当前数据库下有哪些表: show tables;
查看某个表的结构: desc 表名;
查看表的创建语句: show create table 表名; show create table 表名 \G
删除表: drop table 表名;
约束:
非空约束: not null 空:没有给值,任意的,未知的
唯一约束: unique 如果有值,不能重复 学号可以使用唯一约束
默认约束:default, default 值 添加时,如果没有赋值,则取默认值
主键约束:primary key 保证行的唯一性
自动增长:auto_increment
适合主键,数值型,默认从1开始,每增加一行,值增加1
如果希望从n开始 create table 表名 (...) auto_increment=n;
导入脚本
source sql文件路径
source命令执行脚本,会按照从上到下的顺序依次执行
数据库设计三大范式:
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,后面的范式基于前面范式,越高的范式数据库冗余越小。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
第一范式(1NF):
字段不可再分,比如:收货人地址拆分成 省,市,区....
电话联系人 姓, 名
第二范式(2NF):
表中的字段不能部分依赖主键,只要不用联合主键, 只用一个列作为主键即可
通常,添加一个非业务字段作为主键
基于第一范式
第三范式(3NF):
表中的字段不能传递依赖
b字段依赖主键, c字段依赖b ,这就是一种传递依赖
单独设计一张和b有关的表,c放到b对应的表中
减少字段的冗余.
基于第二范式
外键约束:foreign key
mysql中InnoDB引擎支持外键约束
当两个表有关系的时候,一个表的列a引用另外一个表(也可能当前表)的列b(主键列,唯一列)
可以给列a添加外键约束
被引用的表:父表,
引用的表:子表
被引用的列只能是主键列或唯一列
引用的列值只能取被引用列存在的值或空
on update 选择,on delete 选择:父表发生更新操作或者删除操作时,子表如何做
选择:
restrict:父表删除修改被引用列值时,如果子表有关联的数据,不能完成操作,报错,默认参数
cascade:级联删除或级联修改
set null:当父表数据删除或者修改时,对应子表数据置空
no action:在innoDB引擎下,和restrict效果一样
父表数据删除时,对应的外键值置null 修改时,级联修改
单独添加外键:表修改语句
alter table 表名 add constraint foreign key(列名) references 被关联的表(被关联的列);