数据导入 :把系统文件的内容保存到数据库服务器的表里

需求:把/etc/passwd文件的内容保存到userdb库user表里。

create  database  userdb;

create   table  userdb.user(

name  char(30),

password   char(1),

uid   int(2),

gid   int(2),

comment   varchar(100),

homedir     varchar(50),

shell   varchar(25),

index(name)

);

mysql>show variables like "secure_file_priv";

#cp  /etc/passwd    /var/lib/mysql-files/

#setenforce   0

导入命令

LOAD DATA INFILE  “目录名/文件名” 

INTO TABLE   库名.表名

FIELDS TERMINATED BY  “分隔符”

LINES TERMINATED BY  “\n”;

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)  

primary key  auto_increment   first;

数据导出:把表记录存储系统文件里。

sql查询命令  INTO  OUTFILE  “目录名/文件名”

FIELDS TERMINATED BY  “分隔符”

LINES TERMINATED BY  “\n”;

mysql>show variables like  "secure_file_priv";

mysql>select  *   from userdb.user   where  id<=5 into  

outfile   "/var/lib/mysql-files/user.txt";

#cat  /var/lib/mysql-files/user.txt

++++++++++++++++++++++++++++++++

管理表记录

1 插入新记录

insert  into  库.表(字段名列表)values(值列表);

insert  into  userdb.user  values

