1、数据导入导出的搜索路径(/var/lib/mysql-files/)
mysql> show variables like "secure_file_priv"; //查看默认使用目录`是否存在
可以自己修改默认目录(必须要有读写权限,)
如:
]# mkdir /mydir
]# ls -ld /mydir
rwxr-xr-x. 2 root root 6 1月 8 09:35 /mydir
]# chmod o+w /mydir
drwxr-xrwx. 2 root root 6 1月 8 09:29 /mydir
]# vim /etc/my.cnf
[mysqld]
secure_file_priv="/mydir"
]# systemctl restart mysqld
数据导入
1)什么是数据导入:把系统文件的内容存到数据库的表里
2)命令用法:
mysql> load data infile “目录名/文件名” into table 数据库.表名 fields terminated by “分隔符”
lines terminated by “\n”;
3)例子:
创建数据库数据的库和表
userdb,user(按照/etc/password 前10行建表)
mysql> create database userdb;
mysql>create table user(
> name char(30),
> password char(1),
> uid int,
> gid int,
> comment char(150),
> homedir char(150),
> shell char(50),
> index(name));
系统命令system
mysql> system cp /etc/passwd /mydir //使用系统命令拷贝/etc/passwd到/mydir
mysql> system ls /mydir
mysql> load data infile "/mydir/passwd"
> into table userdb.user
> fields terminated by ":"
> lines terminated by "\n";
mysql> select * from userdb.user //验证是否导入成功
mysql> alter table userdb.user add id int primary key auto_increment first; //自增,方便查数据
mysql> select * from user;
mysql> select * from user where id=3; //查取user表id为3的数据
注意事项:-字段分隔符要与文件内的一致
–指定导入文件的绝对路径
–导入数据的表字段类型要与文件字段匹配
–禁用SElinux保护机制
数据导出
1)什么是数据导出:把表记录存放到系统文件里 2)命令用法:格式 mysql> SQL查询 into outfile “目录名/文件名”
mysql> SQL查询 into outfile “目录名/文件名”
> fields terminated by “分隔符” //可以省略
> line terminated by “\n”; //可以省略
3)例子
1)mysql> select * from userdb.user where id<=2 into outfile "/mydir/user.txt"
//将/etc/passwd文件导入userdb.user表并给每条记录加编号
注意:(导出的文件名是唯一的,不能重名)
limit 10 前十行
mysql> select * from userdb.user where uid<100 limit 10 into outfile "/mydir/user2.txt"
//将userdb.user表中uid小于100的前10条记录导出,存为/mydir/user2.txt文件
注意事项:-导出的内容有SQL查询语句决定
-导出的是表中的的记录,不包括字段名
-禁用SElinux
1)增加表记录
语法格式:1)insert into 数据库.表名 values(字段值列表); //添加一条记录
2)insert into 数据库.表名 values(),()…; //添加多条记录
3) insert into 数据库.表名(字段值列表)values(字段值列表); //添加一条记录,指定字段赋值
4)insert into 数据库.表名(字段值列表)values(字段值列表),()…; //添加多条记录,指定字段赋值
注意事项:
–字段值要与字段类型相匹配
–对于字符类型的字段,要用双或单引号括起来
–依次给所有字段赋值时,字段名可以省略
–只给一部分字段赋值时,必须明确写出对应的字段名
称
2)查询表记录
语法格式:select */字段名 from 数据库.表名 【where 条件表达式】;
注意事项:
–使用*可匹配所有字段
–指定表名时,可采用 库名.表名 的形式
3)更新表记录
语法格式:upadte 数据库.表名 set 字段1=字段1值,字段2=字段2值,…【where 条件表达式】; //更新表内的所有记录(按条件更新)
注意事项:
–字段值要与字段类型相匹配
–对于字符类型的字段,要用双或单引号括起来
–若不使用where限定条件,会更新所有记录
–限定条件时,只更新匹配条件的记录
4)删除表记录
语法格式:delete from 数据库.表名 where 条件表达式; //仅删除符合条件的记录
delete from 数据库.表名; //删除所有的表记录
基本匹配条件
1)数值比较
select * from user where uid=100;
select * from user where id <10;
类型 用途
= 等于
>、>= 大于、大于等于
<、<= 小于、小于等于
!= 不等于
2)字符比较
字符比较时,字段类型必须字符类型
类型 用途
= 相等
!= 不相等
is null 匹配空
is not null 非空
mysql> select * from user where shell="/bin/bash";
mysql> select * from user where shell!="bin/bash";
mysql> select * from user where shell is null;
mysql> select * from user where shell is not null;
3)逻辑匹配(多个判断条件时使用)
类型 用途
OR 逻辑或
AND 逻辑与
! 逻辑非(取反)
() 提高优先级 (与四则运算连用)
mysql> select name,uid,gid from user where name="root" or uid=3 or gid=1;
mysql> select name,uid from user where name="adm" and uid=3; //既有adm且uid值为3才会显示
mysql> select name,uid from user where name!="adm"; //显示name不包括adm的名字
四、范围内匹配/去重显示(匹配范围内的任意一个值即可)**
类型 用途
in (值列表) 在...里...
not in (值列表) 不在...里...
between 数字1 and 数字2 在...之间...
distinct 字段名 取重显示
mysql> select name from user where name in("root","adm"); //显示在root、adm里的用户信息
mysql> select name,uid from user where uid in("10","30","7"); //
mysql>select name shell from user where shell not in("/bin/bash","/sbin/nologin");//显示不在/bin/bash、/sbin/nologin里的用户信息
mysql> select * from user where id between 5 and 15; //显示id 5~15
mysql>select distinct shell from user; //不显示重复的
高级匹配条件
1)模糊查询 like
where 字段名 like '%'或"- -"
匹配单个字符、%匹配0~N个字符
mysql> select name from user where name like " _"; //匹配两个字符的用户
mysql> select name from user where name like “a%”; //匹配以a开头的用户
mysql> select name from user where name like “%a%”; //匹配中间包括a的用户
2)正则表达式 . ^ $ [ ] * |
语法格式:where 字段名 regexp ‘正则表达式’
mysql> select name from user where name regexp '^a|^r'; //匹配开头以a或以r的用户
mysql> select name from user where name regexp '[0-9]'; //匹配包括数字的用户
mysql> select name from user where name regexp '^[0-9]'; //匹配开头以数字的用户
mysql>select name from user where name regexp '^r.*t$'; //匹配以r开头以t结尾的用户
3)四则运算
类型 用途
+ 加法
- 减法
* 乘法
/ 除法
% 取余
mysql> select name,uid, uid-1 from user where id <=3;
mysql> update user set uid+1 where id <=3;
mysql> select name,uid, gid, uid+gid sum from user where id<=3;
mysql> select name,uid,gid,(uid+gid)/2 pjz from user where id <=3; //与提高优先级符()连用先算括号里面的再运算外面的
操作查询结果
1)聚集函数
MySQL内置数据统计函数
avg(字段名) //统计字段平均值
sum(字段名) //统计字段之和
min(字段名) //统计字段最小值
max(字段名) //统计字段最大值
count(字段名) //统计字段值个数
mysql> select avg(uid) from user;
mysql> select avg(uid) from user where uid <=10;
mysql> select sum(uid) from user;
mysql> select sum(uid) from user where shell!="/bin/bash";
mysql> select min(uid) from user;
mysql> select min(uid) from user where uid>1000;
mysql> select max(uid) from user;
mysql> select max(uid) from user where name regexp '^a';
mysql> select count(name) from name;
mysql> select count(name) from name where shell="/bin/bash";
2)查询结果排序
语法格式:SQL查询 order by 字段名 [ asc|desc ];
mysql> select name,uid from user;
mysql> select name,uid from user where uid >=10 And uid <=500 order by uid desc;//排序从大到小
mysql> select name,uid from user where uid >=10 and uid <=500 order by uid/asc;//排序从小到大
3)查询结果分组
语法格式:SQL查询 group by 字段名;
(相同的为一组)
mysql> select shell from user;shell
mysql> select shell from user group by shell; //匹配表中shell并分组
mysql> select shell from user where name regexp "a" group by shell; //匹配表中包含a的用户名并分组
4)查询结果过滤
语法格式:SQL查询 having 条件表达式;
SQL查询 where 条件 having 条件表达式;
SQL查询 group by 字段名 having 条件表达式;
mysql> select name from user where shell!="/bin/bash" having name="adm";
5)限制查询结果显示行数 limit
语法格式:SQL查询 limit N; //显示查询结果前N条记录
SQL查询 limit N,M; //显示指定范围内的查询记录
SQL查询 where 条件查询 limit 3; //显示查询结果前3条记录
SQL查询 where 条件查询 limit 3,3; //从第4条开始,共显示3条
mysql> select * from user;
mysql> select * from user limit 3;
mysql> select * from user limit 0,2;
mysql> select * from user limit 1,2;
MySQL工作原理
1)MySQL体系结构
2)MySQL存储引擎
mysql> show engines //查看所有引擎
mysql> show create table 表名 //查看表使用的存储引擎
mysql> show table status like "user"\G; //查看表的状态,所属的引擎
-> 修改所属引擎 ]#vim /etc/my.cnf [mysqld] default-storage-engine=“myisam”
-> ]#systemctl restart mysqld
创建表时指定表使用的存储引擎?
mysql> create table t1(name char(10))engine=innodb; //创建表时指定的存储引擎
修改表使用的存储引擎?
mysql> alter table t3 engine=innodb; //修表的存储引擎
建表时如何选择引擎?
执行update delete insert、并发量大的时候用innodb.
执行select 节省系统资源用mysiadm.
存储引擎的特点?
MYTSAM特点:
1)支持表级锁、不支持事务、事务回滚、外键
2)相关的表文件
表名.frm
表名.MYI
表名.MYD
INNODB特点:
1)支持表级锁、支持事务、事务回滚、外键(默认启用行锁)
2)相关的表文件
表名.frm、表名.ibd
事务日志文件(/var/lib/mysql)
ib_logfile0(以提交的数据文件)
ib_logfile1(以提交的数据文件)
ibdata1(未提交的数据文件)
MySQL锁机制
1)锁粒度
–表级锁:对整张表进行加锁
–行级锁:只锁定某一行
–页级锁:对整个页面(MySQL管理数据的基本存储单位)进行加锁
2)锁类型
–读锁(共享锁):支持并发读
–写锁(互斥锁、排它锁):是独占锁,其他线程不能读写
3)查看当前的锁状态
–检查表开头的变量,%作通配符
命令格式:show status like ‘表名%’;
事务:一次SQL操作从开始到结束的过程
事务回滚:事务执行过程中,任意一步操作失败,恢复之前所有的操作。
事务日志文件:记录对innodb的表执行过的SQL操作。
事务特性(ACID)
Atomic:原子性
–事务的的整个操作是一个整体,不可分割,要么全部成功,要么全部失败。
Consistency:一致性
–事务操作的前后,表中的记录没有变化。
Isolation:隔离性
–事务操作是相互隔离离不受影响。
Durability:持久性
–数据一旦提交,不可改变,永久改变表数据。
mysql> show variables like "autocommit"; //查看提交状态
mysql> set autocommit=off; //关闭自动提交
mysql> rollback; //数据回滚
mysql> commit; //提交数据
注意:数据没有提交才可以回滚,生产环境中不允许关闭自动提交功能。