1. 程式人生 > >MySQL數據庫管理3

MySQL數據庫管理3

管理表記錄 集聚函數

數據導入 :把系統文件的內容保存到數據庫服務器的表裏

需求:把/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;


MySQL數據庫管理3