mysql 命令

1.  mac mysql安装

压缩包安装(社区版): 

http://blog.sina.com.cn/s/blog_9ea3a4b70101ihl3.html


注: 安装包的形式 或 brew 安装mysql后,一直登录报错(不知道什么原因)


注: 建表报错:MySQL:Error : Tablespace for table `database`.`temp` exists. Please DISCARD the tablespace before IMPORT.

解决办法

http://www.shaoqun.com/a/101373.aspx

2.   命令


查看端口:
status;
show global variables like  'port' ;

命令 作用
show databases; 所有数据库
use database;

show tables;
所有表
DROP DATABASE IF EXISTS sampledb;
CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8;
USE sampledb;


##创建用户表
CREATE TABLE t_user (
   user_id   INT AUTO_INCREMENT PRIMARY KEY,
   user_name VARCHAR(30),
   credits INT,
   password  VARCHAR(32),
   last_visit datetime,
   last_ip  VARCHAR(23)
)ENGINE=InnoDB; 


##创建用户登录日志表
CREATE TABLE t_login_log (
   login_log_id  INT AUTO_INCREMENT PRIMARY KEY,
   user_id   INT,
   ip  VARCHAR(23),
   login_datetime datetime
)ENGINE=InnoDB; 


##插入初始化数据
INSERT INTO t_user (user_name,password) 
             VALUES('admin','123456');
COMMIT;
新建库 
新建表

describe t_login_log;

表结构
use 库名; 
create table 表名 (字段设定列表); 
 
drop database 库名; 
drop table 表名;

delete from 表名;
 
mysql -h110.110.110.110 -u root -p 123;

exit

或者:

cd /usr/local/mysql/bin

启动mysql服务器:sudo ./mysqld_safe --defaults-file=/etc/my.cnf --user=root &

sudo ./mysql -u root -p

输入密码:123


________________________

win7  mysql 

net start mysql  启动

net stop mysql 停止


win7 mysql登录出现:

mysql出现access denied for user 'root@localhost'(using password: YES)

解决:
1.关闭正在运行的MySQL(net stop mysql)。
  2.打开DOS窗口,转到mysql\bin目录。
  3.输入mysqld --skip-grant-tables回车。如果没有出现提示信息,那就对了。
  4.再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql\bin目录。
  5.输入mysql回车



登录

退出
刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了

再将root的密码改为123:

sudo ./mysqladmin -u root -p  password 123;

修改密码
select version(); 

select now(); //显示当前时间

select ((4 * 4) / 10 ) + 25;//当计算器
mysql版本
 insert into MyClass values(1,'Tom',96.45),(2,'Joan',82.99), (2,'Wang', 96.59);

update MyClass set name='Mary' where id=1;

alter table MyClass add passtest int(4) default '0';
 
select * from MyClass order by id limit 0,2; 查看表 MyClass 中前2行数据
rename table MyClass to YouClass; 修改表名
1.导出整个数据库
导出文件默认是存在mysql\bin目录下
    mysqldump -u 用户名 -p 数据库名 > 导出的文件名
    mysqldump -u user_name -p123456 database_name > outfile_name.sql

2.导出一个表
    mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
    mysqldump -u user_name -p database_name table_name > outfile_name.sql

3.导出一个数据库结构
    mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql
    -d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table
备份数据库


3.  MySQL删除数据Delete与Truncate语句使用比较

空mysqll表内容常见的有两种方法:一种delete,一种是truncate 。 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内容。效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据。 
delete的效果有点像将mysql表中所有记录一条一条删除到删完,而truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表。

4. 常用sql

表:

1、学生s、课程c、选课sc,创建表,插入数据 
DROP TABLE IF EXISTS `c`;  
  
