一,Mysql存储引擎
二,数据导入,导出
三,管理表记录。
增
查(单表查询 嵌套查询 多表查询 连接查询)
改
删
增查改删 时使用的匹配条件(条件的表示方式)
一,Mysql存储引擎.
1.1什么是存储引擎?(存储引擎介绍)
数据库服务软件自带的功能程序,
不同的存储引擎有不同的数据存储方式和功能!
是表的处理器.
1.2如何查看数据库服务和当前表使用的存储引擎?
mysql>show engines;
mysql>show create table a1;
******************************************************
1.3如何设置和修改数据库服务和表使用的存储引擎?
修改数据库服务默认使用的存储引擎:
创建表使用的存储引擎
->create table 库.表(
->字段列表
->)engine=存储引擎名;
修改表使用的存储引擎:
alter table 表 engine=存储引擎名;
修改库存储引擎:(影响全部数据的存储)
vim /etc/my.cnf i
在[mysqld]下面
default-storage-engine=存储引擎名;
systemctl stop mysqld
systemctl start mysqld
*********************************************************
1.4常用存储引擎的特点?
myisam特点:
支持表级锁
查询操作多的表适合使用myisam存储引擎
这样的节省硬件资源。
不支持事务
数据是存储在内存上的,当服务重起数据会被释放。
innodb特点:
支持行级锁
编辑操作多的表适合使用innodb存储引擎
这样支持并发访问量大。
支持事务和事务回滚,外键。
数据存储方式: a32.frm a31.idb
表结构 数据+索引
事务:对数据访问,从开始到结束的过程
事务回滚:对数据的访问过程中任何一步
没有被正确执行都会恢复之前的所有操作。
mysql数据库服务使用事务日志文件记录对所有innodb存储引擎的表执行过的sql操作。
cd /var/lib/mysql/
ibdata1----sql命令执行后产生后的数据信息
ib_logfile0-----
|sql命令
ib_logfile1-----
锁的类型?
读锁(select)又被称为共享锁
写锁(insert update delete)又被称为排它锁 或互斥锁
数据存储方式: a31.frm a31.MYD a31.NTI
表结构 数据 索引
*************************************************************
1.5生成环境中建表时如何决定表使用的存储引擎?
编辑操作多的表适合使用innodb存储引擎.这样并发访问量大。
查询操作多的表适合使用myisam存储引擎.这样节省硬件资源。
**************************************************************
day01~day02知识点
搭建数据库服务器
Mysql数据类型
Mysql键值
Mysql存储引擎
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
二,
数据导入:把系统文件内容存储到数据库服务器的表里。
语法格式:
mysql->load data infile "/var/lib/mysql-files/文件名" into table
mysql->库.表 fields terminated by "符号" lines terminated by "
";
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
把系统用户信息存储到数据库的表里:
/etc/passwd userdb.user
root:x:0:0:root:/root:/bin/bash 要按照系统文件格式对应建表。
create table user(
-> name char(50),
-> password char(1),
-> uid int(2), 新建一个库userdb
-> gid int(2), 把表放到userdb库下。
-> comment char(100),
-> homedir char(30),
-> shell char(25),
-> index(name)
-> );
在mysql里面:1,system ls /var/lib/mysql-files/
2,system cp /etc/passwd /var/lib/mysql-files/
3, load data infile "/var/lib/mysql-files/passwd" into table userdb.user
fields terminated by ":" lines terminated by "
";
注意点:表的格式要和系统文件兼容,文件要由r权限,存储引擎要兼容。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1,修改导入文件时,查找文件路径:
2,vim /etc/my.cnf
3,secure_file_priv="/mydata"
4,chown mysql /mydata/
5,systemctl restart mysqld
6,mysql> show variables like "%secure%";
lter table userdb.user add id int(2) primary key auto_increment first;
增加这个便于管理。
数据导出:把数据库服务器的表里的记录存储到系统文件中。
sql查询命令 into outfile "/目录/文件名";
1,select * from user into outfile "/mydata/a.txt";
2,system cat "/mydata/a.txt";
导出时指定分割符号:
select name,uid from user into outfile "/mydata/a3.txt" fields terminated by "#"
导出时指定分隔符与分隔行的符号:
select name,uid from user into outfile "/mydata/a4.txt" fields terminated by "#"
lines terminated by ";;;";
================================================================================
三,管理表记录
insert 增(向表中插入新记录)
一次插入1条记录给所有字段赋值
一次插入多条记录给所有字段赋值
一次插入1条记录给指定字段赋值
一次插入多条记录给指定字段赋值
insert into 库.表 values(字段值列表);
insert into 库.表 values(字段值列表),(字段值列表)...;
insert into 库.表(字段名列表) values(字段值列表);
insert into 库.表(字段名列表) values(字段值列表),(字段值列表)...;
****************************************************
update改(修改记录字段的值)
修改所有记录指定字段的值
修改指定记录指定字段的值
update 库.表 set 字段名=值,字段名=值;
update 库.表 set 字段名=值,字段名=值 where 条件;
****************************************************
delete删
增查改删 时使用的匹配条件(条件的表示方式)
删除指定记录 delete from 库.表 where 条件;
删除所有记录 delete from 库.表;
delete from user where id>=12;
****************************************************
select查(单表查询 嵌套查询 多表查询 连接查询)
select 字段名列表 from 库.表 where 条件;
查看所有表记录:select * from user;
查看指定行的所有列:select * from 库.表 where 条件;
查看指定行的指定列:select 字段名列表 from 库.表 where 条件;
****************************************************
查 改 删 时使用的匹配条件(条件的表示方式)
数值比较 字段名 符号 数字
> >= < <= = !=
+++++++++++++++++++++++++++++++++++++++++++++++++++
字符比较 字段名 符号 “字符串”
= !=
++++++++++++++++++++++++++++++++++++++++++++++++++++
范围内匹配
字段名 between 数字1 and 数字2 在..之间..
select name,uid from user where uid between 10 and 20;
字段名 in (值列表);
select name,uid from user where uid in (11,12,300);
字段名 not in (值列表);
select name,uid from user where uid not in (11,12,300);
++++++++++++++++++++++++++++++++++++++++++++++++++++++
四则运算+ - * / %
加法运算:
select name,uid+gid he from userdb.user;
加法运算+条件:
select name,uid+gid he from userdb.user where name="job";
运算平均值:
select name,uid,gid,uid+gid he ,(uid+gid)/2 pjz from userdb.user;
注:符号可以时四则运算。
1,alter table user add age int(1) not null default 18 after name;
2,select name,year(now())-age syear syear from user;
用函数year(now())减去age年龄的出出生年份。
update user set age=age+1 where name="tony";
update user set age=age+1;
也可以用update配合四则运算去改变字段值。
select name,uid,gid from user where uid=gid;
做条件的时候值时可以用字段去表示的。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
模糊匹配 where 字段名 like ‘表达式’;
%表示零个或多个字符
_表示匹配但个字符
select name from user where name like '_%_';
select name from user where name like '_____';
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
正则匹配
^ $ . [] *
where 字段名 regexp '正则表达式';
select name,uid,gid from user where name regexp '^y.*a$';
找一类数据的时候适合用正则。
正则表达可以匹配一些复杂的值,灵活判断运用。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
匹配空 is null
匹配非空 is not null
逻辑匹配(多个判断条件) or and !
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
查询分组
sql查询 group by 字段名 ;
select distinct shell from db3.user where uid between 10 and 20;
select shell from db3.user where uid between 10 and 20 group by shell;
select shell from db3.user group by shell;
select gid from db3.user where name like "a%" group by gid;
select 字段名 as '性别',count(*) as '人数' from 库.表 group by 字段名;
查询排序 order by
asc |desc
sql查询 order by 字段名 升序|降序 ,
select name,uid,gid from db3.user where uid between 10 and 80 ;
mysql> select name,uid,gid from db3.user where uid between 10 and 80 order by uid desc;
限制查询显示的行数
显示查询结果的前二行:
select * from user where uid<10 limit 2;
限制显示行数的范围:
0,1,2=3从第三行开始。
从第三行开始显示,一共显示三行。
select * from user where uid<10 limit 2,3;
查询时不显示字段的重复值 distinct 字段名
select distinct shell from userdb.user where uid<10;
查询时可以做数据统计(聚集函数)
avg(字段名):集和的平均值
sum(字段名):对集和中的各参数求和
min(字段名):集和中的最小值
max(字段名):集和中的最大值
count(字段名):记录个数
select count(name) from user where shell="/bin/bash";
select count(name) from user;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
复制表(作用1 快速建表,作用2 备份表)
sql命令格式2 create table 库.表 sql查询命令;
create table userdb.u2 select * from user;
注意点:u2表中键值和索引是没有的,需要自己添加。
复制表结构,不需要表记录。
where 条件不成立=只复制表结构.
create table userdb.u2 select * from user where 1=2;
或者:
create table userdb.u2 select * from user where false;
创建的表是根据查询的结果赋值的。
***********************************************************
where嵌套查询
select 字段名列表 from 库.表 where 条件(select 字段名列表from 库.表 where 条件);
显示表中行号最大的记录内容
select * from teadb.tea2 where id=(select max(id) from teadb.tea2);
*************************************************************
select(多表查询)
select * from teat1 ; select * from teat2;
select 字段名列表 from 表名列表;迪卡尔集(表记录行数相乘的积)
例:
select * from teat1,teat3;
select teat1.name,teat3.name from teat1,teat3;
select 字段名列表 from 表名列表 where 条件;
select teat1.name,teat1.uid,teat2.name,teat2.uid
from teat1,teat2
where teat1.name=teat2.name and teat1.uid=teat2.uid;
为什么要多表查询,因为一个用户的信息不会存放在一个表里,
把数据分开存放在多个表里,且还需要一个唯一编号去标识。
************************************************************
select(连接查询)(左连接和右连接)。
左连接
seletct 字段名列表
from 表1 left join 表2
on 条件;
右连接
seletct 字段名列表
from 表1 right join 表2
on 条件;
create table db4.t3 select name,uid,homedir from db3.user limit 4;
create table db4.t4 select name,uid,homedir from db3.user limit 6;
select * from t3 left join t4 on t3.uid = t4.uid;
select * from t3 right join t4 on t3.uid = t4.uid;
select t3.name,t4.name from t3 right join t4 on t3.uid = t4.uid;