一、存储引擎
1.含义
存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎。
2.常用存储引擎
(1)InnoDB(MySQL5.1版本之后的版本默认的是InnoDB):优势在于提供了良好的事务处理,崩溃修复能力和并发控制,缺点是读写效率较差,占用数据空间较大。
1.事务处理、回滚、崩溃修复能力和多版本并发控制
2.自增长(可以思考索引的数据结构)
3.外键(多张表之间的关联,如主表和从表)
(2)MyISAM(MySQL5.1版本之前默认):优势在于占用空间小,处理速度快,缺点是不支持事物完整性和并发性
(3)Memory:数据全部放在内存中,采用哈希索引;但如果内存出现异常就会影响数据,重启或关机所有数据都会消失,因此其生命周期很短,一般是一次性的。
二、数据类型
主要为数值型、字符串、和日期时间类型
(1)数值型:
整数型:
int:正常大小的整数,可以带正负号,范围为-2147483648-2147483647;约-21亿到+21亿
tinyint(非常小的整数,可以带正负号,范围为-128-127;不带符号的话为0-255),
bigint(非常大的整数,可以带正负号)
小数型:
float(m,d):m参数为显示长度,d参数为小数位数,默认为10,2
double(m,d):m参数为显示长度,d参数为小数位数,默认为16,4。双精度浮点小数(比float范围更广);
(2)字符串类型:
普通类型:
char(m):m表示字符串的固定长度:例如:sex char(1) , 表示的是性别这列的字符串只能为1个,如男/女
varchar(m):m表示字符串的可变长度,例如:cname varchar(5), 表示的则是cname列的字符串的长度最长不能超过5
###注意:
char:如果固定长度为5,但是只输入了一个字符,会浪费空间,整体匹配时查询效率高。适合于有固定长度的字符串
vchar:可以节省空间,但是逐个字符匹配,查询效率较低。所以适合在一定范围内有变化长度的字符串。
可变类型:字段的最大长度约为6万5千
text:存储较大的文本数据。
blob:用来存储较大的二进制数据,例如图像等数据,不用指定长度或大小
###两者的区别:在排序或比较上存储的数据时,blob大小写敏感,而text不用区分大小写。
特俗类型:set,enmu
(3)日期和时间类型:
date:日期 yyyy-mm--dd 如:2021-01-01;
datetime:具体时间 yyyyy-mm-dd hh:mm:ss 如:2021-01-01 12:00:00
timestamp:时间戳 yyyymmddhhmmss 如: 20210101120000
year(m): m表示显示长度,默认为4,
三、常见的数据操作方式:
(1)CRUD:增删改查
C:create
R:retrieve --获取/查询
U:update
D:delete
(2)按照功能分类:
新建数据库——新建表——插入数据/更新数据/删除数据
下面的几类SQL语句就是帮组我们完成上面个的流程
DDL:(data definition languate:数据定语言)
创建库
创建表
修改表结构
DML:(data Manipulation languate:数据操纵言)
DQL:(data Query languate:数据查询言)
DCL:(data Controll languate:数据控制言)
四、SQL语句操作
1.SQL通用语法:
(1)SQL可以单行或者多行书写,以分号结尾(Sqlyog中可以不用写分号);
(2)可以使用空格和缩进来增加语句的可读性
(3)MySQL中不区分大小写,一般是关键字大写,数据库名、表名、列名小写。有代码美化功能
2.注释方式
(1)单行注释:
--注释内容
或者: #注释内容 (#为MySQL数据库中特有的单行注释方式)
(2)多行注释:
/*
注释内容
*/
3.对数据库的常见操作
(1)创建数据库
create database 数据库名称;
create database 数据库名称 character set utf8; (大写的字符虽然运行稍微快一点,但小写清晰。)
(2)切换数据库:
use 数据库名称;
(3)查看当前所使用的数据库
select database();
查看mysql中所有的数据库
show databases;
查看数据库定义信息(创建时的信息)
show create database 数据库名称;
(4)删除数据库和表
drop database 数据库名称;
(5)修改数据库
alter databse 数据库名称 character set utf8;
4.对表的常见操作
一个数据库中可以有多个表,表中又有字段,在建表的时候需要定义好字段(指定字段属性——字段类型+字段长度)
(1)创建表:
create table 表名(
字段名称1 字段类型(长度),
字段名称1 字段类型(长度) 注意最后一列不要加逗号
);
快速创建一个类似表(只复制表结构:字段,结构一样)
cteate table 新表名 like 旧表名;
(2)删除表
drop table 表名称;
drop table if exists 表名称;
(3)查看表结构
desc 表名称;
(4)修改表:
修改表名:
rename table 旧表名 to 新表名
添加字段:
alter table 表名 add 字段名称 字段类型(长度)
修改字段类型或长度
alter table 表名 modify 字段名称 字段类型(长度)
修改字段名称及类型
alter table 表名 change 旧字段名称 新字段名称 新字段类型(长度)
删除字段
alter table 表名 drop 字段名称;
5.DML进行数据的增删改操作
(1)插入数据
insert into 表名(字段名1,字段名2...) values(字段值1,字段值2...);
<1>插入部分字段需要加字段名,且值得部分按照字段名得顺序(对应);
<2>插入全部字段时,可以不用写字段名
(2)修改数据:
update 表名 set 字段1(列)=‘修改后的数据’ where 字段二(定位到具体行)=‘’
update 表名 set 字段1(列)=‘修改后的数据’ (将这一列全部进行修改)
(3)删除数据
delete from 表名 (删除整个表格,效率较低)
delete from 表名 where 字段名 =(<,>) 条件
truncate table 表名 当一个表中条数较多,又要做删除动作时delete会比较慢,可以选择这个方法。
6.DQL查询语句
select *(表示所有字段) from 表名;
select 字段名 from 表名;
select 字段名1 as 指定别名1,字段名2 as 指定别名2 from 表名;(as可以省略)
去重操作
select distinct 字段名 from 表名
select 字段名*2 from 表名 (对字段直接进行操作)
条件查询
select 字段名 from 表名 where 条件表达式
先取出表中的每条数据,满足条件的返回,不满足的就过滤掉。
7.运算符:
(1)逻辑运算符:
and: 同时成立
or: 成立一个即可
not: 不成立
(2)通配符:
%:代表所有字符
-:代表一个字符
select * from mytable where ename like \'%张%\';
select * from mytable where ename like \'-张%\'; 表示第二个字为张的
(3)比较运算符:
大于、小于、等于、大于等于等。其中不等于为:!= 或则可以写<>
beteween A and B :在A和B之间
in(集合):只要判定在里面就会显示
is null: 查询某一列为null
like \'%张%\':模糊查询
例如:
where age>=18;
where age between 18 and 30;
where name in(\'张三\',\'李四\')
where name like \'%王%\' name中有王这个字
where name like \'王%\' name中有王字开头
where name like \'%王\' name中有王字结尾
where name is nul;
where name is not nul; 不是空值
例如:
select * from mytable m where m.age>=18;