设为首页 加入收藏

TOP

mysql基础操作、sql技巧和sql的常见优化(一)
2015-07-24 11:18:19 来源: 作者: 【 】 浏览:5
Tags:mysql 基础 操作 sql 技巧 常见 优化

一、常见操作

1、复制表结构create table t2 like t1

复制表数据insert into t2 select * from t1

2、mysql索引
alter table用来创建普通索引、unique索引或primary key索引
alter table t add index index_name(column_list)
alter table t add unique(column_list)
alter table t add primary key(column_list)

create index index_name on table (column_list)
create unique index index_name on table(column_list)

drop index index_name on t
alter table t drop index index_name
alter table t drop primary key

alter table t modify id int not null
show index form t

3、视图
create view v as select * from t where id>5
insert into t(name) values("user"),("user1")
? view | ? index
alter view | create view | drop view
一旦与视图关联的表损坏,则视图会发生错误
4、内置函数
字符串:
concat("hello","world") as hw 链接字符串
lcase("GAFG")//转小写
ucase("jjj")
length(string) //长度
ltrim(string) //去掉前端空格
rtrim(string) //去掉右端空格
repeat(string,count)//重复count次
replace(string,s1,s2)//在string中把s1替换成s2
substring(str,position,[length])//在str中,从position开始取length个字符
space(count) 生成count个空格

数学函数:
bin(number) //十进制转二进制
ceiling(number)//向上取整
floor(number) //向下取整
max(num1,num2)//取最大值
min(num1.num2)
sqrt(number)//开平方
rand() //返回0-1内的随机值
日期函数:
curdate()//返回当前日期
curtime()
unix_timestamp(date)//返回当前date的
week(date)//返回date为一年中的第几周
year(date)//返回日期date的年份
datediff(expr,expr2)//两个时间之间的间隔天数


5、mysql预处理语句
设置stmt1预处理:
prepare stmt1 from 'select * from t where id>?'
设置一个变量: set @i = 1;
执行stmt1预处理:execute stmt1 using @i
set @i=5
execute stmt1 using @i
删除预处理:drop prepare stmt1


6、 mysql事务处理
关闭自动提交功能:set autocommit=0;
delete from t where id = 11;
savepoint p1;
delete from t where id = 12;
savepoint p2;
rollback to p1;
rollback;//还原到最原始的还原点

alter table t engine=innodb;//事务控制只对innodb引擎有用

7、mysql存储procedure
create procedure p2()
begin
set @i = 3;
while @i<=10 do
insert into t(name) values(concat('hh',@i));
set @i=@i+1;
end while;
end;

shwo create procedure p2;
call p2;

8、mysql 触发器
create trigger tg before insert on t for each row
begin insert into t2(name) values(new.name)
end

create trigger tg before delete on t for each row
begin delete from t2 where name = old.name
end

9、重排auto_increment
清空表的时候用truncate
alter table t auto_increment = 1;

二、常见sql技巧
1、正则表达式的使用(和其他语言一样)
select "linux is very good!" regexp ".*"//匹配所有
select "linux is very good!" regexp "^linux"
select email from user where emial regexp "@163[.,]com$"
=
select email from user where emial like '%@163.com$' or emial like '%@163,com$'

2、巧用rand()提取随即行
0-1之间的随机数函数 select rand()*100
select * from t order by rand();//随即排列表数据
select * from t order by rand() limit 3;//取出三条随即样本
3、利用group by的with roolup字句统计,不可以和order by使用
可以检索出更多的分组聚合信息
select * from t;
select * ,count(*)from t group by c1,c2//先对c1聚合
select * ,count(*)from t group by c1,c2 with roolup
4、用bit group functions做统计
在使用group by语句时可以使用bit_and、bit_or函数来完成统计工作。这两个函数的作用主要是做数值
之间的逻辑位运算。
select id,bit_or(kind) from t group by id
5、使用外键需要注意的问题
create table t (id ,name,foreign key(id) references t1(id) on delete cascade on update cascade)
innodb类型的表支持外键,myisam类新的表虽然创建外键可以成功,但是不起作用,主要原因是不支持外键。
6、mysql中help的使用
? %
? create
? opti%
? reg%
? contents mysql中所有的帮助信息


三、sql优化
1、优化sql语句的一半步骤
show status了解各种sql的执行频率
show [session|globe] status;
show global status;
show status like 'com_%'
show global status like "com_%"

只针对innodb存储引擎的:
innodb_rows_read 执行select操作
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇mysql数据类型和用法 下一篇SQL表函数的BUG

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·MySQL 安装及连接-腾 (2025-12-25 06:20:28)
·MySQL的下载、安装、 (2025-12-25 06:20:26)
·MySQL 中文网:探索 (2025-12-25 06:20:23)
·Shell脚本:Linux Sh (2025-12-25 05:50:11)
·VMware虚拟机安装Lin (2025-12-25 05:50:08)