mysql基础
rpm -e mysql #查看系统中是否已经自带mysql数据库
rpm -qa | grep mysql // 这个命令就会查看该操作系统上是否已经安装了mysql数据库
yum list | grep mysql //查看yum上提供下载的mysql的版本信息
yum install -y mysql-server mysql mysql-deve //数据库的安装
rpm -qi mysql-server //查看已安装数据库的版本信息
service mysqld start //启动服务
chkconfig --list | grep mysqld //查看mysql服务是不是开机自动启动
chkconfig mysqld --level 345 on //自启动
mysqladmin -u root password 'new-passwd' //设置密码
mysql端口号是 3306
/var/log/mysqld.log 日志输出存放位置
/etc/my.cnf 主配置文件
/var/lib/mysql 数据库文件
MySQL服务的启动、停止与卸载
mysqladmin start
mysqladmin restart
mysqladmin shutdown //开关重启
如果mysql未启动,你可以使用以下命令来启动mysql服务器:
root@host# cd /usr/bin
./safe_mysqld &
如果你想关闭目前运行的 MySQL 服务器, 你可以执行以下命令:
root@host# cd /usr/bin
./mysqladmin -u root -p shutdown
Enter password: ******
(在 Windows 命令提示符下运行:
启动: net start MySQL
停止: net stop MySQL
卸载: sc delete MySQL)
grant all privileges on *.* to 'qy'@'%' identified by 'new-passwd' with grant option;
qy使用new-passwd从任何主机连接到mysql服务器
登录:mysql -h 主机名 -u 用户名 -p
在登录数据库时指定, 命令: mysql -D 所选择的数据库名 -h 主机名 -u 用户名 -p
注意: MySQL语句以分号(;)作为语句的结束, 若在语句结尾不添加分号时, 命令提示符会以 -> 提示你继续输入(有个别特例, 但加分号是一定不会错的);
修改mysql密码
mysqladmin -u用户名 -p旧密码 password 新密码
或进入mysql命令行SET PASSWORD FOR root=PASSWORD(“root”);
增加新用户
grant select on 数据库.* to 用户名@登录主机 identified by “密码”
show databases; //显示数据库列表
use mysql; //打开库
show tables; //列出表
source fileName.txt //建立数据库
describe 表名 //显示数据表的结构
how columns from 表名 //显示列属性
alter table tabelName add column fieldName dateType; //增加一个字段
alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
//增加多个字段
create database 库名;
create table 表名(字段设定列表);
create table if not exists t1(……); //创建表先判断表是否存在
create temporary table t1(name varchar(10)); //建立临时表t1
create table table2 select * from table1 where 1<>1; //从已经有的表中复制表的结构
create table table2 select * from table1; //复制表
alter table table1 rename as table2; //对表重新命名
alter table t1 rename t2; //重命名表
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned
drop database 库名; //删库
drop table 表名 //删表
delete from 表名;
truncate table 表名; //将表中记录清空
select * from 表名; //显示表中的记录
explain < table_name >; //查看sql语句的效率
select now(); //查询时间
select user(); //查询当前用户
select version(); //查询数据库版本
select database(); //查询当前使用的数据库
alter table table1 add index ind_id (id);
create index ind_id on table1 (id);
create unique index ind_id on table1 (id);//建立唯一性索引
drop index idx_id on table1;
alter table table1 drop index ind_id; //删除索引
select concat(id,’:',name,’=') from students; //联合字符或者多个列(将列id与”:”和列name和”=”连接)
select * from students order by id limit 9,10; //limit(选出10到20条)<第一个记录集的编号是0>
rm -f 库1/表1.* //删除数据库1中的数据表1
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串
每条语句输入完毕后要在末尾填加分号’;'或者’\g’
load data local infile “文件名” into table 表名; //数据导入命令
mysqldump -opt 数据库名 > out.sql //将数据库中的所有表备份到out.sql文件
mysqldump -opt 数据库名 表名1 表名2 > out.sql //将数据库中的表1,表2备份到out.sql文件
mysqldump -u root -p test>c:\test.txt //将数据库test备份
mysqldump -u root -p test mytable>c:\test.txt //备份test数据库下的mytable表格
mysql -u root -p test //导回test数据库
mysqldump -h host -u user -p pass –databases dbname > file.dump
//就是把host上的以名字user,口令pass的数据库dbname导入到文件file.dump中
mysqldump –all-databases > all-databases.sql
//将所有数据库备份到all-databases.sql文件
mysql < all-databases.sql(导入数据库) mysql>source news.sql;(在mysql命令下执行,可导入表)
改变整个mysql的编码格式:
启动mysql的时候,mysqld_safe命令行加入
–default-character-set=gbk
改变某个库的编码格式:在mysql提示符后输入命令
alter database db_name default character set gbk;
mysqladmin -u用户名 -p旧密码 password 新密码 //修改密码
mysql -D samp_db -u root -p < createtable.sql
(提示: 1.如果连接远程主机请加上 -h 指令; 2. createtable.sql 文件若不在当前工作目录下需指定文件的完整路径。)
MySQL不支持:事务,视图,外键和引用完整性,存储过程和触发器
MySQL索引的操作符号:<,<=,>=,>,=,between,in,不带%或者_开头的like
使用索引的缺点:
1)减慢增删改数据的速度;
2)占用磁盘空间;
3)增加查询优化器的负担;
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;
分析索引效率
方法:在一般的SQL语句前加上explain;
分析结果的含义:
1)table:表名;
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
3)possible_keys:查询可以利用的索引名;
4)key:实际使用的索引;
5)key_len:索引中被使用部分的长度(字节);
6)ref:显示列名字或者”const”(不明白什么意思);
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
8)extra:MySQL的建议;
使用较短的定长列
1)尽可能使用较短的数据类型;
2)尽可能使用定长数据类型;
a)用char代替varchar,固定长度的数据处理比变长的快些;
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;
使用not null和enum
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
使用procedure analyse()
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
select * from students procedure analyse();
select * from students procedure analyse(16,256);
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;
使用查询缓存
1)查询缓存的工作方式:
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
2)配置缓存参数:
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与 select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询; query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
参考:
http://www.xxlinux.com/article/development/database/20121106/18532.html
两表合并
—如果没有重复数据,可以直接将A表数据插入到B表
insert into b
select * from a
–你用的Union仅仅是查询,不会影响数据库记录
如果有重复可以这样
insert into b
select * from a
where not exits(select * from b where b.主键=a.主键)
select * from c_user_realname
方法1: 用SET PASSWORD命令
mysql -u root
mysql> SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘newpass’);
方法2:用mysqladmin
mysqladmin -u root password “newpass”
如果root已经设置过密码,采用如下方法
mysqladmin -u root password oldpass “newpass”
方法3: 用UPDATE直接编辑user表
mysql -u root
mysql> use mysql;
mysql> UPDATE user SET Password = PASSWORD(‘newpass’) WHERE user = ‘root’;
mysql> FLUSH PRIVILEGES;
在丢失root密码的时候,可以这样
mysqld_safe –skip-grant-tables&
mysql -u root mysql
mysql> UPDATE user SET password=PASSWORD(“new password”) WHERE user=’root’;
mysql> FLUSH PRIVILEGES;
grant all privileges on *.* to ‘dba’@’%’ identified by ‘123456’ with grant option;
grant select on *.* to ‘sre’@’%’ identified by ‘123456’ with grant option;
输入 mysql -u root 登录 mysql 的时候出现以下错误:
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
出现这个问题的原因是没有生成 mysql.sock 文件,没有生成这个文件的原因是 /usr/local/mysql 目录的权限不对:
chown -R mysql:mysql /usr/local/mysql 即可解决
其实在重装系统时如果不格式化mysql所在的盘,我们的mysql是不需要重装的
操作:
1.创建mysql服务:
开始–>运行–>cmd cd命令到mysql的bin目录下(如:d:mysqlbin)
mysqld –install 这里填写mysql服务名(如:mysql) –defaults-file=”这里填写my.ini的路径(如:d:mysqlmy.ini)”
2.启动服务 net start 这里写mysql的服务名(如:mysql)
停止服务 net stop mysql服务名
ps:
a)该操作关键在第1步,my.ini的路径必须写在双引号之内,否则会创建失败;而且必须cd命令到bin目录下否则在启动mysql服务时会提示”找不到指定文件”错误
b)若忘记了mysql密码可参考mysql不用密码登录的操作来登录并修改密码
c)若想删除已有的mysql服务,mysqld –remove mysql服务名即可
LIMIT 2 OFFSET 1; limit后面跟的是2条数据,offset后面是从第1条开始读取
LIMIT 2 ,1; limit后面是从第2条开始读,读取1条信息。