学完mysql后,自己弄得的思维导图。原图30.6MB,太大了放不上来,这里就放个链接吧。
欢迎大家去看,如果有需要改正的地方,请告诉我,谢谢。
链接:https://www.zhixi.com/view/718f3805
密码:6522
下面是MarkDown形式的的内容,但是缺少一些图片。完整的在思维导图上。
mysql数据库
使用DOS命令行窗口连接MySQL数据库
连接到mysql数据服务(mysql数据库)的指令:
mysql -h 主机IP -P 端口名 -u 用户名 -p密码
【注意事项】:
1、-p密码 之间不要有空格。
2、-p后面如果没有写密码,回车之后会要求输入密码。
3、如果没有写 -h 主机,则默认就是本机。
4、如果没有写 -P 端口名,则默认就是3306。
5、在实际工作中,为保证安全,一般会将3306改为其他端口号。
启动数据库 的常用方式
net start mysql服务名
net stop mysql服务名
安装图形化MySQL管理软件
Navicat
SQLyog
数据库的三层结构
1、所谓的安装mysql数据库,就是在主机安装一个“数据库管理系统(DBMS)”,这个管理程序可以管理多个数据库。
DBMS(Database manage system)
2、一个数据库可以创建多个表,以保存数据(信息)
3、数据库管理系统,数据库 和 表的关系。如上图所示
4、mysql数据库 – 普通表的本质仍然是文件。表的一行(row)称之为一条记录,在 Java 程序中,一行记录往往使用“对象”来表示。
SQL语句的分类
DDL:数据定义语句【create 表,库…】
DML:数据操作语句【增加 insert,修改 update,删除 delete】
DQL:数据查询语句【select】
DCL:数据控制语句【管理数据库:例如用户权限(grant,revoke)】
对数据库的增、删、查
创建数据库
create datebase [if not exists] 数据库名 [default] character set 字符集名 [default] collate 校对规则名;
显示数据库语句
show databases;
显示数据库创建(定义信息)语句
show create database 数据库名;
删除数据库
drop database [if exists] 数据库名;
备份恢复数据库
备份数据库(在DOS命令行)
mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > 文件名.sql
恢复数据库(进入mysql命令行,然后执行)
source 文件名.sql
例如:source d:\bak.sql ;
直接将 bak.sql 的内容放到查询编辑器中,执行。
备份恢复数据库的“表”
备份库的表
mysqldump -u 用户名 -p密码 数据库1 表1 表2 表n > d:\文件名.sql
创建表
field: 指定列名
datatype: 指定列类型(字段类型)
character set: 如果不指定,则为所在数据库的字符集
collate: 如果不指定,则为所在数据库的校对规则
engine: 存储引擎
mysql表类型 和 存储引擎
基本介绍
- 1、mysql的表类型由存储引擎(storage engines)决定,主要包括:MyISAM、innodb、Memory 等。
2、MySQL数据表主要支持 6种类型,分别是:CSV、Memory、ARCHIVE、MGR MYISAM、MYISAM、InnoDB。
3、这六种又分为2类:一类是“事务安全型”(transaction-safe),比如:innodb ;
其余都属于第二类,称为“非事务安全”型(non-transaction-safe)【myisam 和 memory】
主要的 存储引擎/表 类型特点
细节说明
- 1、MyISAM不支持事务,也不支持外键,但是其访问速度快,对事物的完整性没有要求。
2、InnoDB存储引擎提供了具有 提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间,以保留数据和索引。
3、Memory存储引擎使用“存在内存中的内容”来创建表。每个Memory 表只实际对应一个磁盘文件。Memory类型访问非常得快,因为它的数据是存储在内存中的,并且还使用Hash索引。但是一旦 MySQL服务关闭,表中的数据就会丢失掉,但是“表的结构”还在。
如何使用MyISAM、InnoDB、Memory三种存储引擎 ?
-
– 查看所有的存储引擎
SHOW ENGINES; -
– innodb存储引擎是前面使用过的。
/* 1、支持事务;2、支持外键;3、支持行级锁 */
如何选择表的存储引擎
- 1、如果你的应用不需要事务,处理的只是基本的CRUD操作,那么MylSAM
是不二选择,速度快
2、如果需要支持事务,选择lnnoDB。
3.、Memory存储引擎就是将数据存储在内存中,由于没有磁盘I./O的等待,
速度极快。但由于是内存存储引擎,所做的任何修改在服务器重启后都将消失。(经典用法:用户的在线状态)
修改存储引擎
- ALTER TABLE
表名
ENGINE = 存储引擎 ;
约束
primary key(主键)
用于唯一的标示表行的数据,当定义主键约束后,该列不能重复
【细节说明】:
1、primary key 不能重复,而且不能为null。
2、一张表最多只能有一个主键,但可以是复合主键。
3、主键的指定方式有两种
(1)在创建表时,直接在字段名后指定:字段名 字段类型 primary key
(2)在表定义的最后一行填写,此时还在()内部:primary key(列名),
4、使用 desc 表名 可以看到 primary key 的情况。
5、在实际开发中,每个表往往都会设计一个主键。
【举例】
CREATE TABLE t17(
id INT PRIMARY KEY, – 表示 id 列是主键
name
VARCHAR(32),
email VARCHAR(32)
);
复合主键
-
一张表最多 只能有一个主键,但是可以是复合主键(那也只能有1个)。
CREATE TABLE t18(
id INT PRIMARY KEY,
name
VARCHAR(32) PRIMARY KEY,-- 错误
email VARCHAR(32)
); -
/* 演示复合主键的使用(id和name做成复合主键) */
CREATE TABLE t18(
id INT,
name
VARCHAR(32),
email VARCHAR(32),
PRIMARY KEY (id,name
) – 这里就是复合主键,以后添加数据时,只有id和name同时发生重复时,才会报错。
);
not null(非空)
如果在列上定义了not null,那么插入数据时,必须为列提供数据。
字段名 字段类型 not null
自增长
基本介绍
- 在某张表中,存在一个id列(整数),我们希望在添加记录的时候,该列从 1 开始,自动增长。
使用细节
- 1、一般来说,自增长和 primary key 配合使用。
2、自增长也可以单独使用(但是需要配合一个 unique)
3、自增长修饰的字段为整数型的。(虽然小数也可以但是很少这样使用)
4、自增长默认从1开始,也可以通过下列命令来修改
alter table 表名 auto_increment = 新的开始值 ;
5、如果添加数据时,给自增长字段(列)指定的有值,则以指定的值为准。如果指定了自增长,就按照自增长的规则来添加数据。
添加 自增长的的字段方式
- (1)insert into xxx(字段1,字段2,…) values(null,‘值’,…) ;
– null对应字段1,如果字段1是自增长的,那么添加之后就是1,之后2,3。
- (2)insert into xxx(字段2,…) values(‘值1’,‘值2’,…) ;
– 直接从字段2开始写,值1对应字段2,…不给字段1赋值,它会自己从1开始增长。
- (3)insert into xxx values(null, ‘值1’,…)
– 前面直接什么都不写,然后把所有数据的值都写清楚,它会自动的添加。
举例
-
创建表
-
测试自增长的使用
- INSERT INTO t24
VALUES(NULL, ‘tom@qq.com’,‘tom’);
- INSERT INTO t24
这里的null给的是id,因为id是自增长的,所以虽然写的是null,但是实际上给的是1。再执行一次,给tom分配的id为2。
* 执行一次,给hsp分配的id为3
INSERT INTO t24
(email,name
) VALUES(‘hsp@123.com’,‘hsp’);
-
修改默认的自增长开始值
unique(唯一)
在定义了唯一约束后,该列的值是不能重复的。
字段名 字段类型 unique
【细节】:
1、如果没有指定 not null,则unique字段可以有多个 null。
2、一张表可以有多个 unique字段。
3、unique not null 使用效果类似 primary key
foreign key(外键)
用于定义 主表 和 从表 之间的关系:
1、外键约束要定义在“从表”上,“主表”则必须要有“主键约束”或者“unique”约束。这样形成的外键约束关系才是唯一的。
2、当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null。
【举例】学生表(从表,即:外键所在的表) 班级表(主表)
id, name, class_id id, class_name
1、学生表的class_id为300的,在班级表中并不存在,所以就会添加失败,这叫外键约束.
2、如果学生表的jack和班级表已建立联系再删除班级表的id就会失败,得先删除学生表的jack才行,也叫外键约束
【基本语法】
foreign key(本表字段名) references 主表名(主键名或者unique字段名)
【细节说明】
1、外键指向的主表的字段,必须是primary key 或者 unique;
2、表的类型(存储引擎)是“innodb”,这样的表才支持外键
3、外键字段的类型和关联的主键字段的类型要一致,长度可以不一样。
4、外键字段的值,必须在主键字段中出现过,或者为“null”【前提是:外键字段允许为null】
5、一旦建立了 主键、外键的关系,数据就不能随意删除了。
6、删除主表的记录能否成功,要看是否有从表的外键指向它。如果有,则把从表中的相关记录全部删掉,然后再删主表的记录
check
check:用于强制行数据必须满足的条件。
假定在sal列上,定义了check约束,并要求sal列的值在1000~2000之间。如果不在这个范围内就会报错。
【老韩提示】oracle和sql server均支持check,但是MySQL5.7 目前还不支持check,只做语法校验,但不会生效。
即:语法上支持,但运行不会生效, 如果不满足check的条件,语句也会执行。
【基本语法】:列名 类型 check (check的条件)
【举例】
CREATE TABLE t23(
id INT PRIMARY KEY,
name
VARCHAR(32),
sex VARCHAR(6) CHECK (sex IN (‘man’,‘woman’)),
sal DOUBLE CHECK (sal>1000 AND sal<2000)
);
mysql常用的的“数据类型”(列类型)
数值型(整数)的基本使用
使用规范:在满足需求的情况下,尽量选择占用空间小的。
#1. 如果没有指定 unsinged , 则 Ttinyint 就是有符号
#2. 如果指定 unsinged , 则 tinyint 就是无符号 0-255
【举例】
create table t01(id tinyint); # 有符号的
create table t01(id tinyint unsigned); # 无符号的