mysql导出dat文件linux命令,基于Linux的MySQL操作实例之数据导入/导出,新增/查询表记录...

基于Linux的MySQL操作实例之数据导入/导出,新增/查询表记录

前言

本篇就数据的导入/导出数据表,新增/查询表记录这些部分进行了实例和基本概念说明。

本篇对板式做了一些修改,希望大家喜欢。

本篇内容结合本人其他几篇一起观看效果更佳,有兴趣的各位可以看看。

数据导入

概述

数据导入:把系统文件的内容存储到数据库的表里。

语法格式

LOAD DATA INFILE '文件名' INTO TABLE 表名

FIELDS TERMINATED BY '分隔符' LINES TERMINATED BY '\n';

fields 表示区域划分,即列的划分

lines 表示列的划分

注意事项

字段分隔符要与文件内的一致

指定导入文件的绝对路径

导入数据的表字段类型要与文件字段匹配

实例操作

mysql> create database test_db;

Query OK, 1 row affected (0.00 sec)

mysql> use test_db;

Database changed

mysql> create table userlist ( uname char(25) not null, passwdmark char(1) not null, uid int(3), gid smallint(3), comment varchar(50), homedir char(30), shell char(30), index(uname) );

Query OK, 0 rows affected (0.74 sec)

mysql> desc userlist;

+------------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+------------+-------------+------+-----+---------+-------+

| uname | char(25) | NO | MUL | NULL | |

| passwdmark | char(1) | NO | | NULL | |

| uid | int(3) | YES | | NULL | |

| gid | smallint(3) | YES | | NULL | |

| comment | varchar(50) | YES | | NULL | |

| homedir | char(30) | YES | | NULL | |

| shell | char(30) | YES | | NULL | |

+------------+-------------+------+-----+---------+-------+

7 rows in set (0.01 sec)

mysql> load data infile "/etc/passwd" into table userlist fields terminated by ':' lines terminated by "\n";

Query OK, 25 rows affected (0.17 sec)

Records: 25 Deleted: 0 Skipped: 0 Warnings: 0

mysql> select * from userlist;

+-----------+------------+------+------+------------------------------+---------------------+----------------+------+

| uname | passwdmark | uid | gid | comment | homedir | shell | u_id |

+-----------+------------+------+------+------------------------------+---------------------+----------------+------+

| root | x | 0 | 0 | root | /root | /bin/bash | 01 |

| bin | x | 1 | 1 | bin | /bin | /sbin/nologin | 02 |

| daemon | x | 2 | 2 | daemon | /sbin | /sbin/nologin | 03 |

| adm | x | 3 | 4 | adm | /var/adm | /sbin/nologin | 04 |

| lp | x | 4 | 7 | lp | /var/spool/lpd | /sbin/nologin | 05 |

……

mysql> alter table userlist add u_id int(2) zerofill primary key auto_increment first;

