查询当前用户登录

mysql> select user();

查看当前所在的库

mysql> select database();

查看库

mysql> show databases;

选择一个库

mysql> Use mysql;

查看当前所在库中的表

mysql> show tables;

创建一个库

create database  dataname( ......);

创建一个表

create table 数据库.表名(
<字段名    字段类型>[(宽度)    约束条件,];

新建记录

insert into tabname
values
('jom',20);//新建一条记录,按顺序写。
也可以这样写
insert into TABNAME
(字段名1,字段名2,字段名3....)
values
(字段1值,字段2值,字段3值);
not noll //条件,不允许为空

查看该表所有记录

select * from yg_data;  

创建枚举例表

mysql> create table yg_data(         //创建一个表
    -> name char(3) not null,      //定义类型及宽度,不允许空值
    -> gender enum("boy","gril"),  //定义枚举,单选
    -> age tinyint(2) unsigned,     //定义类型及显示宽度
    -> entrytime year,   
    -> position enum("staff","foreman","manager" ) default "staff" ,
    -> work char(4),
    -> department enum("personnel","finance","plan") not null
    -> );

复制表

create table  新表名 select * from  mysql.user;
//复制表时,如果源表的Key字段有标识时,则新表不会有key属性,就是说不会被复制过去的。

查询指定字段的值:

select 字段名 from 表名;

修改表名

Alter table  源表名   rename  to  新表名;

 

表管理

Alter table  数据库.表名 [ 处理动作 ];

//处理动作:

添加新字段   add

    [  add 字段名   字段类型(宽度) 约束条件 first;  ]
    [  add 字段名   字段类型(宽度) 约束条件 after;  ] 

//默认新添加的字段追加在已有字段末尾

First  把新添加的字段添加所有字段的上方

   After 字段名  把新字段添加在指定字段名的下方

删除字段: drop

Drop  字段名;
Drop  字段名, drop字段名;

修改字段类型 modify

[ mydify 字段名1  新字段类型(宽度)  约束条件; ] 
[ mydify 字段名2  新字段类型(宽度)  约束条件; ]   
[ mydify 字段名3  新字段类型(宽度)  约束条件; ]   

更改字段名  change

[ Change   源字段名1   新字段名1  字段类型  约束条件, ]
[ Change   源字段名2   新字段名2  字段类型  约束条件, ]
[ Change   源字段名3   新字段名3  字段类型  约束条件;  ]

更改字段类型

[ alter table 表  modify 字段名  tinyint(2) unasigned;]
//改类型时将不改变的类型原样写下来。

查询指定字段的值:

[ select  host,user,passwd  from mysql.user; ]
//查询host user passwd这三个类型,其它的不看。

复制源表的表结构

[ Select * from  表名 where   字段=”所有值”;  ]

//没有所指纪录,则只剩下空表,及表结构。

[ create table  newtablename  SQL没有查询结果的语句; ]

//查询到的没有结果,那么只会有表结构,复制即可。

怎么查看表里是否有索引字段

[ desc tablename; ]

怎么查看索引信息

[ show idex from  dataname.tablename ]

建表时创建INDEX字段;

Create table  表名(
Name varchar(10),
Age int(2),
Sex enum(“doy”,”gril”) default(“boy”
Index (name)
//如果要两个索引字段,则再在此处加上即可。也可以”index(name,ID)”
);

在已有的表内添加INDEX字段。

Create index 索引名 on  表名(字段名列表);
//索引名一般为字段名。 表名,字段列表则要把那个字段做为INDEX字段。
MUL = index
查看索引名
// show index from  表名;
...
KEY name
...

删除索引

Drop index 索引名 on  表名
//不是主键,不能设置auto_increment功能。要想删除主键功能,则先删除auto_increment。
Primarykey字段标志位为PRI

删除字段的空值:

[ Delete from 表名 where 字段 is null; ]

修改t30表的stu_id做主键

[ alter table t30 add primary key(stud_id); ]

//想让多个字段做主键字段,叫复合主键,只能在建表时一起指定就好。

指定id字段自动增长值

[ Alter table t50 modify id int(2) not null auto_increment; ]
//即使用字段被删除了,还会接着之前的编号。
[ Alter table t40 drop primary key; ]
//删除主键功能,(没有自动增长功能)
[ Alter table t50 modify id int(2) not null; ]
[ Alter table t50 drop primary key; ]
//先取消自动增长,再删除主键功能

创建重复主键范例:

mysql> create table sername(
    -> ip varchar(15),
    -> port varchar(5),
    -> sername varchar(10),
    -> status enum("deny","allow") default "deny",
    -> primary key(ip,port)
        -> );
//两个主键的内容不完全一样,就可以写进记录。

删除表的所有记录

mysql> delete from tabname;

设置外键范例

create table stud.gz_tab(
id int(2) primary key auto_increment,
gz_id int(2) not null,
gz float(7,2),
foreign key (gz_id) references yg_tab(yg_id) on update cascade on delete cascade)
//创建外键为(gz_id)参考yg_tab这个表中的yg_id字段,同步更新,同步删除。
engine=innodb;
//只有innodb才能做外键。

查看当前SQL服务器支持哪些存储引擎

show engines;

查看当前SQL服务器默认使用的存储引擎

show variables like "table_type";

创建表时指定存储引擎

cerate table 表名(字段例表) engine=存储引擎名; 

查看指定表的存储引擎(创建过程)

show create table 库名.表名;
//如果不指定则使用默认的存储引擎。

修改已存在表的存储引擎

alter table 库名.表名 engine=存储引擎名;

修改默认的存储引擎

vim /etc/my.conf
[mysqld]
default-storage-engine=innodb
...
//指定默认使用的存储引擎
[mysqld_safe]
log-error=/var/log/mysqld.log
//指定错误日志存放位置
pid-file=/var/run/mysqld/mysqld.pid
//保存pid进程号
show create table 库名.表名;
update gz_tab set gz_id=88 ;
//更新子表gz_tab的gz_id值为88,因为只有一条记录,则不须要加条件,如果有多个则加条件如下:
update gz_tab set gz_id=88 where 字段=值;
开启/关闭自动提交
mysql> set autocommit=0;
//autocommit=1 表示开启。
myisam  
//default使用的存储引擎
insert into studb.gz_tab(gz_id,gz)values(1,0000.99);
//添加记录的方法

 

 

导入数据命令格式

load data infile “要导入的文件绝对路径” into table “要导入的表名”
fileds terminated by ":" //每一个字段的分割符
lines terminat by "\n"; //每行的分割符

导出数据的格式

SQL 查询语句 into outfile "文件名"
fields terminated by "字段间隔符"
lines terminated by "\n";
删除表中的某一个类型
mysql> delete from tablename where 类型名;

 

查看表的记录

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

匹配规则

等于:
mysql> delete from userlist01 where id=1;
不等于:
mysql> delete from userlist01 where id!=1;
可用符号:
mysql> delete from userlist01 where id=1;
mysql> delete from userlist01 where id!=1;
mysql> delete from userlist01 where id>1;
mysql> delete from userlist01 where id>=1;
mysql> delete from userlist01 where id<1;
mysql> delete from userlist01 where id<=1;
between.....and  //指定范围mysql> select username,useruid,homedir from userlist where useruid between 30 and 40;
//只显示useruid值在30~40之间且username,useruid字段的记录,

mysql> select * from userlist where username in ("root","bin","admin");
//只显示username的值为"root、bin、admin"的记录
mysql> select * from userlist where username not in ("root","bin","admin");
//同上相反
is null //值为空
mysql> select * from userlist  where shell is null;
//显示shell值为空的记录。
mysql> select * from userlist  where shell is not null;
//同上相反。
mysql> select distinct shell from userlist;
//不显示userlist值重复的记录

 

逻辑匹配(多个条件时,使用逻辑匹配)

逻辑与(多个条件要同时成立时,使用逻辑与)

mysql> select * from userlist where username="root" and useruid=0;
//匹配username值等于root及useruid值等于0时将其显示出来。
mysql> select * from userlist where username="root" or useruid=1;
//只要匹配username的值等于root、useruid等于1其中任意一条,则显示出来。
mysql> select * from userlist where username="root" or useruid=10 or shell="/bin/bash";
//同上,只不过多了个匹配条件
as //给计算后的值起一个字段名用来本次的显示

正则表达式
.      //表示一个匹配字符
*      //匹配任意字符      
^      //以什么开关的字符
$      //以什么结尾的字段
[]     匹配范围内
//正则表达之前要加上regexp

mysql> select username,2014-useruid as age from userlist; 

//显示出username的值及2014减去useruid的值并以age为此计算结果的字段名。
mysql> select username,(useruid+usergid) as ugid from userlist;
//显示出username的值及useruid加上usergid的值并以ugid为此计算结果的字段名。
mysql> select username,(useruid*usergid) as ugid from userlist;
//同上,只是算法不同,这里是乘法
mysql> select username,(useruid/usergid) as ugid from userlist;
//同上,只是算法不同,这里是除法。

 

模糊查询
%    匹配0个到N个字符
_    匹配一个字符

mysql> select * from userlist where username like "a%";
//显示username字段的值以a开头的值。
//模糊查询之前要加上like
mysql> select * from userlist where username like "roo_";
mysql> select * from userlist where useruid="1_";
mysql> select username from userlist where username like "_o__";

 

更新表记录

update TABLENAME set 字段名=新值, 字段名=值 [where条件表达式]

mysql> update userlist set username="root1" where username="root"

//匹配条件username="root"的记录值更新为"root1"
//如要批量修改则不须加条件。
//数值类型不用加“”

函数

avg() 平均值
//()表示要统计的字段名
sum() 求和
min() 最小值
max() 最大值
count()  统计记录的条目数

mysql>  select sum(useruid) as uid from userlist;

//空,是不统计的。

//且,有值优先!

count(*)

mysql> select count(*) as gril from yangongdb where gender="gril";

 

分组和排序

order by [asc/desc] [升序(从小到大)/降序(从大到小)] 排序

//mysql> select username,useruid from userlist order by useruid asc;
//mysql> select username,useruid from userlist order by useruid desc;

group by 分组

mysql> select shell from userlist group by shell;

//下面两个一样的效果。

mysql> select useruid,shell from userlist where useruid<=10 group by shell ;

mysql> select useruid,shell from userlist  group by shell having useruid<=10;

 

 

limit N /N,M  //指定显示记录条目数 默认是从第一条开始显示。

N 表示从第几条记录开始显示,默认从第1条开始显示,如果从第一条记录开始显示N的值可以省略
M 表示显示几条记录
limit 0,5 从第一条记录开始显示,显示5条。
limit 5,5 从第5条记录开始显示,显示5条。

mysql> select username,useruid from userlist order by useruid desc limit 5; 

//显示5行,默认是从1开始

mysql> select username,useruid from userlist order by useruid desc limit 10,5;

//显示5行,从第10行开始mysql> select id,username,useruid from userlist order by id limit 10,1;

//显示1行,从第10行开始