数据的导入导出
数据的导入:把文件的内容保存到数据的表里
文件按一定格式存放到文件里,按照文件的格式把文件导到表里。
表的结构必须与数据文件的格式完全一样。
根据源数据内容创建表结构
数据库管理员登陆的状态时才能导入数据
数据导入命令格式
load data infile ‘文件名’ into table 表名
fields terminated by ‘列分隔符’
lines terminated by ‘\n’
例:
create table user_tab( user varchar(15) not null, pass varchar(10) not null, UID varchar(5) not null, GID varchar(5) not null, name varchar(30) , home varchar(30) not null, shell varchar(30), index(user)); load data infile ‘/etc/passwd‘ into table user_tab fields terminated by‘:‘ lines terminated by ‘\n‘; alter table user_tab add id int(3) primary key auto_increment first;
数据的导出(把表里记录保存到系统文件里)
数据导出的命令格式
select 查询语句 into outfile ‘文件名’
Fields terminated by ‘分隔符’
Lines terminated by ‘\n’
导出数据时的注意事项:
导出的内容由SQL查询语句决定
若不指定路径,默认存放在执行导出操作时所在库的目录下
确保mysql进程对目标文件夹有写的权限
表记录的增、删、改、查:
添加记录:
insert into 数据库名.表名(字段名列表) values(字段值列表),(字段值2);
依次向表中字段插入记录字段名列表可以省略。
插入记录时注意事项:
值要与字段类型匹配,同时要满足字段的约束条件。
给表中所有字段插值时字段名可以省略但字段值个数要与字段名个数相符。
向表中指定字段插值时必须有明确的字段名,有默认值的字段使用默认值给字段赋值
删除记录:
delete from 库名.表名;
delete from 库名.表名 where 条件表达式;
注意事项:
不加条件时,删除表中所有结构。
加条件时只删除与条件相匹配的记录。
修改记录:
update 库名.表名 set 字段名=字段值,字段名2=字段值 where 条件表达式;
若不加条件表达式,是将表中每条记录中字段名全部改为设定的值。
注意事项:
不加条件,是批量修改指定字段的值。
修改记录时,值要与字段的类型匹配,且要满足约束条件
同时修改多个字段时,字段之间用逗号间隔。
查看记录:
select 字段名列表 from 数据库名.表名;
select 字段名列表 from 库名.表名 where 条件表达式;
select * from 数据库名.表名;
select 字段名1,字段名2,字段名N from 库名.表名;
条件表达式:
数据比较、范围查询、逻辑比较、正则表达式、模糊查询
数值的比较 = > >= < <= !=
数值的范围内匹配: 字段名 between 数值1 and 数值2
范围内匹配:字段名 in (字段值列表); 任何字段
不在范围内为not in 字段值列表要与字段名类型匹配。
逻辑比较,多条件组合
and 逻辑与(列举的多个条件要同时成立)
or 逻辑或(列举的多个条件满足其一即可)
is null 匹配空值 is not null 匹配不为空的值
distinct 不显示重复的值
select distinct 字段名 from 表名
运算操作 + - * / %(取余)
查询时可以做四则运算 数值类型
select 字段名1,字段名2+字段名3 as 别名 from 表名;
别名是临时的
正则表达式
where 字段名 regexp ‘正则表达式’
‘^a’ 以a开头 ‘r$’ 以r结尾的
‘^a.r$’以a开头r结尾中间任意
‘^…$’ 任意三个字符的
模糊查询
where 字段名 like ‘通配字符串’;
% 匹配0个到多个字符
_ 匹配任意单个字符
分组
group by 字段名
group by 字段名 [having 条件表达式]
select shell,uid from user_tab group by shell having uid<500 select shell from user_tab group by shell having “uid”<500
排序
order by 字段名 [asc]; 默认升序排序
order by 字段名 desc; 降序
select username,gid from user_tab order by gid desc;
限制显示记录的条目数 limit
limit N,M N显示记录的起始行,M共显示几行
N 默认值为0 表示从第一行开始显示
select * from user_tab order by gid desc limit 10; 10为M的值,N值默认为0,等同于limit 0,10 N值为行数-1,0为第一行
mysql 查询时使用的函数
sum(字段名) 求和
max(字段名) 求最大值
min(字段名) 求最小值
avg(字段名) 求平均值
count(字段名) 统计字段记录数
select count(username) from user_tab; select count(username) from user_tab where条件表达式;
修改管理员密码:
mysqladmin -uroot -p password‘999’
密码是加密的,加密的函数为password
[[email protected] ~]# mysqladmin -uroot -p password ‘新密码 enter password:旧密码 密码保存在mysql.user
忘记数据库管理员密码:
mysql服务器默认有4个库。 mysql授权库
[[email protected] ~]# service mysql stop Shutting down MySQL.... [确定] [[email protected] ~]# service mysql start --skip-grant-table Starting MySQL... [确定] [[email protected] ~]# mysql mysql> update mysql.user set password=password(‘123456‘) where host=‘localhost‘;
用户授权和权限撤销
数据库服务器默认只允许数据库管理员从数据库服务器本机登陆。
默认情况下只有数据库管理员从数据库服务器登陆本机登陆时才有授权权限
grant 权限列表 on 数据名 to 用户名@“客户端地址” identified by “密码” with grant option.
权限列表的表示方式
all 所有权限
select,update,delete列表之间用逗号间隔
数据名表示方式:
*.* 数据库里的所有库所有表
数据库名.* 指定对某个库有权限
数据库名.表名 指定对某个库的某个表有权限
用户名表示方式:
授权时自定义的名字,要有标识性,授权后成功后,用户名保存在mysql.user表里。与系统 账号无关。
客户端地址表示方式:
% 所有主机
1.1.1.1 指定IP地址
192.168.1.% 指定网段
pc1.example.com 主机名(数据库服务器能够解析主机名
%.example.com 域名(数据库服务器能够解析域内的主机名)
identified by “密码”
设置授权用户的密码,是可选项,授权时若不指定此选项,用授权用户登录数据库服务器时没有密码
with grant option
可选项,作用是授权用户有授权权限,授权时若不指定此选项,授权用户没有授权权限。
授权信息保存在服务器端的mysql库里的表里。
登录用户查看自己的权限信息
show grants;
查看权限
show grants for 用户名@“客户端地址”;
user 表存放授权用户的权限信息。
db表里存放对某个库的权限
tables_priv表里存放对某个表的权限
columns_priv表里存放对某个字段的权限
撤销权限
revoke 权限列表 on 数据名 from 用户名@“客户端地址”;
删除授权用户 把授权用户从user表里删除。
刷新授权
mysql> flush privileges; //手动对mysql库里的表做操作的时候要刷新信息才能生效。去掉授权权限
revoke grant option on *.* from 用户名@ “客户端IP地址”
授权用户登陆数据库服务器后,修改自己的登陆密码
set password=password(‘新密码’);
管理员重置授权用户的登陆密码
set password for 用户名@ “客户端地址”=password(‘新密码’)