SQL常用语句


create procedure test1(IN init INT,IN end INT)
-> begin
-> declare Var INT;
-> declare id INT;
-> set Var = 1;
-> set id = init;
-> while Var < end do
-> insert into test(id,name,age) values(id,concat('test',id),100);
-> set id = id + 1;
-> set Var = Var + 1;
-> end while
-> ;
-> end;
-> //

事务级别
set [ global | session ] transaction isolation level Read uncommitted | Read committed | Repeatable(default) | Serializable

查看binlog

 /usr/local/mysql/bin/mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000001

查看表大小

SELECT TABLE_NAME,DATA_LENGTH,INDEX_LENGTH,(DATA_LENGTH+INDEX_LENGTH) AS LENGTH,TABLE_ROWS,CONCAT(ROUND((DATA_LENGTH+INDEX_LENGTH)/1024/1024,3), 'MB') AS total_size FROM information_schema.TABLES WHERE TABLE_SCHEMA='accountdb' ORDER BY LENGTH DESC ;

查杀指定线程

mysql -uroot -S /usr/local/mysql/mysql.sock -sNe "select id from information_schema.processlist where COMMAND='Query' and TIME>10" | xargs -n 1 mysqladmin -uroot -S /usr/local/mysql/mysql.sock kill


一、数据库和表的常用操作
------------------------------------------------------------------------------------
1.show databases; 查看所有的数据库
2.create database test; 创建一个叫test的数据库
3.drop database test;删除一个叫test的数据库
4.show tables; 在选中的数据库之中查看所有的表
5.use test;选中库 ,在建表之前必须要选择数据库
6.drop table 表名; 删除表
7.create table 表名 (字段1 类型 [NOT NULL PRIMARY KEY(字段)], 字段2 类型);
8.desc 表名;查看所在的表的字段
9.show create table 表名; 查看创建表的详细信息
10.show create databases 库名;查看创建库的详细信息
------------------------------------------------------------------------------------

二、表的修改
------------------------------------------------------------------------------------
1.修改字段类型 alter table 表名 modify 字段 字段类型
2.添加新的字段 alter table 表名 add 字段 字段类型
3.添加字段并指定位置 alter table 表名 add 字段 字段类型 after 字段
4.删除表字段 alter table 表名 drop 字段名
5.修改指定的字段 alter table 表名 change 原字段名 新字段名 字段类型
------------------------------------------------------------------------------------

三、数据的操作
------------------------------------------------------------------------------------
插入数据
insert into 表名 values(值1,值2...)
insert into 表名(字段1,字段2...) values(值1,值2....)
insert into 表名(字段1,字段2...) values(值1,值2....),(值1,值2,....),(值1,值2,....)

删除数据 delete from 表名 where 条件

更新数据 update 表名 set 字段1 = 值1, 字段2 = 值2 where 条件

查询数据
select distinct(去重) 字段 from 表名
select 字段 from 表名 where 条件1 and(or) 条件2
select 字段 from 表名 where 字段 not in(值1,值2,值3...)
select 字段 from 表名 where 字段 between 值1 and 值2
select 字段 from 表名 limit m,n 从m行开始返回n行
select 字段 from 表名 order by 字段 desc降序 | asc默认升序
select 字段 from 表名 where 字段 like '%关键字%'(%:0或多个字符,_:单个字符,[]:字符列中的一个,[^]:不在字符列中的字符)

子查询
select 字段1 from 表名1 where 字段2 in (select 字段2 from 表名2 where 条件)
内联结查询
select 字段1,字段2 from 表1,表2 where 表1.字段3 = 表2.字段3 order by 字段1
select 字段1,字段2 from 表1 inner join 表2 on 表1.字段3 = 表2.字段3 order by 字段1

------------------------------------------------------------------------------------
四、视图
------------------------------------------------------------------------------------
create view 视图 as select 字段1,字段2,字段3 from 表1,表2,表3 where 表1.字段1=表2.字段2 and 表3.字段3=表2.字段2
select * from 视图
show create view 视图
drop view 视图
------------------------------------------------------------------------------------

五、存储过程
------------------------------------------------------------------------------------
------------注释-------------
delimiter //
create procedure 名称(IN 参数1 类型, OUT 参数2 类型)
BEGIN
declare 参数3 类型;
if 条件1 then 操作1;
end if;
if 条件2 then 操作2;
end if;
END //
delimiter ;
call 名称(参数1,参数2)

show create procedure 名称
show procedure status
------------------------------------------------------------------------------------

六、事物处理和控制
------------------------------------------------------------------------------------
begin or start transaction
操作1 (drop delete update insert alter select...)
rollback
操作2 (drop delete update insert alter select...)
savepoint name1
操作3 (drop delete update insert alter select...)
savepoint name2
release savepoint name2
rollback to name1
commit

关闭自动提交
set autocommit=0
------------------------------------------------------------------------------------

七、DCL控制
------------------------------------------------------------------------------------
create(drop) user 'username'@'localhost' identified by 'password'
grant(revoke) privileges on database.table to 'user'@'localhost'
flush privileges

八、备份常用
------------------------------------------------------------------------------------

导出表结构 mysqldump -uroot -ppasswd -d database table > test.sql
导出表数据 mysqldump -uroot -ppasswd -t database table > test.sql
结构和数据 mysqldump -uroot -ppasswd database table > test.sql
挑顶条件项 mysqldump -uroot -ppasswd database table --where="ctime>'2017-01-01' and ctime<'2017-06-30'" > test.sql


表同步
delimiter //
create trigger ins_test1
after insert on db1.test1 for each row begin
insert into db2.test2(id,name,age) values(new.id,new.name,new.age);
end //

delimiter //
create trigger upt_test1
after update on db1.test1 for each row begin
if new.id = old.id
then
delete from db2.test2 where db2.test2.id=new.id;
insert into db2.test2 select * from db1.test1 where db1.test1.id=new.id;
end if;
end //

delimiter //
create trigger del_test1
after delete on db1.test1 for each row begin
delete from db2.test2 where id=new.id;
end //

索引的原则:
1.使用like关键字时,前置%会导致索引失效
2.使用null值会被自动从索引中排除,索引不应建立在有空值的列上
3.使用or关键字时,or左右字段如果存在一个没有索引,有索引字段也会失效
4.使用!=操作符时,将放弃使用索引
5.不要在索引字段进行运算
6.使用组合索引时,应按照最左匹配原则,查询时使用索引的第一个字段,否则索引会失效
7.避免隐式转换,定义的数据类型与传入的数据类型不一致


innodb关键参数:
buffer_pool_size:物理内存的50%~80%,可动态调整
innodb_max_dirty_pages_pct:不超过50%
innodb_log_buffer_size:能缓存5秒内的redolog即可,32M基本够用
innodb_thread_concurrency:innodb并发线程数不要设置非0
innodb_lock_wait_timeout:行锁超时阈值
innodb_purge_threads:purge线程数
innodb_max_purge_lag:不要设置非0
innodb_log_file_size:4~8个2~4G,减少checkpoint频率
innodb_flush_log_at_trx_commit:设置为1最安全
innodb_io_copacity:每秒对磁盘的最大iops

原文地址:https://www.cnblogs.com/lishug/p/13219687.html