mysql基础操作、sql技巧和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 @[email protected]+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操作的次数

innodb_rows_updated\inserted\deleted

show variables like ‘slow%‘

show variables like ‘long%‘

show status like connections链接mysql的数量

show status like uptime 服务器已经工作的秒数

show status like slow_queries慢查询的次数

定位执行效率低的sql语句

explain/desc select * from table where id>10

desc select * from table where id>10\G

2、索引问题

常见优化手段之一

myisam存储引擎的数据和索引时自动分开存储的。各自是独一的一个文件

innodb存储引擎的表的数据和索引是存储在同一个表空间里面,但可以有多个文件组成

mysql不支持函数索引,但是能对列的前面某一部分进行索引,例如name字段,可以对name的

前4个字符进行索引,这个特性可以大大缩小索引文件的大小

create index index_name on t (name(4))

mysql索引用于快速查找出某一个列中有定特定值的行,对相关列使用索引时是提高select操作性能的最佳途径

1、使用索引

对于创建多列索引,只要查询的条件中用到最左边的列,索引一般会被使用

create index iname on t (name,age)//符合索引

2、存在索引但是不使用索

如果mysql估计使用索引比全表扫描慢,则不使用索引,例如keypart均匀分布在1-100之间,查询时使用索引就不是很好

eg:select * from t where keypart>1 and keypart<99

如果使用t表并且where条件中不使用=进行索引列,则不使用到索引。

用or分隔开的条件如果or前的条件中的列有索引,后面的列中没有索引,

则涉及到的索引都不会用到,索引都需要用索引

如果列类型是字符串,但是在查询的时候把一个整数型常量付给了字符型的列name,那么在name列上有索引也不会用到

3、常用sql的优化

大批量插入数据:infile outfile

当用load命令导入数据的时候,适当设置可以提高导入的速度,

4、常用的sql优化

insert语句,尽量使用多个值表的insert语句,这样可以大大缩短客户与数据库连接关闭的消耗

可以使用insert delayed语句得到更高的效率

mysql基础操作、sql技巧和sql的常见优化

时间: 2024-08-02 15:11:19

mysql基础操作、sql技巧和sql的常见优化的相关文章

MYSQL 基础操作

1.MySQL基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t1; --创建一个和t1一样的表,用like(表结构也一样) insert into t3 select * from t1; --t1的数据全部拿过来,注意是表结构一致才select* ,否则选择相应的的字段列插入 create table t1( id int unsigned not null auto_increment primary key,

PHP - PDO 之 mysql 基础操作

<?php /* pdo 学习 */ $dsn = 'mysql:host=localhost;dbname=cswl';//构建连接dsn $db = new pdo($dsn,'root','');//实例化pdo[第二个参数是用户名,第三个为密码] #.查询 $obj = $db->prepare("show tables;");//准备预处理sql语句 $obj->execute();//执行预处理语句 $obj->fetchALL(PDO::FETCH

MYSQL基础笔记(二)-SQL基本操作

SQL基本操作 基本操作:CRUD,增删改查 讲SQL的基本操作根据操作对象进行分类: 1.库操作 2.表操作 3.数据操作 库操作: 对数据库的增删改查 新增数据库: 基本语法: 1 Create database 数据库名字[库选项]: 库选项:用来约束数据库,分为两个选项:1.字符集设定:charset/character set 具体字符集(数据存储的编码格式,中文常用字符集gbk和utf8.).2.校对集设定:collate 具体校对集(数据比较的规则). 例如: 其中:数据库名字不能

PHP mysql基础操作

mysql连接操作 //建立连接$con = mysql_connect('localhost', 'root', '123456');//判断是否连接成功if($con){ die('连接失败!'.mysql_error()); exit;} //选择字符集mysql_set_charset('utf8', $con);//选择数据库mysql_select_db('test', $con); $sql = '.........................'; //执行sql语句$resu

Linux mysql 基础操作

命令 #查看版本 mysql --version #进入mysql 命令 mysql -u root -p mysql -u [email protected]  (没有密码的情况) #创建数据库 create database [dataname] #删除数据库 drop database [dataname] #查看数据库 show databases; #进入具体数据库 use [dataname] #查看数据库表 show tables; #删除表 drop table [tablena

mysql基础(二) 常用SQL语句

SQL语句类型:     DDL:数据库定义语言 create,drop,alter     DML:数据操作语言 insert,delete,update,select     DCL:数据控制语言 grant,revoke 常用SQL语句:     CREATE DATABASE #创建数据库 CREATE TABLE         #创建表 CREATE TABLE table_name(字段名,字段数据类型,约束条件) #创建表 CREATE INDEX            #创建索

PHP之路——MySql基础操作语句

1,创建数据库,create datebase 数据库名,在这里kenan建立一个数据库名为myfirstdb create database myfirstdb; 2,查看所有的数据库 show databases; 3,选择数据库,只有先选择数据库,才能在选择的数据库中进行数据库操作 use myfirstdb; 4,删除数据库 drop database myfirstdb; 数据库的增删改查 这里要先使用 use来选择要操作的数据库 1,建立数据库表 use myfirstdb; cre

mysql 基础操作全覆盖(适用与兼职DBA,不定期更新)

1.mysql版本应该怎么选择 由于5.5-5.6对mysql性能做了较大优化,所以一般选择mysql 5.5 或者 5.6 mysql 5.5.xx -5.6.xx 产品的特殊性,所以编译方式也和早期的产品安装方式不同,采用cmake或者gmake方式进行编译安装.即 ./cmake ; make ; make install ,生产场景的具体命令及参数为详见mysql 一键安装脚本 一键安装脚本下载链接 http://down.51cto.com/data/2228998 2.设置mysql

MySQL基础操作语句

1. 数据输入完整性:创建数据表时候给其添加约束条件:分类:实体完整性,域完整性,引用完整性 实体:即表中的一行(一条记录)代表一个实体(entity) 实体完整性的作用:标识每一行数据不重复.主键;唯一标识数据库每一行这个一列,唯一标识数据库中每一条记录,每一个表中 约束条件:  主键约束(primary key)数据唯一,不能为NULL,先创建主键才能自增属性,主键value相同SQL报错        唯一约束(unique),自动增长(auto_increment) 2. 创建主键约束三