Mysql常用语法大合集

##数据库操作
#数据库的连接
mysql -u[用户名] -p[密码] -h[主机]

#显示数据库
show databases;

#选择数据库: 
use [数据库名];

#创建数据库: 
create database [数据库名] charset utf8;

#删除数据库: 
drop database [数据库名];

##数据库中表操作
#显示库下面的表
show tables;

#查看表的结构: 
desc [表名];

查看表的创建过程: 
show create table [表名];

创建表:
create table [表名](
列名称1 列类型 [列参数] [not null default ],
......
列名称N 列类型 [列参数] [not null default ]
)engine myisam/innodb charset utf8/gbk;

例子:
create table user (
id int auto_increment,
name varchar(20) not null default '',
age tinyint unsigned not null default 0,
index id (id)
)engine=innodb charset=utf8;
关于innodb和myisam引擎
详看http://dxxing.com/skill/5

##修改表
#修改表之增加列:
alter table [表名]
add 列名称1 列类型 [列参数] [not null default ] #(add之后的旧列名之后的语法和创建表时的列声明一样)

#修改表之修改列
alter table [表名]
change 旧列名  新列名  列类型 [列参数] [not null default ]
>(注:旧列名之后的语法和创建表时的列声明一样)

#修改表之减少列:
alter table [表名]
drop 列名称;

#修改表之增加主键
alter table [表名] add primary key(主键所在列名);
例:alter table goods add primary key(id)

#修改表之删除主键
alter table [表名] drop primary key;

#修改表之增加索引
alter table [表名] add [unique|fulltext] index 索引名(列名);

#修改表之删除索引
alter table [表名] drop index 索引名;

#清空表的数据
truncate [表名];

##列类型讲解
#列类型:
整型:tinyint (0~255/-128~127) smallint (0~65535/-32768~32767) mediumint int bigint (参考手册11.2)
参数解释:
unsigned 无符号(不能为负)  zerofill 0填充  M 填充后的宽度
举例:tinyint unsigned;
tinyint(6) zerofill;

#数值型
浮点型:float double
格式:float(M,D)  unsigned\zerofill;

#字符型
char(m) 定长
varchar(m)变长
text
列          实存字符i        实占空间            利用率
char(M)      0<=i<=M            M                i/m<=100%
varchar(M)    0<=i<=M          i+1,2             i/i+1/2<100%
    
#日期时间类型 
year       YYYY	范围:1901~2155. 可输入值2位和4位(如98,2012)
date       YYYY-MM-DD 如:2010-03-14
time       HH:MM:SS	如:19:26:32
datetime   YYYY-MM-DD  HH:MM:SS 如:2010-03-14 19:26:32
timestamp  YYYY-MM-DD  HH:MM:SS 特性:不用赋值,该列会为自己赋当前的具体时间 

##增删改查基本操作
#插入数据 
insert into [表名](col1,col2,……) values(val1,val2……); -- 插入指定列
insert into [表名] values (,,,,); -- 插入所有列
insert into [表名] values	-- 一次插入多行 
(val1,val2……),
(val1,val2……),
(val1,val2……);

#修改数据
update [表名]
set 
col1=newval1,  
col2=newval2,
...
...
colN=newvalN
where 条件;

#删除数据
delete from [表名] where 条件;

#select   查询
(1)  条件查询   where  a. 条件表达式的意义,表达式为真,则该行取出
		b.  比较运算符  = ,!=,< > <=  >=
	    c.  like , not like ('%'匹配任意多个字符,'_'匹配任意单个字符) 
		in , not in , between and
	    d. is null , is not null			
(2)  分组       group by 
	   一般要配合5个聚合函数使用:max,min,sum,avg,count
(3)  筛选       having
(4)  排序       order by
(5)  限制       limit

##连接查询
#左连接
.. left join .. on
table A left join table B on tableA.col1 = tableB.col2 ; 
  例句:select 列名 from tableA left join tableB on tableA.col1 = tableB.col2

#右链接: 
right join

#内连接:  
inner join
左右连接都是以在左边的表的数据为准,沿着左表查右表.
内连接是以两张表都有的共同部分数据为准,也就是左右连接的数据之交集.

#子查询
where 型子查询:内层sql的返回值在where后作为条件表达式的一部分
例句: select * from tableA where colA = (select colB from tableB where ...);
from 型子查询:内层sql查询结果,作为一张表,供外层的sql语句再次查询
例句:select * from (select * from ...) as tableName where ....

#字符集
客服端sql编码 character_set_client
服务器转化后的sql编码 character_set_connection
服务器返回给客户端的结果集编码     character_set_results
快速把以上3个变量设为相同值: set names 字符集
存储引擎 engine=1\2
1 Myisam  速度快 不支持事务 回滚
2 Innodb  速度慢 支持事务,回滚
  
①开启事务          start transaction
②运行sql;          
③提交,同时生效\回滚 commit\rollback

#创建管理员
grant all privileges on *.* to root_you@'localhost' identified by 'root_you';