数据导入、导出、管理表记录、
数据导入: 把系统文件的内容存储到数据库服务器的表里
load data infile “目录名/文件名” into table 库名.表名
FIELDS TERMINATED BY “分隔符” LINES TERMINATED
BY “\n”;
load data infile "/etc/passwd" into table userdb.user
fields terminated by ":" lines terminated by "\n";
例子:把系统用户信息存储到数据库服务器的表里
/etc/passwd
用户名:密码站位符号:uid:gid:描述信息:家目录:shell
create database userdb;
create table userdb.user(
name varchar(35),
password char(1),
uid int(2),
gid int(2),
comment varchar(60),
homedir varchar(60),
shell varchar(30),
index(name)
);
mysql> show variables like "secure_file_priv";
#cp /etc/passwd /var/lib/mysql-files/
mysql > load data infile "/var/lib/mysql-files/passwd"
into table userdb.user fields terminated by ":"
lines terminated by "\n";
mysql> alter table userdb.user add id int(2) zerofill
primary key auto_increment first;
自定义数据导入时文件所在的目录
#mkdir /mydata
#chown mysql /mydata
#setenforce 0
#cp /etc/passwd /mydata/
vim /etc/my.cnf
[mysqld]
secure_file_priv= /mydata
:wq
#systemctl restart mysqld
数据导出:把表记录存储到系统文件里
mysql> show variables like "secure_file_priv";
sql查询命令 INTO OUTFILE “目录名/文件名“;
sql查询命令 INTO OUTFILE “目录名/文件名“ fields
terminated by "符号" lines terminated by "符号";
mysql>select * from userdb.user where id=18 into
outfile "/var/lib/mysql-files/user1.txt";
mysql> system cat /var/lib/mysql-files/user1.txt
++++++++++++++++++++++++++++++++++
管理表记录(增 查 改 删)(userdb.user)
insert into 增加表记录
一次插入1条记录给所有字段赋值
insert into 库名.表名 values(值列表);
一次插入N条记录给所有字段赋值
insert into 库名.表名 values(值列表),(值列表),(值列表);
插入记录时只给指定的字段赋值
insert into 库名.表名(字段名列表)values(值列表);
insert into 库名.表名(字段名列表)values(值列表),(值列表),(
值列表);
insert into userdb.user values
(50,"bob","x",2022,2022,"this is
student","/home/bob","/bin/bash");
insert into userdb.user values
(60,"bob","x",2122,2122,"this is
student","/home/bob","/bin/bash"),
(63,"lucy","x",2322,2322,"this is
student","/home/lucy","/bin/bash");
insert into userdb.user(name,uid)values("tom",2300),
("alic",2987);
insert into userdb.user
(name,password,uid,gid,comment,homedir,shell)
values
("yaya","x",3003,3003,"teacher","/home/yaya","/bin/ba
sh");
select 查询表记录
单表查询
查询表中所有记录所有字段的值
select * from 库.表 ;
查询表中所有记录指定字段的值
select 字段名列表 from 库.表 ;
查询表中符合条件记录指定字段的值
select 字段名列表 from 库.表 where 条件;
查询条件的表示方式?
1 数值比较 > >= < <= = !=
字段名 符号 数字
select name,uid from userdb.user where uid<10;
select * from userdb.user where id<=5;
2 字符比较 = !=
字段名 符号 “字符串”
select name from userdb.user where name="apache";
select name from userdb.user where shell="/bin/bash";
select name,shell,uid from userdb.user where
shell="/bin/bash";
select name from userdb.user where name!="root";
3 范围内查找
in (值列表) 在...里
not in (值列表) 不在...里
between....and... 在...之间
select name from userdb.user where uid in (10,20,30);
select id,name from userdb.user where name in (
"mysql","rysnc","bob");
select name from userdb.user where shell not in
("/bin/bash","/sbin/nologin");
select name,shell,uid from userdb.user where shell not
in ("/bin/bash","/sbin/nologin");
select name,uid from userdb.user where uid between
10 and 20;
select id,name,uid from userdb.user where id between
30 and 40;
多个查询条件
逻辑与 and 多个查询条件必须同时成立
逻辑或 or 多个查询条件某一个条件成立就可以
逻辑非 ! 取反
select name from userdb.user where name="apache"
and uid=1200 and shell="/bin/bash";
select name from userdb.user where name="apache"
or uid=2 or shell="/bin/bash";
select name,uid,shell from userdb.user where
name="apache" or uid=2 or shell="/bin/bash";
select name,uid from userdb.user
where
name="root" or name="bin" and uid=1;
select name,uid from userdb.user
where
name="root" and name="bin" or uid=1;
select name,uid from userdb.user
where
(name="root" or name="bin" ) and uid=2;
select name,uid from userdb.user
where
(name="root" or name="bin" ) and uid=1;
DISTINCT 不显示重复的值
select distinct shell from userdb.user;
select distinct shell from userdb.user where
uid<1000;
is null 匹配空
is not null 匹配非空
insert into userdb.user(id ,name)values(66,NULL),
(67,null),(68,"null"),(69,"");
select id , name from userdb.user where name is null;
select id , name from userdb.user where name is not
null;
select id , name from userdb.user where name="null";
select id , name from userdb.user where name="";
四则运算 + - * / %
alter table userdb.user
add linuxsys tinyint(2) default 60 after name,
add linuxser tinyint(2) default 80 after linuxsys;
alter table userdb.user
add age tinyint(2) unsigned default 20 after name;
select name,linuxsys,linuxser from userdb.user;
select name,linuxsys,linuxser from userdb.user where
name="root";
select name,linuxsys,linuxser,linuxsys+linuxser as zcj
from userdb.user where name="root";
select name,linuxsys,linuxser,linuxsys+linuxser as zcj,
(linuxsys+linuxser)/2 as pjf from userdb.user where
name="root";
select name,age from userdb.user where name="root";
select name,age,2017-age as s_year from userdb.user
where name="root";
聚集函数(做数据统计的内置命令)
sum(字段名) 求和
avg(字段名) 平均值
min(字段名) 最小值
max(字段名) 最大值
count(字段名) 个数
select sum(linuxsys) ,avg(linuxsys) from userdb.user;
select sum(linuxsys) ,avg(linuxsys) from userdb.user
-> where
-> uid<=10;
select min(uid) from userdb.user where
shell="/bin/bash";
select max(uid) from userdb.user where
shell="/bin/bash";
select count(id) ,count(name) from userdb.user;
select count(name) from userdb.user where
shell="/bin/bash";
模糊匹配
like ‘表达式’
% 零个或多个字符
_ 任意单个字符
select name from userdb.user where name like '____';
select name,uid from userdb.user
where name like '%a%';
select name,uid from userdb.user
where name like 'a%';
select id,name,uid from userdb.user
where name like '%';
select id,name,uid from userdb.user
where name like '_a_';
select id,name,uid from userdb.user
where name like 'r__t';
select id,name,uid from userdb.user
where uid like '____';
select id,name,uid from userdb.user
where uid like '%_%';
select name,id from userdb.user where name like '%_%'
and name="";
select name,uid from userdb.user where name like
'____' and uid>=1000;
正则匹配
regexp '正则表达式'
^ $ . * []
insert into userdb.user(id , name)values(71,"yaya3"),
(72,"9yaya"),(73,"ya7ya"),(74,"yay6a");
select name from userdb.user
where
name regexp '[0-9]';
select name from userdb.user
where
name regexp '^[0-9]';
select name from userdb.user
where
name regexp '[0-9]$';
select name from userdb.user
where
name regexp '.....';
select name from userdb.user
where
name regexp '^.....$';
select name,uid from userdb.user
where
uid regexp '...';
select name,uid from userdb.user
where
uid regexp '^...$';
insert into userdb.user(id ,name)values(80,"ro");
select id,name,uid from userdb.user
where name regexp '^r.*o$';
select id,name,uid from userdb.user
where name regexp '.*';
限制显示查询记录数
limit 数字 显示查询结果的前几行
limit 起始行,总行数
起始行的编号从零开始
select * from userdb.user;
select * from userdb.user limit 3;
select * from userdb.user where uid <=10 limit 5;
select * from userdb.user limit 1,3;
mysql> select * from userdb.user where uid <=10
limit 2,3;
查询排序
order by 字段名 asc/desc
select name,uid,shell from userdb.user where shell!
="/bin/bash" and shell is not null order by uid;
select name,uid,shell from userdb.user where shell!
="/bin/bash" and shell is not null order by uid desc;
select name,uid,shell from userdb.user where shell!
="/bin/bash" and shell is not null order by uid desc
limt 3;
select name,uid,shell from userdb.user where shell!
="/bin/bash" and shell is not null order by uid limit
5;
select 姓名,工资 from yginfo where age<=30 and 部门
="ope" order by 工资 desc;
查询分组
group by 字段名;
select shell from userdb.user where uid>=10 and
uid<=40 ;
select shell from userdb.user where uid>=10 and
uid<=40 group by shell;
select gid from userdb.user group by gid;
select shell from userdb.user group by shell;
select gid from userdb.user group by gid having gid=1;
update修改表记录(修改记录字段的值)
批量修改
update 库.表 set 字段名="值",字段名=值;
update userdb.user set linuxser=100,linuxsys=80;
修改与条件匹配的记录字段的值;
update 库.表 set 字段名="值",字段名=值 where 条件;
update userdb.user set age=18 where name="root";
update userdb.user set shell=null where name="bin";
update userdb.user set shell="" where name="root";
delete删除表记录(以行为单位删除)
删除表的所有记录
delete from 库.表;
删除表中与条件匹配的记录
delete from 库.表 where 条件;
delete from userdb.user where shell is null;
where嵌套查询(把内层的查询结果作为外层查询的查询条件)
select 字段名列表 from 库.表 where 条件 (select 字段名列
表 from 库.表);
update userdb.user set linuxsys=93 where uid>=10
and uid<=50;
select name,linuxsys from userdb.user where linuxsys
< (select avg(linuxsys) from userdb.user);
select name,linuxsys from userdb.user where linuxsys
> (select avg(linuxsys) from userdb.user);
select name from userdb.user where name in (select
user from mysql.user where user="root" and
host="localhost");
+++++++++++++++++++++++++++++++++++++++++++++
复制表
作用: 1 快速创建新表
2 备份表
create table 库.表 sql查询命令;
create table userdb.user2 select * from userdb.user;
create table userdb.user3 select * from userdb.user
where 1 = 2;
create table userdb.top5user select * from
userdb.user order by uid desc limit 5;
create database teadb;
create table teadb.t1 select name,uid,homedir from
userdb.user where uid<=10;
select * from teadb.t1;
多表查询
select 字段名列表 from 表名列表;
select 字段名列表 from 表名列表 where 条件;
use teadb;
create table t2 select name,uid,homedir from userdb.user limit 3;
create table t3 select name,uid,shell from userdb.user limit 5;
3 x 5 15
select * from t2,t3; 笛卡尔集
select t2.* ,t3.name from t2,t3;
select t2.name,t3.name from t2,t3 where t2.name=t3.name;
select t2.name,t2.homedir,t3.name,t3.shell from t2,t3 where t2.name=t3.name;
连接查询
左连接查询:以左边的表为主显示查询记录
select 字段名列表 from 表名 left join 表名 on 条件;
右连接查询:以右边的表为主显示查询记录
select 字段名列表 from 表名 right join 表名 on 条件;
use tead;
create table t4 select name,uid,shell from userdb.user limit 3;
create table t5 select name,uid,shell from userdb.user limit 5;
select * from t4 left join t5 on t4.uid = t5.uid;
select * from t4 right join t5 on t4.uid = t5.uid;