DAB03 一、MySQL存储引擎、二、数据导入导出、三、管理表记录 四、匹配条件

二、数据的导入导出

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 数据库.表名; //删除所有的表记录

四、匹配条件(delete、select、update)

基本匹配条件
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存储引擎

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;	//提交数据

注意:数据没有提交才可以回滚,生产环境中不允许关闭自动提交功能。

你可能感兴趣的:(MySQL数据库知识集,MySQL引擎,数据导入导出,管理表记录,匹配条件)