Day3-体系结构+查询+导入/出
Mysql体系结构
Mysql存储引擎
存储引擎——处理不同类型表的处理器
不同的存储引擎有不同的功能和存储方式
在建表时可以设置表使用的存储引擎
若不设置,新建的表使用mysql服务默认的存储引擎。
Show engines 查看当前数据库服务支持的存储引擎
Innodb |default Supports transactions, row-level locking, and foreign keys
.frm 表结构 .ibd表记录和表索引 学名:共享表空间
Myisam 不支持外键,不支持事务
.frm 表结构 .myd 表记录 .myi 表索引 独享表空间
修改mysql配置文件
修改 默认存储引擎
事务——一次sql操作从开始到结束过程
事务回滚——若一次SQL操作没有成功,就把数据还原到操作之前的状态——例:向银行转账,若转账不成功,回滚
锁机制——可锁记录或锁表
解决并发访问冲突问题
锁的范围取决于存储引擎
读锁(共享锁)
写锁(排它锁 互斥锁)
Mysiam 表锁 查看比较多的使用该引擎
Innodb 行锁 写操作比较多的使用该引擎
Mysql体系结构——8个
1连接池(内存 CPU 进程数)
客户端要提供连接工具——语言连接数据库
2管理工具 提供mysql数据库服务的软件自带的命令
3 SQL接口——传递SQL命令给MYSQLD进程
4分析器——SQL命令格式是否正确,对操作操作的库、表是否有使用权限
5优化器——优化执行的SQL语句,让系统使用最少的资源去执行SQL命令
6缓存区——在mysql数据库服务时,会划分一定的系统物理内存给mysql服务做缓存
7储存引擎 myisam innodb
8文件系统——存储设备/var/lib/mysql/数据库名/表.*
数据导入——把系统文件的内容保存到数据库服务器的表里
可以把系统用户信息保存数据库服务器的表里
mysql> create table user_user(user varchar(30),password char(1),uid int(2),gid int(2),comment varchar(50),home varchar(50),shell varchar(50),index(user) );
mysql> load data infile '/etc/passwd' into table user_user fields terminated by ':' lines terminated by '\n';
mysql> alter table user_user add id int(6) primary key auto_increment first;
数据导入命令
LOAD DATA INFILE '文件名' INTO TABLE 表名 FIELDS TERMINATED BY '分隔符' LINES TERMINATED BY '\n';
导入数据时注意事项
表中字段的个数要和文件中列的个数相等
字段的类型要与文件中列的值匹配
数据导出——把数据库表里的记录保存到系统文件里
mysql> select * from 表名 into outfile '导出的文件位置';
默认以TAB键为间隔可以使用
后面加 fields terminated by "符号"——————这是设置列分隔的
后面加 lines terminated by "符号";——————这是设置行分隔的
mysql> select * from user_user into outfile '/tmp/user.txt';
mysql> select * from user_user into outfile '/tmp/user.txt' fields terminated by "#";
注意事项
导出的内容由SQL查询语句决定若不指定路径,默认会放在执行导出命令时所在库对就的数据库目录下。就确保mysql用户对目标文件夹有写权限
表记录和基本操作
select 查 ——不消耗CPU,消耗内存
select 字段名列表 from 表名;
select 字段名列表 from 数据库名.表名where 条件表达式;
字段名列表
* 所有字段
字段名
字段名1、字段名2、字段名…
条件表达式
数值比较比较——字段名 比较符号(>、>=、<、<=、=、!=) 数字
字符比较——字段名 比较符号(=、!=) "字符串"
范围内查找
In 在...里
Not in 不在...里
Between .... and——————一般只用于数字,字符很少,不精准
匹配空 字段名 is null
匹配非空 字段名is not null
逻辑比较——查询时使用 2个或2个以上查询条件
逻辑与 and 多个条件必须同时成立
逻辑或 or 多个条件只要有一个条件成立就可以
逻辑非 ! 取反
DISTINCT不显示重复的值
Select distinct 字段名 from 表名
模糊查询 like
Where 字段名 like '表达式'
%匹配0到多个字符
_匹配任意一个字符
使用正则表达式做查询条件
Where 字段名 REGEXP '正则表达式'
^ 首
$ 尾
[] 范围
. 任意一个字符
查询时可运算——四则运算
+ - * / %
常用的统计的函数
集合的平均值——avg()
对集合中的各参数求和——sum()
集合中的最好小值——min()
集合中的最好大值——max()
记录的个数——count()
排序 order by 字段名 排序方式
排序方式——ASC升序(默认) DESC降序
分组 group by 字段名 [having条件]
限制显示记录的条目数 limit
Limit N,M
N 表示从查询结果的第几条记录开始显示
默认从查询结果的第1条记录开始显示 第一条记录的编号是零
M 显示记录的条目数
update改
批量修改 update 数据库名.表名 set 字段名="值",字段名="值"
只修改符合条件的记录中指定字段的值
批量修改 update 数据库名.表名 set 字段名="值",字段名="值" where 条件表达式
给表赋空值 update 表名 set comment=NULL
条件表达式——数值、字符、范围内、空、非空、模糊、正则表达式、逻辑比较
delete删 ——删除的是整条记录
删除表中的所有记录delece from 数据库名.表名;
删除指定的记录delece from 数据库名.表名 where 条件表达式;
insert增 ——添加一条新记录(默认:新的记录都追加已有记录的末尾)
添加新记录时,只给记录的某几个字段赋值
insert into 表名(字段名1,字段名2,字段名..)values(值1,值2,值..)
添加新记录时,给记录的所有字段赋值
insert into 表名 values(值1,值2,值..)
*值与字段类型要匹配
嵌套查询——消耗资源内存较多
里层查询结果做为外层查询条件
select * from 表名 比较( select * from 表名)