注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

拥有自己的梦想,跟随心的召唤

平凡是福

 
 
 

日志

 
 

Mysql脚本收集  

2011-05-06 15:23:31|  分类: 数据库 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1) 创建数据库
CREATE SCHEMA IF NOT EXISTS $dataBase DEFAULT CHARACTER SET utf8 ;

2) 将数据库设置为当前默认的数据库
USE $dataBase;

3) 建表
create table $table (
    ID int NOT NULL auto_increment,
    CREATEDATE datetime comment '创建时间',
    NAME varchar(45) comment '名称',
    FID int comment '某外键',
    primary key (ID)
) comment='表的注释信息';
alert table $table add constraint fk_table1_table2 foreign key (FID) references $otherTable ($otherTableId);

4) 删除表
drop table $table;
drop table if exists $table;

5) 删除数据
delete from $table where ...

6) 插入数据
insert into $table ($column1,$column2,...) values($value1,$value2,...);

7) 批量插入数据
数量不多时直接写:insert into $table ($column1,$column2,...) values($value11,$value21,...),($value12,$value22,...);
数量多时用存储过程:
-- 创建存储过程:loop_time为循环的次数
DELIMITER $$ 
    DROP PROCEDURE IF EXISTS test $$ 
    CREATE PROCEDURE test (loop_time int) 
    BEGIN 
        DECLARE i int default 0; 
        WHILE i <  loop_time DO 
        insert into $table ($column1,$column2,...) values($value1,$value2,...);
        SET i = i + 1; 
        END WHILE; 
    END $$ 
DELIMITER ; 
-- 调用存储过程
CALL test(5); 

8) 字符串合并
concat('string1','string2')

9) Explain性能分析命令
    Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。
语法:explain select … from … [where ...]
例如:explain select * from news;
输出:| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
关键属性解析:
  • type:这列最重要,显示了连接使用了哪种类别,有无使用索引,是使用Explain命令分析性能瓶颈的关键项之一。
结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
一般来说,得保证查询至少达到range级别,最好能达到ref,否则就可能会出现性能问题。
  • key:显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL
  • ref:显示使用哪个列或常数与key一起从表中选择行。
  • rows:显示MySQL认为它执行查询时必须检查的行数。
10) md5函数
    select md5( 'test' ); 
11) 删除数据库
    >drop database $batabaseName;
12) 备份数据库或表
>mysqldump -uroot -ppassword $databaseName > export.sql
或>mysqldump -uroot -ppassword --tables $databaseName > export.sql
-->导出整个数据库,包括结构和数据
>mysqldump -uroot -ppassword -d $databaseName > export.sql
-->仅导出数据库的结构(建表语句)
>mysqldump -uroot -ppassword -d $databaseName $table1 $table2> export.sql
-->仅导出数据库中指定表的结构(建表语句)
>mysqldump -uroot -ppassword --tables $databaseName $table1 $table2> export.sql
-->仅导出数据库中指定表的结构和数据

13) 导入备份的数据库
    >mysql -uroot -ppassword $databaseName < export.sql
14) 进入mysql命令行
    >mysql -uroot -ppassword <--连接到本机的mysql服务
    >mysql -uroot -ppassword -h服务器ip <--连接到远程服务器的mysql服务
15) 显示指定数据库的表
    >mysqlshow -uroot -ppassword $databaseName
16) 一些mysql命令行
    mysql>show databases; <-- 显示现有的所有数据库
    mysql>use $databaseName; <-- 设置为当前数据库
    mysql>show tables; <-- 显示当前数据库的所有表
    mysql>describe $tableName; <-- 显示指定表的信息
    mysql>drop table $tableName; <-- 删除表
    mysql>create table $tableName(字段列表); <--创建表
    mysql>show status; <-- 显示当前数据库的状态,会显示一大堆的数据库设置参数等
    mysql>show processlist; <-- 查看进程
17) 增加新用户
格式:mysql>grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"
如,增加一个用户user1密码为password1,让其可以在本机上登录, 并对所有数据库有查询、插入、修改、删除的权限。
mysql>grant select,insert,update,delete on *.* to user1@localhost Identified by "password1";
如果希望该用户能够在任何机器上登陆mysql,则将localhost改为"%"。
如果你不想user1有密码,可以再打一个命令将密码去掉。
mysql>grant select,insert,update,delete on mydb.* to user1@localhost identified by "";
如果是所有权限可以用all privileges代替,如"grant all privileges ......"

帐号权限修改后运行如下语句强制mysql重新加载grant tables:
mysql> flush privileges

18)查看数据库的编码信息(服务端编码、客户端编码等)
mysql>show variables like 'character_set_%';

19) 其他常用
获取当前日期:select curdate(); -- 返回的格式不含时间信息,如2011-01-01
获取当前时间:select now(); -- 返回的格式含时间信息,如2011-01-01 12:00:10
md5加密:select md5( 'test' ); 
获取随机的uuid值:select uuid(); -- 格式类似为“'c9dfaffb-d433-11e0-b15f-bcaec5e0a715'”,32位(8-4-4-4-12)
新建临时表:
       create table tmp1 as select * from youtable group by name;
       create table tmp2 like youtable;
清空原来的表:truncate youtable;
时间日期处理:
       select FROM_UNIXTIME(1249488000,'%Y-%m-%d %H:%i:%s') ; -- 返回'2009-08-06 00:00:00'
       select DATE_FORMAT('1997-10-04 22:23:00', '%Y-%m-%d %H:%i:%s'); -- 返回日期'1997-10-04 22:23:00'
       select UNIX_TIMESTAMP('2009-08-06') ; -- 返回'1249488000'
从文件导入数据
       LOAD DATA INFILE '/tmp/data.txt' INTO TABLE yourtable FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

特别注意事项:
MySQL在Windows下都不区分大小写,在Linux下数据库名、表名、列名、别名大小写规则是这样的:
1、数据库名与表名是严格区分大小写的;
2、表的别名是严格区分大小写的;
3、列名与列的别名在所有的情况下均是忽略大小写的;
4、变量名也是严格区分大小写的;
通过修改配置文件my.cnf(linux)可修改linux下的默认大小写行为:
[mysqld]
lower_case_table_names=1
其中 0:区分大小写,1:不区分大小写

》创建名为 bcsystem 的数据库、名为 bc 的账号,账号密码为 password,将账号 bc 设为数据库 bcsystem 的 owner:
mysql> create database bcsystem 
default character set utf8;
    (mysql> show databases;) 
mysql> create user 'bc' identified by 'password';
    (mysql> select user, host from user;)
    (mysql> drop user 'bc'@'%';)
mysql> grant all privileges on bcsystem.* to 'bc'@'%';
    (mysql> show grants for 'bc'@'%';)
    (mysql> revoke all privileges on bcsystem.* from 'bc'@'%';)

参考:
  评论这张
 
阅读(1557)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017