mysql常用语句总结

二次整理

先看下对应编译字段意思: 
limit:大意为限制、order by 通过排序(默认顺序排序)、ase正序、dese倒叙
inner join 内部连接 、left join 左连接 、right join 右连接、 

简单的增删查改  (下面的‘?’是对应类型的值)

查询:select * from 表名 ;  //*:全部、可写列名、或嵌套语句(这个下面会说到)

新增:insert into 表名(列名1,列名2) values(?,?)   //? 对应类型的值

修改:update 表名 set 列名1=?,列名2=? where 表名.id=?  //注意:不加条件 默认修改全部

删除:delete from 表名 where 表名.id=?                  //注意:不加条件 默认删除全部


一般的

将表名改为T表示:    select T.* from  表名  as T

查询第一条:             select * from 表名 limit 1

查询前面两条:         select * from 表名 limit 0,2  

查最后一条:             select * from 表名 order by 表ID desc limit 1

第2条后获取数据:    select * from 表名 where  表ID >2   limit 1 

第2条后随机获取数据: select * from 表名 where  表ID >2  order  by  rand() limit 1 

连表查询:                   select * form 主表名 inner join  副表名 on 主表名.副表ID=副表名.副表ID 

(无限)嵌套查询: select 表一.*,(查询的语句)AS 另起的名字 FROM 表一  
                     例子:select A表.A_ID,(select B表.B_MC where B表.B_ID=A表.副表_ID) as BA_MC from  A表

查询总数:         select count(*)  from 表名    

列名值求和运算:   select  sum(int型字段) from 表名

获取随机数据

1、获取随机的数目:   select * from 表名  order  by  rand()  limit   1  //数据多有高延迟(效率低)

2、正确写法随机:(表的主键id)这个效率高 最好写一条随机 或者你可改代码  
    select  max(id),min(id) into @M,@N from 表名 ;
    set @X= floor((@M-@N+1)*RAND() + @N);
    select * from 表名 where id >= @X limit 1;
第一步的:max(id) 和 min(id) 都是不需要扫描索引的
第三步的: select 也可以用索引快速定位
ID 中间可能有空洞,因此选择不同行的概率不一样,不是真正的随机。

3、严格随机的结果(解决1、2概率不均匀问题)
解释下下面单词:concat连接两字符串、prepare准备、execute执行、deallocate解除分配
   select count(*) into @C FROM 表名;
   set @Y = floor(@C * RAND());
   set @SQL = concat("select * from 表名 limit ", @Y, ",1");
   PREPARE stmt FROM @SQL;
   EXECUTE stmt;
   DEALLOCATE PREPARE stmt;

去列名数据空格(rtrim 右、ltrim 左) 
  
  select rtrim(表名.列名) from 表名
  select ltrim(表名.列名) from 表名 

  select REPLACE(表名.列名," ","") FROM 表名 //replace替换

 

左、右连接 和 内部连接

左连接:left join是以左表为准的
右连接:right join是以右表为准的
内连接:inner join并不以谁为基础,它只显示符合条件的记录.
      (如主表a、副本b  如果主表a.副本ID 对应的副本b.副本ID 数据为空,则这条数据不显示)
       例子:select * form 主表名 inner join  副表名 on 主表名.副表ID=副表名.副表ID 

对数据进行排序

解释:asc升或正序(默认)、desc倒叙、limit 限度、order by 通过排序

     order by可以按一个或多个(最多16个)字段排序查询结果,可以是升序(ASC)也可以是降序(DESC),如果缺省,则是升序。
  倒叙:SELECT * FROM 表名   WHERE 表名.列名=0   ORDER BY 列名2 DESC  //ORDER BY 列名2 DESC ==》 是以列名2作为条件进行降序
        SELECT * FROM 表名   WHERE 表名.列名=0   ORDER BY 列名2 DESC,列名3 DESC   //两个条件的写法
  升序:SELECT * FROM 表名   WHERE 表名.列名=0   ORDER BY 列名2  asc
        或 SELECT * FROM 表名   WHERE 表名.列名=0   ORDER BY 列名2  

 

时间的判断: %Y%m%d是年月日、DATE_FORMAT日期格式、NOW()当前时间


  SELECT COUNT(*) FROM 表名 WHERE DATE_FORMAT(表名.时间列名, '%Y%m%d') = DATE_FORMAT(NOW(), '%Y%m%d') 

 

 

----------------------------------------------深入篇--------------------------------------------------------------
创建数据库(设置格式为utf8、gbk):create  database 数据库名  character  set utf8

删除表(再所有数据库中找,有就删除):DROP TABLE IF EXISTS int_ceshi 

修改数据库编码格式:ALTER DATABASE test CHARACTER SET utf8;

修改表默认编码:ALTER TABLE test CHARACTER SET utf8;

修改字段编码:ALTER TABLE test MODIFY col_name VARCHAR(32) CHARACTER SET utf8;

修改表名称:ALTER TABLE test_old RENAME test;

添加主键:ALTER TABLE test ADD id INT(32) NOT NULL AUTO_INCREMENT ,ADD PRIMARY KEY (id);

删除一个字段:ALTER TABLE test DROP COLUMN new5;

修改字段名称、类型及长度:
//重命名列/修改一个字段的名称
ALTER TABLE test CHANGE oldName newNmae VARCHAR(32);
ALTER TABLE test CHANGE oldName newNmae BIGINT NOT NULL;
// 修改列的类型/修改一个字段的类型
ALTER TABLE test MODIFY new6 INT(32);
ALTER TABLE test CHANGE new6 new6 INT(32) NOT NULL DEFAULT 0;
//修改字段长度
ALTER TABLE test MODIFY COLUMN new6 INT(64);

添加索引方法:
添加PRIMARY KEY(主键索引)
ALTER TABLE `test` ADD PRIMARY KEY ( `column` );

添加UNIQUE(唯一索引)
ALTER TABLE `test` ADD UNIQUE (`column`);

添加INDEX(普通索引)
ALTER TABLE `test` ADD INDEX index_name ( `column` );

添加FULLTEXT(全文索引)
ALTER TABLE `test` ADD FULLTEXT (`column`);


添加多列索引
ALTER TABLE `test` ADD INDEX index_name ( `column1`, `column2`, `column3` );

删除某个索引
ALTER TABLE test DROP INDEX emp_name;


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值