mysql那些事

---恢复内容开始---

登录

 1 >mysql -uroot -p1234 

mysql登录 -u+用户 -p 密码

显示数据库

 1 show databases; 

使用某个数据库

 1 use xxx; 

显示数据库表

 1 show tables 

显示表结构

 1 show columns form xxx;//表名 

select选择

使用distinct来输出MYsql只返回不同的值

 1 select distinct email from user//必须放在这个字段的前面 

部分不能使用这个关键字(这个关键字用于可以用于所有列)除非指定的两个列都不同,否则所有的行都被检索出来

limit限制结果


 1 select id from user limit 5,10 

第一个参数为下标从几个开始,从下标为0开始

第二个参数为要检索的行数

排序:(asc 正序 desc 逆序)

 1 select id from user order by id limit 0,10 

必须先进行排序后进行限制结果不然会报错的

is null和=null的区别

按照ANSI SQL标准,下面的两个查询都不返回任何行:

查询一: SELECT * FROM test WHERE data=NULL

查询二: SELECT * FROM test WHERE data<>NULL

详细:http://blog.csdn.net/freshlover/article/details/8973266

where中的not关键字很有用在复杂的语句中

 1 select * from user where id not in(12,13); 

Like的通配符的进行过滤

select * from user where name LIKE 'a%';

注意在这里面的字符是区分大小写的,%代表可以出任意次数。

 1 select * from user where name LIKE 'a_'; 

_代表一个字符匹配!

mysql 使用concat来对字符进行连接

 1 select concat(id,'(',name,')') from t_user; 

mysql 中如果使用时间作为查询条件的话,最好使用Date()函数来修饰这个时间字段

 1 select * from t_user where Date(someTime)='2016-01-01'; 

因为如果你的数据库的时间是timeStamp类型的话带有时分秒会导致其检索失败;

group By分组查询

1 select count(id) as c,position as  p  from t_user group by position having c >10;

相关组查询中having组查询中的筛选条件,

select 的顺序

  From 检索的表

  where 查询条件(行级过滤)

  group BY 分组说明

  having 组级过滤

  order by 输出排序的顺序

  Limit 要检索的行数

利用where语句进行多表查询

 1 select m.sendto,u.name from t_mail as m,t_user as u where m.senderid=u.id group by u.id; 

利用内联

---恢复内容结束---

登录

 1 >mysql -uroot -p1234 

mysql登录 -u+用户 -p 密码

显示数据库

 1 show databases; 

使用某个数据库

 1 use xxx; 

显示数据库表

 1 show tables 

显示表结构

 1 show columns form xxx;//表名 

select选择

使用distinct来输出MYsql只返回不同的值

 1 select distinct email from user//必须放在这个字段的前面 

部分不能使用这个关键字(这个关键字用于可以用于所有列)除非指定的两个列都不同,否则所有的行都被检索出来

limit限制结果


 1 select id from user limit 5,10 

第一个参数为下标从几个开始,从下标为0开始

第二个参数为要检索的行数

排序:(asc 正序 desc 逆序)

 1 select id from user order by id limit 0,10 

必须先进行排序后进行限制结果不然会报错的

is null和=null的区别

按照ANSI SQL标准,下面的两个查询都不返回任何行:

查询一: SELECT * FROM test WHERE data=NULL

查询二: SELECT * FROM test WHERE data<>NULL

详细:http://blog.csdn.net/freshlover/article/details/8973266

where中的not关键字很有用在复杂的语句中

 1 select * from user where id not in(12,13); 

Like的通配符的进行过滤

select * from user where name LIKE 'a%';

注意在这里面的字符是区分大小写的,%代表可以出任意次数。

 1 select * from user where name LIKE 'a_'; 

_代表一个字符匹配!

mysql 使用concat来对字符进行连接

 1 select concat(id,'(',name,')') from t_user; 

mysql 中如果使用时间作为查询条件的话,最好使用Date()函数来修饰这个时间字段

 1 select * from t_user where Date(someTime)='2016-01-01'; 

因为如果你的数据库的时间是timeStamp类型的话带有时分秒会导致其检索失败;

group By分组查询

1 select count(id) as c,position as  p  from t_user group by position having c >10;

相关组查询中having组查询中的筛选条件,

select 的顺序

  From 检索的表

  where 查询条件(行级过滤)

  group BY 分组说明

  having 组级过滤

  order by 输出排序的顺序

  Limit 要检索的行数

利用where语句进行多表查询

 1 select m.sendto,u.name from t_mail as m,t_user as u where m.senderid=u.id group by u.id; 

利用内联 使用inner join on进行内联

1 select m.sendto,u.name from t_mail as m Inner join t_user as u on  m.senderid=u.id group by u.id;

外联 查找那些和他没相关的信息也就是另一张表为空

左外联

1 select m.sendto,u.name from t_mail as m left outer join t_user as u on  m.senderid=u.id group by u.id;

右外联

1 select m.sendto,u.name from t_mail as m right outer join t_user as u on  m.senderid=u.id group by u.id;

这两种的外连接的区别的是left是以左边的表为主列出他的所有的行,与右边的表进行匹配

内联和外联的区别是

是不是将没有关联的字段加入

插入数据

 1 insert into user values(1,'a');//需要插入该表的所有的字段的数据 

不推荐 使用上面的用法

最好是使用指定列名

1 insert into user(id,name) values(1,'a');//指定列名可以保证数据表结构改变了也可以正常运行

多条数据插入(用,分隔)

1 insert into user(id,name) values(1,100),(2,300);

插入检索出来的数据

 1 insert into user(id,name) select id ,name from user 

创建一个表

1 CREATE TABLE info(
2         id int not null primary key AUTO_INCREMENT,
3         content char(50)
4 )

删除表

 1 drop table user; 

重命名

 1 rename table info to info2; 

事务

start TRANSACTION//开启事务
    insert into info2(id ,name) values(1,'2');
commit;//提交
原文地址:https://www.cnblogs.com/lonecloud/p/6228029.html