數據導入、導出、管理表記錄、
數據導入: 把系統文件的內容存儲到數據庫服務器的表裏
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;
數據導入、導出、管理表記錄、