七、库相关操作
7.1、系统数据库
information_schema:虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等。
performance_schema:mysql 5.5 开始新增的一个数据库。主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象。
mysql:授权库,主要储存用户的权限信息。
test:MySQL 数据库系统自动创建的测试数据库。
7.2、数据库命名规则
可以由字母、数字、下划线、@、#、$ 等组成
区分大小写
名字唯一
不能使用关键字,如 create、select
不能单独使用数字
最长128位
7.3、数据库相关操作
1、查看数据库
show databases; # 查看所有数据库 show create database db1; # 查看指定数据库 select database(); # 查看当前所在数据库
2、选择数据库
use db1;
3、修改数据库
alter database db1 charset utf8;
4、删除数据库
drop database db1;
八、表相关操作
8.1、储存引擎
1、什么是存储引擎
又称作表类型,根据表的不同类型,对应 MySQL 不同的存取机制。
MySQL 数据库提供了多种储存引擎,用户可以根据不同需求为数据表选择不同储存引擎,也可自己编写一个存储引擎。
8.2、MySQL的几个重要的存储引擎
1、Innodb 存储引擎
支持事务,行锁和外键。其设计目标主要面向联机事务处理(OLTP)的应用。并支持类似 Oracle 的非锁定
读,即默认读取操作不会产生锁。是目前默认的存储引擎。
建表的时候 innodb 会产生两个文件
一个是表结构文件
一个是存储数据文件
2、myisam 存储引擎
不支持事务、表锁设计,支持全文索引。它的缓冲池只缓存索引文件,而不缓存数据文件,这与大多数数据库都不相同。查询
速度较 Innodb 快,但安全性不及 Innodb。
建表的时候 innodb 会产生三个文件
一个是表结构文件
一个是索引文件
一个是存储数据文件
3、memory 存储引擎
数据存放在内存中,数据库重启或崩溃,表中的数据都会消失。
建表的时候仅仅生成一个表结构文件
4、blackhole 存储引擎
存入的数据都会消失
建表的时候仅仅生成一个表结构文件
8.3、使用存储引擎
create table t1(id int) engine=innodb; create table t2(id int) engine=myisam; create table t3(id int) engine=memory; create table t4(id int) engine=blackhole;
九、表介绍
表相当于文件,表中的一条记录相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段。
9.1、创建表
1、语法
create table t1( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] );
2、注意
在同一张表中,字段名不能相同
宽度和约束条件可选
字段名和类型必须写
十、数据类型
10.1、常用数据类型概览
1、数字
整型:tinyint int bigint
小数:
float:在位数比较短的情况下不精准
double:在位数比较长的情况下不精准
decimal:精准,内部原理是以字符串形式去存,推荐使用
2、字符类型
char(10):简单粗暴,浪费空间,存取速度快 # 将 root 存成 root000000
varchar:精准,节省空间,存取速度慢
sql 优化:创建表时,定长的类型往前放(不如性别),变长的往后放(比如地址)
3、时间类型
datatime
4、枚举类型和集合类型
10.2、数值类型
1七、库相关操作
7.1、系统数据库
information_schema:虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等。
performance_schema:mysql 5.5 开始新增的一个数据库。主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象。
mysql:授权库,主要储存用户的权限信息。
test:MySQL 数据库系统自动创建的测试数据库。
7.2、数据库命名规则
可以由字母、数字、下划线、@、#、$ 等组成
区分大小写
名字唯一
不能使用关键字,如 create、select
不能单独使用数字
最长128位
7.3、数据库相关操作
1、查看数据库
show databases; # 查看所有数据库 show create database db1; # 查看指定数据库 select database(); # 查看当前所在数据库
2、选择数据库
use db1;
3、修改数据库
alter database db1 charset utf8;
4、删除数据库
drop database db1;
八、表相关操作
8.1、储存引擎
1、什么是存储引擎
又称作表类型,根据表的不同类型,对应 MySQL 不同的存取机制。
MySQL 数据库提供了多种储存引擎,用户可以根据不同需求为数据表选择不同储存引擎,也可自己编写一个存储引擎。
8.2、MySQL的几个重要的存储引擎
1、Innodb 存储引擎
支持事务,其设计目标主要面向联机事务处理(OLTP)的应用。其特点是行锁设计、支持外键,并支持类似 Oracle 的非锁定
读,即默认读取操作不会产生锁。是目前默认的存储引擎。
2、myisam 存储引擎
不支持事务、表锁设计、支持全文索引。它的缓冲池只缓存索引文件,而不缓存数据文件,这与大多数数据库都不相同。查询
速度较 Innodb 快,但安全性不及 Innodb。
3、memory 存储引擎
数据存放在内存中,数据库重启或崩溃,表中的数据都会消失。
4、blackhole 存储引擎
存入的数据都会消失
8.3、使用存储引擎
create table t1(id int) engine=innodb; create table t2(id int) engine=myisam; create table t3(id int) engine=memory; create table t4(id int) engine=blackhole;
九、表介绍
表相当于文件,表中的一条记录相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段。
9.1、创建表
1、语法
create table t1( 字段名1 类型[(宽度) 约束条件]. 字段名2 类型[(宽度) 约束条件]. 字段名1 类型[(宽度) 约束条件]. );
2、注意
在同一张表中,字段名不能相同
宽度和约束条件可选
字段名和类型必须写
十、数据类型
10.1、常用数据类型概览
1、数字
整型:tinyint int bigint
小数:
float:在位数比较短的情况下不精准
double:在位数比较长的情况下不精准
decimal:精准,内部原理是以字符串形式去存,推荐使用
2、字符串
char(10):简单粗暴,浪费空间,存取速度快 # 将 root 存成 root000000
varchar:精准,节省空间,存取速度慢
sql 优化ti:创建表时,定长的类型往前放(不如性别),变长的往后放(比如地址)
3、时间类型
datatime
4、枚举类型和集合类型
10.2、整型
整数类型默认有符号,可设置为无符号
create table t1 (x int unsigned);
对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制,因此在创建表时,如果是整型类型,无需指定显示宽度。
zerofill 用 0 填充不足的位数。
10.3、浮点型
字段限制特点
float(5,3) 前一位表示所有的位数,后一位表示小数个数
float(单精度浮点数):
m 最大为255,d 最大为30
double(双精度浮点数):
m 最大为255,d 最大为30
decimal
m 最大为65,d 最大为30
10.4、字符串类型
char(4) 定长:最大存储四个字符,超出报错,不足默认用空格占位
varchar(4) 变长:最大存储四个字符,超出报错,不足有几位存几位
char:
存取速度快,浪费硬盘空间
varchar:
存取速度慢,节省硬盘空间
10.5、时间类型
分类:
date:2019-05-01
time:11:11:11
datetime:2019-01-02 11:11:11
year:2019
10.6、枚举与集合类型
枚举:enum,多选一
集合:set,多选多
create table t1( id int, name char(16), gender enum('male','female','others') ); insert into user values(1,'a','xxx') # 报错 insert into user values(2,'b','female') # 正确! create table t2( id int, name char(16), gender enum('male','female','others'), hobby set('read','sleep','eat','dbj') ); insert into t2 values(1,'a','male','read,sleep,dbj') # 集合也可以只存一个
十一、表完整性约束
11.1、介绍
primary key(PK) 标识该字段为该表的主键,可以唯一的标识记录
foreign key(FK) 标识该字段为该表的外键
not null 标识该字段不能为空
unique key(UK) 标识该字段的值时唯一的
auto_increment 标识该字段的值自动增长(整数类型,且为主键)
default 设置默认值
unsigned 无符号
zerofill 使用 0 填充
11.2、not null + default
create table user( id int, name char(16) ); insert into user values(1,null) # 可以修改 alter table user modify name char(16) not null; insert into user(name,id) values(null,2); # 报错 插入数据可以在表名后面指定插入数据对应的字段 create table student( id int, name char(16) not null, gender enum('male','female','others') default 'male' ) insert into student(id,name) values(1,'n') # 成功
11.3、unique
单列唯一,限制某一个字段是唯一的
create table user1(
id int unique,
name char(16)
);
insert into user1 values(1,'a'),(1,'b') # 报错
insert into user1 values(1,'a'),(2,'b') # 成功
联合唯一,在语句的最后,用括号的形式,表示那几个字段组合的结果是唯一的
create table server( id int, ip char(16), port int, unique(ip,port) ) insert into server values(1,'127.0.0.1',8080); insert into server values(2,'127.0.0.1',8080); # 报错 insert into server values(1,'127.0.0.1',8081);
11.4、primary key + auto_increment
1、单从约束角度来说 primary key 等价于 not null unique
create table t11(id int primary key); desc t11; insert into t11 values(1),(1); # 报错 insert into t11 values(1),(2);
2、primary keys 也是 innodb 引擎查询必备的索引
2.1、innodb 引擎在创建表的时候,必须要有一个主键,如果没有设置主键
1、那么会从上到下搜索直到遇到一个非空且唯一的字段,自动升级成主键
2、当你的表中没有任何的约束条件,innodb 会采用自己的内部默认的一个主键字段,将其设置为主键。
该主键字段在查询时无法使用。因此查询速度变慢。
create table t1( id int, name char(16), age int not null unique, addr char(16) not null unique )engine=innodb; desc t1;
3、联合主键:多个字段联合起来作为表的一个主键,本质还是一个主键。
create table t1( ip char(16), port int, primary key(ip,port) ); desc t1;
4、 主键字段应该具备自动递增的特点,每次添加数据,不需要用户手动输入
# auto_increment 自动递增,只能加载在设置成key的字段上。 create table t1( id int primary key auto_increment, name varchar(16)); desc t1;
delete from 仅仅是删除数据,不会重置主键
truncate 初始化表,会重置主键