(50,"bob","x",2002,2002,"this is user 

student","/home/bob","/bin/bash");

insert  into  userdb.user  values

(51,"bob","x",2002,2002,"this is user 

student","/home/bob","/bin/bash"),

(52,null,"x",2002,2002,"this is user 

student","/home/bob","/bin/bash");

insert   into   userdb.user(name,gid)    values

("jerry",2078),("lucy",3009);

insert into userdb.user

(name,password,uid,gid,comment,homedir,shell)values

("alic","x",1009,1009,"teac","/home/alic","/sbin/nologi

n");

2 查询记录

select   字段名列表  from 库.表 where  条件;

select  *  from  userdb.user;

select  id,name,uid  from  userdb.user;

select  id,name,uid  from  userdb.user  where  id=5;

查询条件:

数值比较   >    >=    <   <=   =

字段名    符号   数字

select  * from userdb.user where uid=10;

select  * from userdb.user where  id=5;

select  * from userdb.user where  gid<=5;

 

字符比较   =    !=

字段名    符号   "字符"

select  name from userdb.user where name="daemon"; 

select  name,uid,shell  from userdb.user where  shell!

="/bin/bash";

范围内查找

between...and....    在...之间

in  (值列表)          在...里

not  in  (值列表)          不在...里

select  name,uid,shellfrom userdb.user  where uid  

between 0  and  5;

select name from userdb.user  where name  in 

("rsync","daemon","apache","mysql");

select name,uid  from userdb.user  where uid  in 

(0,21,2002,13);

select name ,shell from  userdb.user where  shell  not in 

("/bin/bash","/sbin/nologin");

匹配空   is  null

匹配非空  is not  null

insert into userdb.user(id ,name)

values

(61,""),(62,"null"),(63,NULL),(64,null);

select  id,name from userdb.user

where

name is null;

select  id,name from userdb.user

where

name="null";

select  id,name from userdb.user

where

name="";

select  id,name from userdb.user

where

name is not null;

mysql> select id,name from userdb.user 

    -> where

    -> shell is null;

模糊查询

like  '表达式'

_  任意一个字符

% 零个或多个字符

select  name from userdb.user where name like  '____';

select  name from userdb.user where name like  '_____%';

select  name from userdb.user where name like  'a%';

select  name from userdb.user where name like  'a%d';

select  id,name from userdb.user where name like  '%';

在查询结果里查询记录  having  条件;

select  id,name from userdb.user where name like  '%'  

having  id   in (63,64,52,61);

正则匹配

.    *    [  ]    ^    $

regexp  '正则表达式'

select name  from userdb.user where  name  regexp  

't$';

select name  from userdb.user where  name  regexp  

'^a';

insert into userdb.user(id ,name)

values

(65,"plj9"),(66,"pl8j"),(67,"lu2cy"),(68,"3mack");

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,uid  from userdb.user where uid  regexp  

'...';

select name,uid  from userdb.user where uid  regexp  

'^...$';

select name,uid  from userdb.user where name   regexp  

'^....$';

select name,uid  from userdb.user where name   regexp  

'^a.*t$';

四则运算   +  -   *   /

select name,uid,gid,uid+gid as sum from userdb.user 

where name in  ("adm","bin");

alter table  userdb.user  add  s_year   year  default  1990  

after  name;

 select name,s_year,2017-s_year as age from userdb.user 

 where   name="root";

alter table  userdb.user  add  shellscript   int(2)  default  

60   after  s_year  ,add   linuxsys  int(2)  default  80  after 

 shellscript;

select name,shellscript,linuxsys ,shellscript+linuxsys  as 

sum  , (shellscript+linuxsys)/2 as  avg   from userdb.user 

where name="root";

逻辑匹配

逻辑与   and  多个查询条件时,必须同时成立。

逻辑或   or  多个查询条件时,某个查询条件成立就可以

逻辑非    !  取反

select  name from userdb.user  where  name="root"  

and   uid=0  and  shell="/bin/bash";

select  name from userdb.user  where  name="root"  or  

uid=3  or  gid="2002";

select  name,uid,gid from userdb.user  where  

name="root"  or  uid=3  or  gid="2002";

select  name,uid  from  userdb.user   where   

name="root"  and uid=0   or   uid=1;

select  name,uid  from  userdb.user   where   

name="root"  and  ( uid=0   or   uid=1);

select name  from userdb.user where name!="root";

集聚函数

sum(字段名)  求和

avg(字段名)  求平均值

max(字段名)  求大值

min(字段名)  求小值

count(字段名)  求个数

select  count(name)  from userdb.user  where shell!

="/bin/bash";

select  count(id)  from userdb.user ;

select  min(uid) from userdb.user  where  

shell="/bin/bash";

select  max(uid) from userdb.user  where  

shell="/bin/bash";

select sum(uid) from userdb.user;

select  avg(linuxsys) from userdb.user;

DISTINCT  不显示字段的重复值

select  distinct  shell  from userdb.db;

select  distinct  shell  from userdb.user where uid<=10;

查询分组

sql查询命令  group  by  字段名;

 select shell  from userdb.user where uid<1000 group 

by shell;

查询排序

sql查询命令  order  by  字段名  升序/降列;

                                                   asc  / desc

select  name,gid  from  userdb.user  where 

shell="/bin/bash";

 select  name,gid  from  userdb.user  where shell!

="/bin/bash" order by gid desc;

select 姓名,部门,工资  from 员工信息表  where 性别="女" 

and  工资  >=20000   order by  工资  desc;

限制显示查询记录数

sql查询命令   limit   数字

sql查询命令   limit   数字1,数字2

 

select id,name,shell from userdb.user limit 1 ;

select id,name,shell from userdb.user limit 2,2 ;

select  *  from  userdb.user  order by  uid  desc  limit  5;

select  *  from  userdb.user where shell="/bin/bash" 

order by  uid  desc  limit  5;

++++++++++++++++++++++++++++++++++++

3 更新记录字段的值

update  库.表  set  字段名=值, 字段名="值";

update  库.表  set  字段名=值, 字段名="值"  where  条件;

update  userdb.user  set    s_year=1980;

update  userdb.user  set  shellscript=100,linuxsys=100 

where  id=1;

4 删除记录

delete   from   库.表;删除所有记录

delete   from   库.表  where  条件 ;

delete from userdb.user where name is null;

++++++++++++++++++++++++++++++++

复制表(功能 : 备份表  、快速建表)

create  table 库.表    sql查询;

create table   userdb.user2  select  * from userdb.user;

create table   userdb.user3  select  name,uid,homedir 

from userdb.user  limit  10;

create table   userdb.user4  select  * from userdb.user 

where   1 = 2;

+++++++++++++++++++++++++++++++++

where嵌套查询:把内层的查询结果做为外层查询的查询条件。

sql查询  where  条件  (sql查询);

select  name,shellscript from userdb.user where  

shellscript <  (select  avg(shellscript) from userdb.user );

select  name,shellscript from userdb.user where  

shellscript <  (select  avg(shellscript) from userdb.user ) 

having name="lucy";

select  user from mysql.user where user in (select name 

from userdb.user where shell="/bin/bash");

多表查询

select 字段名列表 from 表名列表; 笛卡尔集

select 字段名列表 from 表名列表 where 条件;

create  table  userdb.t1  select name,uid,shell  from 

userdb.user  limit  3; 

create  table  userdb.t2  select name,gid,homedir  from 

userdb.user  limit  5;

select  * from t2,t1;  

select  t1.name,t2.name from t2,t1;

select  t1.name,t2.* from t2,t1;

select  * from t2,t1  where  t1.name =  t2.name;

select t1.name,t1.uid,t2.gid, t2.name from t2,t1  where  

t1.name =  t2.name;

连接查询

左连接查询 :查询时以左边的表为主显示查询结果。

select  字段名列表   from 表A  left join  表B  on  条件;

右连接查询:查询时以右边的表为主显示查询结果

select  字段名列表   from 表A  right  join  表B  on  条件;

create  table  t3   select name,uid,shell  from userdb.user 

limit  3;

create  table  t4   select name,uid,shell  from userdb.user 

limit  6;

select  *  from  t3  left  join  t4   on  t3.uid = t4.uid;

select  t3.*  from  t3  left  join  t4   on  t3.uid = t4.uid;

select  *  from  t3    right  join  t4  on  t3.uid = t4.uid;

select  *  from  t3    right  join  t4  on  t3.uid = t4.uid;