CREATE TABLE `c` (  
  `cid` char(10) NOT NULL,  
  `cname` char(20) DEFAULT NULL,  
  PRIMARY KEY (`cid`)  
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;  

DROP TABLE IF EXISTS `s`;  
  
CREATE TABLE `s` (  
  `sid` char(10) NOT NULL,  
  `sname` char(20) DEFAULT NULL,  
  PRIMARY KEY (`sid`)  
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;  
DROP TABLE IF EXISTS `sc`;  
  
CREATE TABLE `sc` (  
  `sid` char(10) NOT NULL,  
  `cid` char(10) NOT NULL,  
  KEY `sid` (`sid`),  
  KEY `cid` (`cid`),  
  CONSTRAINT `sc_ibfk_1` FOREIGN KEY (`sid`) REFERENCES `s` (`sid`),  
  CONSTRAINT `sc_ibfk_2` FOREIGN KEY (`cid`) REFERENCES `c` (`cid`)  
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;  
一、查询选择所有课程的学生 
Sql代码  
#查询选择了所有课程的学生(一)  
SELECT s.sid,s.sname   
FROM s,   
     (SELECT sc.sid FROM sc GROUP BY sid HAVING COUNT(*)=(SELECT COUNT(*) FROM c))   
      AS tmp  
WHERE s.sid=tmp.sid;  
  
#查询选择了所有课程的学生(二)  
SELECT s.`sid`,s.`sname` FROM s WHERE s.`sid` IN (  
SELECT sc.`cid` FROM sc GROUP BY sc.sid HAVING COUNT(cid) = (SELECT COUNT(*) FROM c)  
);  
 
二 、查询选择3门以上课程的学生 
Sql代码  
#查询选择了超过3门以上课程的学生(一)  
SELECT s.sid,s.sname   
FROM s,   
     (SELECT sc.sid FROM sc GROUP BY sid HAVING COUNT(*)>3)   
      AS tmp  
WHERE s.sid=tmp.sid;  
#查询选择了超过3门以上课程的学生(二)  
SELECT s.`sid`,s.`sname` FROM s WHERE s.`sid` IN (  
SELECT sc.`sid` FROM sc GROUP BY sc.sid HAVING COUNT(cid) >3  
);  
更多:
http://blog.csdn.net/friendan/article/details/8072668
2. 学生  成绩
小王  65
小张  80
小李  72
小赵  93

排名在第3名的成绩是72,如何用1条语句把它找出来?

CREATE TABLE `t2` (                     
          `s1` char(30) NOT NULL,               
          `s2` decimal(6,2) default NULL,       
          PRIMARY KEY  (`s1`),                  
          KEY `s2` (`s2`)                     
        )engine=innodb default charset=utf8 ;
        
insert into t2 values
('小王' ,65),
('小张'  ,80),
('小李'  ,72),
('小赵'  ,93);

方法一: 
select * from t2 where s2 = (select min(s2) from (select s2 from t2 order by s2 desc limit 3) tmp);

方法二:

select s2 from t2 order by s2 desc limit 2,1;

或者:

 select s2 from t2 order by s2 desc limit 1 offset 2;

limit后面跟的是1条数据,offset后面是从第3条开始读取

注: limit m,n
select * from table limit m,n
其中m是指记录开始的index,从0开始,表示第一条记录
n是指从第m+1条开始,取n条。
select * from tablename limit 2,4
即取出第3条至第6条,4条记录

select * from tablename <条件语句> limit 100,-1

从第100条后开始-最后一条的记录

mysql低版本不支持limit offset

limit offset 在mysql 4.0以上的版本中都可以正常运行,在旧版本的mysql 3.23中无效

limit m offset n 等价于 limit m,n


类似,取出第1名:

select s2 from t2 order by s2 desc limit 0,1;


limit调优:http://blog.163.com/chunlei_cl/blog/static/81843020103921923645/

1、offset比较小的时候。 

select * from yanxue8_visit limit 10,10 

多次运行,时间保持在0.0004-0.0005之间 

Select * From yanxue8_visit Where vid >=( 

Select vid From yanxue8_visit Order By vid limit 10,1 

) limit 10 

多次运行,时间保持在0.0005-0.0006之间,主要是0.0006 

结论:偏移offset较小的时候,直接使用limit较优。这个显然是子查询的原因。 

2、offset大的时候。 

select * from yanxue8_visit limit 10000,10 

多次运行,时间保持在0.0187左右 

Select * From yanxue8_visit Where vid >=( 

Select vid From yanxue8_visit Order By vid limit 10000,1 

) limit 10 

多次运行,时间保持在0.0061左右,只有前者的1/3。可以预计offset越大,后者越优。

当偏移1000以上使用子查询法可以有效的提高性能:
优化前:
elect * from Member limit 100000, 100;

子查询优化后:
select * from Member where MemberID >= (select MemberID from Member limit 100000,1) limit 100;
http://www.111cn.net/database/mysql/50921.htm


5. sql  优化

http://www.2cto.com/database/201506/404715.html
http://www.jb51.net/article/47550.htm

你可能感兴趣的:(mysql 命令)