Query OK, 0 rows affected (0.94 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql> select * from userlist;

+------+-----------+------------+------+------+------------------------------+---------------------+----------------+

| u_id | uname | passwdmark | uid | gid | comment | homedir | shell |

+------+-----------+------------+------+------+------------------------------+---------------------+----------------+

| 01 | root | x | 0 | 0 | root | /root | /bin/bash |

| 02 | bin | x | 1 | 1 | bin | /bin | /sbin/nologin |

| 03 | daemon | x | 2 | 2 | daemon | /sbin | /sbin/nologin |

| 04 | adm | x | 3 | 4 | adm | /var/adm | /sbin/nologin |

……

数据导出

概述

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

语法格式:

sql查询命令 INTO OUTFILE '文件名';

sql查询命令 INTO OUTFILE '目录名/文件名';

sql查询命令 INTO OUTFILE '目录名/文件名' fields terminated by "符号";

sql查询命令 INTO OUTFILE '目录名/文件名' lines terminated by "!!!";

sql查询命令 INTO OUTFILE '目录名/文件名' fields terminated by "符号" lines terminated by "符号";

注意事项

导出的内容由SQL查询语句决定

若不指定路径,默认会放在执行导出命令时所在库对应的数据库目录下。

应确保mysql用户对目标文件夹有写权限。

实例操作

//创建文件存放目录

[root@mysql var]# mkdir /var/mysql_doc/

[root@mysql var]# ll -d /var/mysql_doc/

drwxr-xr-x. 2 root root 4096 Jan 17 06:44 /var/mysql_doc/

[root@mysql var]# id mysql

uid=27(mysql) gid=27(mysql) groups=27(mysql)

//

[root@mysql var]# chown mysql: /var/mysql_doc/

[root@mysql var]# ll -d /var/mysql_doc/

drwxr-xr-x. 2 mysql mysql 4096 Jan 17 06:44 /var/mysql_doc/

mysql> select uname,shell from userlist where shell="/bin/bash" ;

+-------+-----------+

| uname | shell |

+-------+-----------+

| root | /bin/bash |

| mysql | /bin/bash |

+-------+-----------+

2 rows in set (0.00 sec)

//测试当文件存放目录没有操作权限的情况:

[root@mysql var]# chown root: /var/mysql_doc/

[root@mysql var]# ll -d /var/mysql_doc/

drwxr-xr-x. 2 root root 4096 Jan 17 06:44 /var/mysql_doc/

mysql> select uname,shell from userlist where shell="/bin/bash" into outfile "/var/mysql_doc/test1.txt";

ERROR 1 (HY000): Can't create/write to file '/var/mysql_doc/test1.txt' (Errcode: 13 - Permission denied)

//正确操作

[root@mysql var]# chown mysql: /var/mysql_doc/

[root@mysql var]# ll -d /var/mysql_doc/

drwxr-xr-x. 2 mysql mysql 4096 Jan 17 06:44 /var/mysql_doc/

mysql> select uname,shell from userlist where shell="/bin/bash" into outfile "/var/mysql_doc/test1.txt";

Query OK, 2 rows affected (0.00 sec)

[root@mysql var]# cd mysql_doc/

[root@mysql mysql_doc]# ls

test1.txt

[root@mysql mysql_doc]# cat test1.txt

root /bin/bash

mysql /bin/bash

//指定列分割符的情况:

mysql> select uname,homedir from userlist into outfile "/var/mysql_doc/test2.txt" fields terminated by "----";

Query OK, 25 rows affected (0.00 sec)

[root@mysql mysql_doc]# head -5 test2.txt

root----/root

bin----/bin

daemon----/sbin

adm----/var/adm

lp----/var/spool/lpd

//指定行的分割符的情况

mysql> select uname from userlist into outfile "/var/mysql_doc/test3.txt" lines terminated by "||";

Query OK, 25 rows affected (0.00 sec)

[root@mysql mysql_doc]# cat test3.txt

abrt||adm||bin||daemon||dbus||ftp||games||gopher||haldaemon||halt||lp||mail||mysql||nobody||ntp||operator||postfix||root||saslauth||shutdown||sshd||sync||tcpdump||uucp||vcsa||[root@mysql mysql_doc]#

/*

导出时,文件若已经存在,会报错。

不指定文件目录时,文件会默认存放在当前数据库所在的目录中

若没有指定当前的数据库,文件会默认存放在MySQL目录(/var/lib/mysql)中

也可以自行创建目录,但要保证mysql进程的用户对该目录有相应的操作权限。

*/

新增表记录操作(insert into)

语法格式

若是当前操作的表就是当前库之内的可直接使用表名(即使用命令“use 数据库名”切换数据库)

一次插入一条记录 给记录的所有字段赋值

insert into 库.表 values(值列表);

一次插入多条记录 给记录的所有字段赋值

insert into 库.表 values(值列表),(值列表);

一次插入1条记录 给记录的指定字段赋值

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

一次插入多条记录 给记录的指定字段赋值

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

操作实例

mysql> insert into userlist values(34,"job","X",502,600,"job","/home/job/","/bin/bash"), (35,"tom","x",503,601,"tom","/home/job/","/bin/bash");

Query OK, 2 rows affected (0.05 sec)

Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from userlist where u_id=34 || u_id=35;

+------+-------+------------+------+------+---------+------------+-----------+

| u_id | uname | passwdmark | uid | gid | comment | homedir | shell |

+------+-------+------------+------+------+---------+------------+-----------+

| 34 | job | X | 502 | 600 | job | /home/job/ | /bin/bash |

| 35 | tom | x | 503 | 601 | tom | /home/job/ | /bin/bash |

+------+-------+------------+------+------+---------+------------+-----------+

2 rows in set (0.00 sec)

mysql> insert into userlist(uname,uid,gid) values("jack",503,605);

ERROR 1364 (HY000): Field 'passwdmark' doesn't have a default value

mysql> insert into userlist(uname,passwdmark,uid,gid) values("jack","x",503,605);

Query OK, 1 row affected (0.03 sec)

查询表记录(select)

语法格式:

select 字段列表 from 表名;

select 字段列表 from 表名 where 表达式;

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

实例操作

由于select操作的方式条件过多,我们将分开进行实例说明。

数值比较实例操作

格式:字段名 符号 数字

符号:= != > >= < <=

//数值比较

mysql> select uname,shell from userlist where u_id=500;

Empty set (0.00 sec)

mysql> select uname,shell from userlist where u_id>500;

Empty set (0.00 sec)

mysql> select uname,shell from userlist where uid>500;

+-------+-----------+

| uname | shell |

+-------+-----------+

| job | /bin/bash |

| tom | /bin/bash |

| jack | NULL |

+-------+-----------+

3 rows in set (0.00 sec)

mysql> select uname,shell from userlist where uid=500;

Empty set (0.00 sec)

mysql> select uname,shell from userlist where uid>=500;

+-------+-----------+

| uname | shell |

+-------+-----------+

| job | /bin/bash |

| tom | /bin/bash |

| jack | NULL |

+-------+-----------+

3 rows in set (0.00 sec)

mysql> select u_id,uname,gid,homedir from userlist where gid<50;

……

mysql> select uname,uid,shell from userlist where uid>10&& uid<20;

+----------+------+---------------+

| uname | uid | shell |

+----------+------+---------------+

| operator | 11 | /sbin/nologin |

| games | 12 | /sbin/nologin |

| gopher | 13 | /sbin/nologin |

| ftp | 14 | /sbin/nologin |

+----------+------+---------------+

4 rows in set (0.00 sec)

mysql> select uname,uid,shell from userlist where uid>10 and uid<20;

+----------+------+---------------+

| uname | uid | shell |

+----------+------+---------------+

| operator | 11 | /sbin/nologin |

| games | 12 | /sbin/nologin |

| gopher | 13 | /sbin/nologin |

| ftp | 14 | /sbin/nologin |

+----------+------+---------------+

4 rows in set (0.00 sec)

字符比较操作实例

格式:字段名 符号 "值"

符号:= !=

mysql> select uname,shell from userlist where uname!="root";

+-----------+----------------+

| uname | shell |

+-----------+----------------+

| bin | /sbin/nologin |

| daemon | /sbin/nologin |

| adm | /sbin/nologin |

……

mysql> select uname,shell from userlist where uname="root";

+-------+-----------+

| uname | shell |

+-------+-----------+

| root | /bin/bash |

+-------+-----------+

1 row in set (0.00 sec)

范围内比较实例操作

格式:

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

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

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

//适合用于数值型的变量,字符型或其他型虽然不会报错,但是会出现结果显示不准确的情况

mysql> select uname,uid,shell from userlist where uid between 10 and 20;

+----------+------+---------------+

| uname | uid | shell |

+----------+------+---------------+

| uucp | 10 | /sbin/nologin |

| operator | 11 | /sbin/nologin |

| games | 12 | /sbin/nologin |

| gopher | 13 | /sbin/nologin |

| ftp | 14 | /sbin/nologin |

+----------+------+---------------+

5 rows in set (0.00 sec)

mysql> select uname,uid,homedir from userlist where uid in (10,20,30,40,500);

+-------+------+-----------------+

| uname | uid | homedir |

+-------+------+-----------------+

| uucp | 10 | /var/spool/uucp |

+-------+------+-----------------+

1 row in set (0.00 sec)

mysql> select uname,uid,homedir from userlist where uname in ("root","shutdown","mysql","natasha");

+----------+------+----------------+

| uname | uid | homedir |

+----------+------+----------------+

| root | 0 | /root |

| shutdown | 6 | /sbin |

| mysql | 27 | /var/lib/mysql |

+----------+------+----------------+

3 rows in set (0.00 sec)

mysql> select uname,homedir,shell from userlist where shell not in ("/sbin/nologin");

+----------+----------------+----------------+

| uname | homedir | shell |

+----------+----------------+----------------+

| root | /root | /bin/bash |

| sync | /sbin | /bin/sync |

| shutdown | /sbin | /sbin/shutdown |

| halt | /sbin | /sbin/halt |

| mysql | /var/lib/mysql | /bin/bash |

| job | /home/job/ | /bin/bash |

| tom | /home/job/ | /bin/bash |

+----------+----------------+----------------+

7 rows in set (0.00 sec)

匹配null操作实例

格式:

匹配空 is null

匹配非空 is not null

mysql> select u_id,uname,shell from userlist where shell is null;

+------+-------+-------+

| u_id | uname | shell |

+------+-------+-------+

| 36 | jack | NULL |

+------+-------+-------+

1 row in set (0.00 sec)

mysql> select u_id,uname,shell from userlist where shell is not NULL;

+------+-----------+----------------+

| u_id | uname | shell |

+------+-----------+----------------+

| 01 | root | /bin/bash |

| 02 | bin | /sbin/nologin |

| 03 | daemon | /sbin/nologin |

……

//"null","NULL",""都代表字符串,不表示NULL

mysql> insert into userlist (u_id,uname) values(40,"null"),(41,"NULL"),(42,"");

Query OK, 3 rows affected (0.04 sec)

Records: 3 Duplicates: 0 Warnings: 0

mysql> select u_id,uname from userlist where u_id>=40;

+------+-------+

| u_id | uname |

+------+-------+

| 40 | null |

| 41 | NULL |

| 42 | |

+------+-------+

3 rows in set (0.00 sec)

mysql> select u_id,uname from userlist where uname="";

+------+-------+

| u_id | uname |

+------+-------+

| 42 | |

+------+-------+

1 row in set (0.00 sec)

mysql> select u_id,uname from userlist where uname="null";

+------+-------+

| u_id | uname |

+------+-------+

| 40 | null |

| 41 | NULL |

+------+-------+

2 rows in set (0.00 sec)

mysql> select u_id,uname from userlist where uname="NULL";

+------+-------+

| u_id | uname |

+------+-------+

| 40 | null |

| 41 | NULL |

+------+-------+

2 rows in set (0.00 sec)

mysql> select u_id,uname from userlist where uname=NULL;

Empty set (0.00 sec)

逻辑比较操作实例

逻辑比较(多个查询条件)

格式:

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

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

逻辑非 ! 取反

//and的优先级高于or,()的优先级最高

mysql> select u_id,uid,uname,homedir,shell from userlist where uname="root" or uid=1 or shell="/bin/bash";

+------+------+-------+----------------+---------------+

| u_id | uid | uname | homedir | shell |

+------+------+-------+----------------+---------------+

| 01 | 0 | root | /root | /bin/bash |

| 02 | 1 | bin | /bin | /sbin/nologin |

| 25 | 27 | mysql | /var/lib/mysql | /bin/bash |

| 34 | 502 | job | /home/job/ | /bin/bash |

| 35 | 503 | tom | /home/job/ | /bin/bash |

+------+------+-------+----------------+---------------+

5 rows in set (0.00 sec)

mysql> select u_id,uid,uname,homedir,shell from userlist where uname="bin" and uid=0;

Empty set (0.00 sec)

mysql> select u_id,uid,uname from userlist where uname="root" or uname="bin" and uid=1;

+------+------+-------+

| u_id | uid | uname |

+------+------+-------+

| 02 | 1 | bin |

| 01 | 0 | root |

+------+------+-------+

2 rows in set (0.00 sec)

mysql> select uname,uid from userlist where (uname="root" or uname="bin") and uid=1;

+-------+------+

| uname | uid |

+-------+------+

| bin | 1 |

+-------+------+

1 row in set (0.00 sec)

四则运算操作实例

符号:"+","-","*","/","%"

//调整表结构,添加测试数据

mysql> alter table userlist add age tinyint(2) not null default 19;

Query OK, 0 rows affected (0.74 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql> alter table userlist add rhcsa_n double(5,2) not null default 0 ,

-> add rhce_n double(5,2) not null default 0;

Query OK, 0 rows affected (0.77 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql> desc userlist;

+------------+--------------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+------------+--------------------------+------+-----+---------+----------------+

| u_id | int(2) unsigned zerofill | NO | PRI | NULL | auto_increment |

| uname | char(25) | NO | MUL | NULL | |

| passwdmark | char(10) | YES | | NULL | |

| uid | int(3) | YES | | NULL | |

| gid | smallint(3) | YES | | NULL | |

| comment | varchar(50) | YES | | NULL | |

| homedir | char(30) | YES | | NULL | |

| shell | char(30) | YES | | NULL | |

| age | tinyint(2) | NO | | 19 | |

| rhcsa_n | double(5,2) | NO | | 0.00 | |

| rhce_n | double(5,2) | NO | | 0.00 | |

+------------+--------------------------+------+-----+---------+----------------+

11 rows in set (0.00 sec)

mysql> update userlist set rhcsa_n=70;

Query OK, 31 rows affected (0.04 sec)

Rows matched: 31 Changed: 31 Warnings: 0

mysql> update userlist set rhce_n=90;

Query OK, 31 rows affected (0.05 sec)

Rows matched: 31 Changed: 31 Warnings: 0

mysql> select * from userlist;

+------+-----------+------------+------+------+------------------------------+---------------------+----------------+-----+---------+--------+

| u_id | uname | passwdmark | uid | gid | comment | homedir | shell | age | rhcsa_n | rhce_n |

+------+-----------+------------+------+------+------------------------------+---------------------+----------------+-----+---------+--------+

| 01 | root | x | 0 | 0 | root | /root | /bin/bash | 19 | 70.00 | 90.00 |

| 02 | bin | x | 1 | 1 | bin | /bin | /sbin/nologin | 19 | 70.00 | 90.00 |

| 03 | daemon | x | 2 | 2 | daemon | /sbin | /sbin/nologin | 19 | 70.00 | 90.00 |

| 04 | adm | x | 3 | 4 | adm | /var/adm | /sbin/nologin | 19 | 70.00 | 90.00 |

| 05 | lp | x | 4 | 7 | lp | /var/spool/lpd | /sbin/nologin | 19 | 70.00 | 90.00 |

……

//where u_id<10 是避免显示结果过多

mysql> select uname,2017-age as s_year ,age from userlist where u_id<10;

+----------+--------+-----+

| uname | s_year | age |

+----------+--------+-----+

| root | 1998 | 19 |

| bin | 1998 | 19 |

| daemon | 1998 | 19 |

| adm | 1998 | 19 |

| lp | 1998 | 19 |

| sync | 1998 | 19 |

| shutdown | 1998 | 19 |

| halt | 1998 | 19 |

| mail | 1998 | 19 |

+----------+--------+-----+

9 rows in set (0.02 sec)

//使用as设置别名,在结果显示处

mysql> select uname,year(now())-age as s_year,age from userlist where u_id<10

-> ;

+----------+--------+-----+

| uname | s_year | age |

+----------+--------+-----+

| root | 1998 | 19 |

| bin | 1998 | 19 |

| daemon | 1998 | 19 |

| adm | 1998 | 19 |

| lp | 1998 | 19 |

| sync | 1998 | 19 |

| shutdown | 1998 | 19 |

| halt | 1998 | 19 |

| mail | 1998 | 19 |

+----------+--------+-----+

9 rows in set (0.03 sec)

mysql> select uname,rhcsa_n,rhce_n,rhcsa_n+rhce_n as add_result,(rhcsa_n+rhce_n)/2 as av_result from userlist where u_id>30;

+-------+---------+--------+------------+-----------+

| uname | rhcsa_n | rhce_n | add_result | av_result |

+-------+---------+--------+------------+-----------+

| job | 70.00 | 90.00 | 160.00 | 80.000000 |

| tom | 70.00 | 90.00 | 160.00 | 80.000000 |

| jack | 70.00 | 90.00 | 160.00 | 80.000000 |

| null | 70.00 | 90.00 | 160.00 | 80.000000 |

| NULL | 70.00 | 90.00 | 160.00 | 80.000000 |

| | 70.00 | 90.00 | 160.00 | 80.000000 |

+-------+---------+--------+------------+-----------+

6 rows in set (0.00 sec)

//请注意as是生成别名,只是一个别名,不是类似与变量,不可以在后续使用,

mysql> select uname,rhcsa_n,rhce_n,rhcsa_n+rhce_n as add_result,add_result/2 as av_result from userlist where u_id>30;

ERROR 1054 (42S22): Unknown column 'add_result' in 'field list'

模糊查询(like)操作实例

格式:

where 字段名 like '表达式'

"_":任意一个字符

"%":零个或多个字符

该表达式不同于正则表达式等,是SQL自带的匹配方式。

//"_"表示单个字符,"%"表示任意个字符(零个或多个)

mysql> select uname from userlist where uname like "a___";

+-------+

| uname |

+-------+

| abrt |

+-------+

1 row in set (0.00 sec)

mysql> select uname from userlist where uname like "___a";

+-------+

| uname |

+-------+

| vcsa |

+-------+

1 row in set (0.00 sec)

//uname字段至少两个字符

mysql> select uname from userlist where uname like "_%_";

+-----------+

| uname |

+-----------+

| abrt |

| adm |

| bin |

| daemon |

| dbus |

| ftp |

……

//以r开头的uname字段的值

mysql> select uname from userlist where uname like "r%";

+-------+

| uname |

+-------+

| root |

+-------+

1 row in set (0.00 sec)

//uname为空(null)的字段

mysql> select u_id,uname from userlist where uname is null;

Empty set (0.00 sec)

mysql> alter table userlist modify uname char(10) ;

Query OK, 31 rows affected (1.37 sec)

Records: 31 Duplicates: 0 Warnings: 0

//插入一条uname为空的字段

mysql> insert into userlist(u_id,uname) values (44,null);

Query OK, 1 row affected (0.04 sec)

mysql> select u_id,uname from userlist where uname is null;

+------+-------+

| u_id | uname |

+------+-------+

| 44 | NULL |

+------+-------+

1 row in set (0.00 sec)

//该方式无法检索到uname为null的条目

mysql> select u_id,uname from userlist where uname like "%";

+------+-----------+

| u_id | uname |

+------+-----------+

| 42 | |

| 18 | abrt |

| 04 | adm |

| 02 | bin |

| 03 | daemon |

| 16 | dbus |

| 14 | ftp |

| 12 | games |

| 13 | gopher |

| 19 | haldaemon |

| 08 | halt |

| 36 | jack |

| 34 | job |

| 05 | lp |

| 09 | mail |

| 25 | mysql |

| 15 | nobody |

| 20 | ntp |

| 40 | null |

| 41 | NULL |

| 11 | operator |

| 22 | postfix |

| 01 | root |

| 21 | saslauth |

| 07 | shutdown |

| 23 | sshd |

| 06 | sync |

| 24 | tcpdump |

| 35 | tom |

| 10 | uucp |

| 17 | vcsa |

+------+-----------+

31 rows in set (0.00 sec)

mysql> select u_id,uname from userlist where uname like "%" and u_id=44;

Empty set (0.00 sec)

正则表达式操作实例

使用正则表达式做查询条件

由于正则表达式是一个独立的兼容性好的其他表达式语法,这里就不展开讲解了。

关于正则表达式的更多细节可以去我的正则表达式的博客查看。

支持符号:"^","$",".","*","[ ]"

格式:字段名 regexp '正则表达式'

//正则表达式操作实例

mysql> insert into userlist(uname) values ("bob"),("plj9"),("pl8j"),("p7lj"),("6plj");

Query OK, 5 rows affected (0.04 sec)

Records: 5 Duplicates: 0 Warnings: 0

mysql> select uname from userlist where uname regexp "bb";

Empty set (0.00 sec)

mysql> select uname from userlist where uname regexp "b.*b";

+-------+

| uname |

+-------+

| bob |

+-------+

1 row in set (0.00 sec)

mysql> select uname from userlist where uname regexp "^b.*b$";

+-------+

| uname |

+-------+

| bob |

+-------+

1 row in set (0.00 sec)

mysql> select uname from userlist where uname regexp "^bb$";

Empty set (0.00 sec)

mysql> select uname from userlist where uname regexp "^a.*t$";

+-------+

| uname |

+-------+

| abrt |

+-------+

1 row in set (0.00 sec)

mysql> select uname from userlist where uname regexp "[0-9]";

+-------+

| uname |

+-------+

| 6plj |

| p7lj |

| pl8j |

| plj9 |

+-------+

4 rows in set (0.00 sec)

mysql> select uname from userlist where uname regexp "^[0-9]";

+-------+

| uname |

+-------+

| 6plj |

+-------+

1 row in set (0.00 sec)

mysql> select uname from userlist where uname regexp "[0-9]$";

+-------+

| uname |

+-------+

| plj9 |

+-------+

1 row in set (0.00 sec)

//mysql不区分大小写,所以正则表达式的大小写依旧不区分

mysql> select uname from userlist where uname regexp "[A-Z]";

+-----------+

| uname |

+-----------+

| 6plj |

| abrt |

| adm |

| bin |

| bob |

| daemon |

| dbus |

| ftp |

| games |

| gopher |

| haldaemon |

| halt |

……

聚集函数操作实例

max(字段名) 获取最大值

min(字段名) 获取最小值

avg(字段名) 获取平均值

sum(字段名) 求和

count(字段名) 获取字段值个数

//内置函数

//该类函数不能在where后面的表达式中使用,SQL不支持这样操作

mysql> select shell from userlist where shell is null;

+-------+

| shell |

+-------+

| NULL |

| NULL |

| NULL |

| NULL |

| NULL |

| NULL |

| NULL |

| NULL |

| NULL |

| NULL |

+-------+

10 rows in set (0.00 sec)

mysql> select count(shell) from userlist where shell is null;

+--------------+

| count(shell) |

+--------------+

| 0 |

+--------------+

1 row in set (0.00 sec)

mysql> select count(u_id) from userlist where shell is null;

+-------------+

| count(u_id) |

+-------------+

| 10 |

+-------------+

1 row in set (0.00 sec)

mysql> select count(*) from userlist;

+----------+

| count(*) |

+----------+

| 37 |

+----------+

1 row in set (0.00 sec)

mysql> select count(*),count(u_id),count(uname),count(shell) from userlist;

+----------+-------------+--------------+--------------+

| count(*) | count(u_id) | count(uname) | count(shell) |

+----------+-------------+--------------+--------------+

| 37 | 37 | 36 | 27 |

+----------+-------------+--------------+--------------+

1 row in set (0.00 sec)

//rhcsa_n这一列的数值的和

mysql> select sum(rhcsa_n) from userlist;

+--------------+

| sum(rhcsa_n) |

+--------------+

| 2170.00 |

+--------------+

1 row in set (0.00 sec)

mysql> select avg(rhcsa_n) from userlist;

+--------------+

| avg(rhcsa_n) |

+--------------+

| 58.648649 |

+--------------+

1 row in set (0.00 sec)

mysql> select max(rhcsa_n) from userlist;

+--------------+

| max(rhcsa_n) |

+--------------+

| 70.00 |

+--------------+

1 row in set (0.00 sec)

mysql> select max(uid) from userlist;

+----------+

| max(uid) |

+----------+

| 503 |

+----------+

1 row in set (0.00 sec)

mysql> select min(gid) from userlist;

+----------+

| min(gid) |

+----------+

| 0 |

+----------+

1 row in set (0.00 sec)

//聚合函数不能这样使用

mysql> select uname,rhcsa_n from userlist where rhcsa_n < avg(rhcsa_n);

ERROR 1111 (HY000): Invalid use of group function

分组操作实例

格式:

查询分组 group by 字段名

sql查询命令 group by 字段名;

//group on

mysql> select shell from userlist where uid<10;

+----------------+

| shell |

+----------------+

| /bin/bash |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /bin/sync |

| /sbin/shutdown |

| /sbin/halt |

| /sbin/nologin |

+----------------+

9 rows in set (0.00 sec)

mysql> select shell from userlist where uid<10 group by shell;

+----------------+

| shell |

+----------------+

| /bin/bash |

| /bin/sync |

| /sbin/halt |

| /sbin/nologin |

| /sbin/shutdown |

+----------------+

5 rows in set (0.00 sec)

mysql> select shell from userlist where uid<100 group by shell;

+----------------+

| shell |

+----------------+

| /bin/bash |

| /bin/sync |

| /sbin/halt |

| /sbin/nologin |

| /sbin/shutdown |

+----------------+

5 rows in set (0.00 sec)

//该操作没有意义,只能显示当前shell值的第一次出现的uname的值

mysql> select uname from userlist where uid<100 group by shell;

+----------+

| uname |

+----------+

| root |

| sync |

| halt |

| bin |

| shutdown |

+----------+

5 rows in set (0.00 sec)

mysql> select uid,uname,shell from userlist where uid<100 group by shell;

+------+----------+----------------+

| uid | uname | shell |

+------+----------+----------------+

| 0 | root | /bin/bash |

| 5 | sync | /bin/sync |

| 7 | halt | /sbin/halt |

| 1 | bin | /sbin/nologin |

| 6 | shutdown | /sbin/shutdown |

+------+----------+----------------+

5 rows in set (0.00 sec)

mysql> select uid,uname,shell from userlist group by shell;

+------+----------+----------------+

| uid | uname | shell |

+------+----------+----------------+

| 503 | jack | NULL |

| 0 | root | /bin/bash |

| 5 | sync | /bin/sync |

| 7 | halt | /sbin/halt |

| 1 | bin | /sbin/nologin |

| 6 | shutdown | /sbin/shutdown |

+------+----------+----------------+

6 rows in set (0.00 sec)

//两者效果相同

mysql> select distinct shell from userlist ;

+----------------+

| shell |

+----------------+

| /bin/bash |

| /sbin/nologin |

| /bin/sync |

| /sbin/shutdown |

| /sbin/halt |

| NULL |

+----------------+

6 rows in set (0.00 sec)

查询排序操作实例:

查询排序 order by

格式:

sql查询命令 order by 字段名 排序方式

asc 升序(默认)

desc 降序

mysql> select uid,uname,shell from userlist where uid<10 order by uid;

+------+----------+----------------+

| uid | uname | shell |

+------+----------+----------------+

| 0 | root | /bin/bash |

| 1 | bin | /sbin/nologin |

| 2 | daemon | /sbin/nologin |

| 3 | adm | /sbin/nologin |

| 4 | lp | /sbin/nologin |

| 5 | sync | /bin/sync |

| 6 | shutdown | /sbin/shutdown |

| 7 | halt | /sbin/halt |

| 8 | mail | /sbin/nologin |

+------+----------+----------------+

9 rows in set (0.00 sec)

mysql> select uid,uname,shell from userlist where uid<10 order by uid desc;

+------+----------+----------------+

| uid | uname | shell |

+------+----------+----------------+

| 8 | mail | /sbin/nologin |

| 7 | halt | /sbin/halt |

| 6 | shutdown | /sbin/shutdown |

| 5 | sync | /bin/sync |

| 4 | lp | /sbin/nologin |

| 3 | adm | /sbin/nologin |

| 2 | daemon | /sbin/nologin |

| 1 | bin | /sbin/nologin |

| 0 | root | /bin/bash |

+------+----------+----------------+

9 rows in set (0.00 sec)

mysql> select uid,uname,shell from userlist where uid<10 order by uname desc;

+------+----------+----------------+

| uid | uname | shell |

+------+----------+----------------+

| 5 | sync | /bin/sync |

| 6 | shutdown | /sbin/shutdown |

| 0 | root | /bin/bash |

| 8 | mail | /sbin/nologin |

| 4 | lp | /sbin/nologin |

| 7 | halt | /sbin/halt |

| 2 | daemon | /sbin/nologin |

| 1 | bin | /sbin/nologin |

| 3 | adm | /sbin/nologin |

+------+----------+----------------+

9 rows in set (0.00 sec)

mysql> select uid,uname,shell from userlist where uid<10 order by shell;

+------+----------+----------------+

| uid | uname | shell |

+------+----------+----------------+

| 0 | root | /bin/bash |

| 5 | sync | /bin/sync |

| 7 | halt | /sbin/halt |

| 1 | bin | /sbin/nologin |

| 2 | daemon | /sbin/nologin |

| 3 | adm | /sbin/nologin |

| 4 | lp | /sbin/nologin |

| 8 | mail | /sbin/nologin |

| 6 | shutdown | /sbin/shutdown |

+------+----------+----------------+

9 rows in set (0.00 sec)

mysql> select uid,uname,shell from userlist where uid<10 order by uname;

+------+----------+----------------+

| uid | uname | shell |

+------+----------+----------------+

| 3 | adm | /sbin/nologin |

| 1 | bin | /sbin/nologin |

| 2 | daemon | /sbin/nologin |

| 7 | halt | /sbin/halt |

| 4 | lp | /sbin/nologin |

| 8 | mail | /sbin/nologin |

| 0 | root | /bin/bash |

| 6 | shutdown | /sbin/shutdown |

| 5 | sync | /bin/sync |

+------+----------+----------------+

9 rows in set (0.00 sec)

having 条件操作实例

在查询结果里顾虑数据 having 条件

//从结果上来说和and等条件查询是一样的,但是由于having是从查询结果中再次进行匹配和检索

//这样操作的开销会比联合多条件查询要小,速度也会更快,

//多条件的联合查询是逐条进行检索操作

//在开发中或可以使用having语法进行二次检索

//select uname from userlist where uname is not null and uname="tom";

mysql> select uname from userlist where uname is not null having uname="tom";

+-------+

| uname |

+-------+

| tom |

+-------+

1 row in set (0.00 sec)

mysql> select uname from userlist where shell="/bin/bash" having uname="root";

+-------+

| uname |

+-------+

| root |

+-------+

1 row in set (0.00 sec)

mysql> select uname,shell from userlist where shell="/bin/bash" having uname="root";

+-------+-----------+

| uname | shell |

+-------+-----------+

| root | /bin/bash |

+-------+-----------+

1 row in set (0.00 sec)

mysql> select u_id,uname from userlist where uname like '%' having u_id in (30,31,32);

Empty set (0.00 sec)

mysql> select u_id,uname from userlist where uname like '%' having u_id in (10,11,12);

+------+----------+

| u_id | uname |

+------+----------+

| 12 | games |

| 11 | operator |

| 10 | uucp |

+------+----------+

3 rows in set (0.00 sec)

limit操作实例

limit 限制显示查询结果记录的行数。

格式:

limit 数字;

limit 起始行,共显示几行

mysql> select u_id,uname,uid from userlist order by uid desc limit 1;

+------+-------+------+

| u_id | uname | uid |

+------+-------+------+

| 35 | tom | 503 |

+------+-------+------+

1 row in set (0.00 sec)

mysql> select u_id,uname,uid from userlist order by uid desc limit 5,10;

+------+-----------+------+

| u_id | uname | uid |

+------+-----------+------+

| 15 | nobody | 99 |

| 22 | postfix | 89 |

| 16 | dbus | 81 |

| 23 | sshd | 74 |

| 24 | tcpdump | 72 |

| 17 | vcsa | 69 |

| 19 | haldaemon | 68 |

| 20 | ntp | 38 |

| 25 | mysql | 27 |

| 14 | ftp | 14 |

+------+-----------+------+

10 rows in set (0.00 sec)

mysql> select * from userlist limit 1;

+------+-------+------------+------+------+---------+---------+-----------+-----+---------+--------+

| u_id | uname | passwdmark | uid | gid | comment | homedir | shell | age | rhcsa_n | rhce_n |

+------+-------+------------+------+------+---------+---------+-----------+-----+---------+--------+

| 01 | root | x | 0 | 0 | root | /root | /bin/bash | 19 | 70.00 | 90.00 |

+------+-------+------------+------+------+---------+---------+-----------+-----+---------+--------+

1 row in set (0.00 sec)

mysql> select * from userlist limit 3;

+------+--------+------------+------+------+---------+---------+---------------+-----+---------+--------+

| u_id | uname | passwdmark | uid | gid | comment | homedir | shell | age | rhcsa_n | rhce_n |

+------+--------+------------+------+------+---------+---------+---------------+-----+---------+--------+

| 01 | root | x | 0 | 0 | root | /root | /bin/bash | 19 | 70.00 | 90.00 |

| 02 | bin | x | 1 | 1 | bin | /bin | /sbin/nologin | 19 | 70.00 | 90.00 |

| 03 | daemon | x | 2 | 2 | daemon | /sbin | /sbin/nologin | 19 | 70.00 | 90.00 |

+------+--------+------------+------+------+---------+---------+---------------+-----+---------+--------+

3 rows in set (0.00 sec)

distinct 操作实例

DISTINCT 不显示重复的值

mysql> select distinct shell from userlist ;

+----------------+

| shell |

+----------------+

| /bin/bash |

| /sbin/nologin |

| /bin/sync |

| /sbin/shutdown |

| /sbin/halt |

| NULL |

+----------------+

6 rows in set (0.00 sec)

where操作实例

where 子查询

把内层查询结果做为外层的查询条件。

select 字段名列表 from 表A 条件 (select 字段名列表 from 表B);

//where 子查询

//常用于多表查询或单个表的嵌套递归查询

//聚合函数不能这样使用

mysql> select uname,rhcsa_n from userlist where rhcsa_n < avg(rhcsa_n);

ERROR 1111 (HY000): Invalid use of group function

mysql> select uname,rhcsa_n from userlist where rhcsa_n < (select avg(rhcsa_n) from userlist);

+-------+---------+

| uname | rhcsa_n |

+-------+---------+

| NULL | 0.00 |

| bob | 0.00 |

| plj9 | 0.00 |

| pl8j | 0.00 |

| p7lj | 0.00 |

| 6plj | 0.00 |

+-------+---------+

6 rows in set (0.00 sec)

//安装mysql时自带的数据库

mysql> select user,host from mysql.user;

+------+---------------+

| user | host |

+------+---------------+

| root | 127.0.0.1 |

| root | ::1 |

| root | localhost |

| root | mysql.wolf.cn |

+------+---------------+

4 rows in set (0.00 sec)

mysql> select uname from userlist where uname in (select user from mysql.user);

+-------+

| uname |

+-------+

| root |

+-------+

1 row in set (0.00 sec)

mysql> select uname from userlist where uname in (select user from mysql.user where host="localhost");

+-------+

| uname |

+-------+

| root |

+-------+

1 row in set (0.00 sec)

复制表操作

复制表(备份表 快速创建新表)

create table 新表名 sql查询命令;

复制全表

create table 新表名 select * from 表名;

create table stu4 select * from student;

复制部分数据

create table 新表名 select 字段名列表

from 表名 where 条件;

create table stu3 select name,homedir,shell from student where uid<=10 ;

只复制表结构

create table 新表名 select * from 表名 where 1 = 2;

create table stu2 select * from student where 1 = 2;

在复制表时,源表的索引属性并不会随之到新表中。例如主键并不会随之复制。

mysql> create table userlist_bak select * from userlist;

Query OK, 37 rows affected (0.52 sec)

Records: 37 Duplicates: 0 Warnings: 0

mysql> show tables;

+-------------------+

| Tables_in_test_db |

+-------------------+

| userlist |

| userlist_bak |

+-------------------+

2 rows in set (0.00 sec)

mysql> select * from userlist_bak;

+------+-----------+------------+------+------+------------------------------+---------------------+----------------+-----+---------+--------+

| u_id | uname | passwdmark | uid | gid | comment | homedir | shell | age | rhcsa_n | rhce_n |

+------+-----------+------------+------+------+------------------------------+---------------------+----------------+-----+---------+--------+

| 01 | root | x | 0 | 0 | root | /root | /bin/bash | 19 | 70.00 | 90.00 |

| 02 | bin | x | 1 | 1 | bin | /bin | /sbin/nologin | 19 | 70.00 | 90.00 |

……

//源表的索引属性并不会随之到新表中

mysql> desc userlist_bak;

+------------+--------------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+------------+--------------------------+------+-----+---------+-------+

| u_id | int(2) unsigned zerofill | NO | | 00 | |

| uname | char(10) | YES | | NULL | |

| passwdmark | char(10) | YES | | NULL | |

| uid | int(3) | YES | | NULL | |

| gid | smallint(3) | YES | | NULL | |

| comment | varchar(50) | YES | | NULL | |

| homedir | char(30) | YES | | NULL | |

| shell | char(30) | YES | | NULL | |

| age | tinyint(2) | NO | | 19 | |

| rhcsa_n | double(5,2) | NO | | 0.00 | |

| rhce_n | double(5,2) | NO | | 0.00 | |

+------------+--------------------------+------+-----+---------+-------+

11 rows in set (0.00 sec)

mysql> create table ush_bak select uname,shell from userlist;

Query OK, 37 rows affected (0.57 sec)

Records: 37 Duplicates: 0 Warnings: 0

mysql> desc ush_bak;

+-------+----------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+----------+------+-----+---------+-------+

| uname | char(10) | YES | | NULL | |

| shell | char(30) | YES | | NULL | |

+-------+----------+------+-----+---------+-------+

2 rows in set (0.00 sec)

mysql> create table uframe_bak select * from userlist where 1=2;

Query OK, 0 rows affected (0.42 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql> desc uframe_bak;

+------------+--------------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+------------+--------------------------+------+-----+---------+-------+

| u_id | int(2) unsigned zerofill | NO | | 00 | |

| uname | char(10) | YES | | NULL | |

| passwdmark | char(10) | YES | | NULL | |

| uid | int(3) | YES | | NULL | |

| gid | smallint(3) | YES | | NULL | |

| comment | varchar(50) | YES | | NULL | |

| homedir | char(30) | YES | | NULL | |

| shell | char(30) | YES | | NULL | |

| age | tinyint(2) | NO | | 19 | |

| rhcsa_n | double(5,2) | NO | | 0.00 | |

| rhce_n | double(5,2) | NO | | 0.00 | |

+------------+--------------------------+------+-----+---------+-------+

11 rows in set (0.01 sec)

mysql> select * from uframe_bak;

Empty set (0.00 sec)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值