二次整理
先看下对应编译字段意思:
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;