2014-07-13 20:22:21
来 源
中存储网
sendmail
Mysql入门到精通安装Mysql  tar xxfv mysql-xx  cd mysql-xx  make  make isntall  ./script/mysql_install_db启动和停止  mysqladmin version  mysqlsh
Mysql入门到精通
安装Mysql
    tar xxfv mysql-xx
    cd mysql-xx
    make
    make isntall
    ./script/mysql_install_db
启动和停止
    mysqladmin version
    mysqlshow
service mysql start
/etc/rc.d/init.d/mysqld start
mysqld_safe&
Mysql启动测试
locate safe_mysqld   locate在linux下找一个脚本
mysqladmin ping 检测是否在工作
mysqladmin version Mysql版本号
mysqlshow 查看有多少数据库
刚安装完后有两个数据库
Mysql用户管理
增加一个用户test_user密码为123,
grant select,insert,update,delete on *.* to ’test_user’@’localhost’ identikfied by ’123’;
use mysql
grant select,insert,update,delete on *.* to ’romote’@’%’ identikfied by ’remote’
grant(vt同意,)语句创建Mysql用户并指定其权限,而revoke(vt,撤回,废除,宣告无效)语句删除权限,grant和revoke影响两个表
user,db数据库权限,tables_priv表的权限,columns_priv列级权限
use mysql;
delete from User where User="";   //删除没有必要的用户
update User set Password=PASSWORD(’newpassword’) where User=’root’ //更改用户的密码
update User set Password=PASSWORD(’king’) where User=’remote’
如果要更改登陆终端,更新User表中相应用户的Host字段
平时不要用root用户管理mysql,Mysql的用户管理是通过User表来实现的,添加新用户常用有两个,一是在User表插入相应的数据行,同时设置权限;二是通过grant命令创建具有某种权限的用户.
grant的语法:
privileges(n特权,特别待遇,基本公民权利);
identified(vt识别,鉴别,把..和..看成一样v确定)
格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";
           (管理权限)
grant all on sailboy.* to NewUserName@HostName identified by "password";
grant all on *.* to postfix@localhost identified by "postfix";
grant usage on *.* to NewUserName@HostName identified by "password";   只允许登录--其它什么也不允许做。
grant select,insert,update on mydb.* to NewUserName@HostName identified by "password";
grant update,delete on mydb.TestTable to NewUserName
grant all on *.* to remote@localhost identified by "king";
REVOKE   ALL   on   sailboy.*   FROM   reomote@’%’;   
  REVOKE   grant   option  
on   dbaaa.*   FROM  
aaa@localhost;   
若要给次用户赋予他相应对象上的权限的管理能力,可以grant后面添加with grant option选项
要是添加用户密码要使用函数PASSWORD
回收权限可以更改User,或REVOKE
全局管理权限:
FILE: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。
数据库/数据表/数据列权限:
ALTER: 修改已存在的数据表(例如增加/删除列)和索引。
CREATE: 建立新的数据库或数据表。
DELETE: 删除表的记录。
DROP: 删除数据表或数据库。
INDEX: 建立或删除索引。
INSERT: 增加表的记录。
SELECT: 显示/搜索表的记录。
UPDATE: 修改表中已存在的记录。
特别的权限:
ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录--其它什么也不允许做。
连接的mysql     mysql -h主机 -u用户名 -p密码
show tables;  查看有多少表
show databases;  /*可以加入注释*/  要以分号结束
     #  单行注释
use mysql;
show talbes;
describe/desc 表名;   显示数据表的结构
    desc user;  查看用户的详细信息
desc user;用户表结构
exit    退出Mysql
MySQL  DCL入门   数据控制语言
每一张表有三个文件
create database school;
drop database school;
写的更严禁   
drop database if exists school;  # 如果
建表
use school;
create table teacher #建立教师情况表Teacher
(
    Id int(5) auto increment not null primary key,
    name char(10) not null,
    address varchar(50) default ’武汉大学’,
    year date
)
删除表
drop table teacher;
select * from jokes;
select id,jokedate form jokes;
select id,left(joketext,20),jokedate from jokes;  看joketext的前20字符
select count(*) from jokes;统计有多少条记录
PhpMyAdmin的使用
Mysql字符串和数字
ANSI字符串因该为’’引号,""在mysql兼容
\n表示换行符
select 岩石引号和转意
select (100+Array8+ArrayArray)/3;  当计算器
select ’hello’,’"hello"’,""hello"",’hel"lo’,’\’hello’;
数字
有效的浮点的例子
-32023.680Arraye+10
select hex(’cat’);  
数字类型
准确类型 integer(int),smallint,tinyint和bigint    近似数字类型
商品价格 888.88 price decimal(5,2) 表示总长度:5,小数位:2
Mysql函数
比较运算符 = != ,>,>=,
is null,is not null,isnull(expr) 是不是空
expr between min and max   
如果expr大于或等于min,并且expr小于或等于      
   max,between返回1,否则返回0,它等价与表达式(min  
is null,is not null,isnull(expr)
expr between num and max
如果expr大于或等于min,并且expr小于或等于max,between返回1,否则返回0。它等价于表达式(min0以及expr1null),那么if()返回  
expr2,否则返回expr3.if()返回一个数字或字符串,这取决于  
             它被使用的语境;
select if(1>2,2,3);        3
select if(1,,>
-,+
,/div,%,mod,
^
not,!
Mysql字符串函数;
select ASCII(’2’);
select ASCII(2);
select bin(12);   //二进制转换
    ort(12);    八
    hex(12)    十六
char()     以整数类型即使参数,返回这个整数所代表的ascii码值给出的字符组成的字符串,    null值将被忽略.
        select char(77,121,83,81,’76’);  //翻译成ACCEII码   MySQL
length(str)    返回字符串str的的字节数。   char_length(str)
        select length(’test’);    4
concat(str1,str2...)  
将参数连成字符串返回。如果有任何一个参数为null,返回值为null.可以有超过2个的参数。数字参  
数将被转换为相等价的字符串形式。 里面有一个是空,返回为空
select concat(’my’,’s’,’ql’);      
mysql
locate(子串substr,母串str)  返回子串substr在字符串str中第一次出现的位置,如果找不到,返回为0
        select locate(’bar’,’foobarbar’);  4  第一次出现的位置
        select locate(’xbar’,’foobar’);    0
instr(str,substr)        返回子串str中第一次出现的位置,和locate()相似,参数颠倒
        select instr(’foobarbar’,’bar’);   4
lpad(str,len,padstr)    用字符串padstr对str进行左边填补直至它的长度到达len个字符长度,然后返回str.如果str的长度长于len,那么它将被截除len个字符
        select lpad(’hi’,4,’??’);         // ’??hi’
rpad(str,len,padstr)      
用字符串padstr对str进行右边填补直至它的长度到达len个字符长度,然后返回str.如果str的长度长于len,那么它将被截除
len个字符
        select rpad(’hi’,5,’?’);          // ’hi???’
left(str,len)        返回字符串 str中最左边的len个字符
        select right
SELECT语法
数据选择   select 列1,列2,...from 表1,表2,...
select joketext form jokes where joketext like "%鞋%";  %表示任意字符串
select joketext form jokes where joketext like "_鞋_";  _表示任意一个字符串
分组函数
    员工表 emp(empno,name,tel,deptno,sal)
    部门表 dept(depton,dame,addr)
显示每个部门的最高工资
    select depton.max(sal) for emp group bydeptno;
Mysql数据定义语言DDL
创建数据库格式:   建库
    create database [if not exists] 数据库名
    create database if not exists test;
    create database question;
删除数据库个是:drop database [if exists] 数据库名
Mysql的表 一个表实际上对应三个文件 xx.MYD xx.MYI xx.frm  
create table 表名(
    列1 类型[选项],   
    列2 类型[选项],
    ....
)
数据库数据目录 lib/mysql/    *.frm 表格式定义文件,*.myd数据文件,*.myi索引文件
create database school;
create talbe test(
    a int,
    b int
)
例子:
Mysql数据库的数据存放的主体是表(table)
建表:   
    create database school;
    use school;
    create table teacher #建立教师情况表
    (
        Id int(5) auto_increment not null primary key;
        name char(10) not null,
        address varchar(50) default ’武汉大学’,
        year date
    );
    auto_increment每个记录自动加一,primary key主字段
    drop table teacher; 删除表
    修改表结构:
        alert table 表1 rename 表2;   //更改表名称
        alert talbe t2 modify a tinyint not null,change b c char(20);
        //为了改变列a,从integer改为tinyint not null(名字一样),并且改变列b,从char(10)改为char(20),同时重命名,从b改为c;
        alert table t2 add d timestamp; //新增一个新timestamp列,名为d;
        alert table t2 add c int auto_increment,add index(c);
   //增加一个新的auto_inerement整数列,命名为e;我们用索引了c,因为auto_increment列必须被索引
        alert table t2 drop columm c; //删除列c
desc table名字
Mysql视图
    create table t(qty int,price int);人缘
    insert into t values(3,50);
    create view v as select qty,price,qty,price,qty*price as values from t;
    select * from v;
Mysql索引
添加/删除匿名索引
在列d上增加一个索引,列b是唯一索引,并且使列a为主键:
alert table t2 add index(d),add unique index(b),add primary key(a);
alert table t2 drop index d,drop index b,drop primary key;
添加/删除索引
create index idx_t2 on t2(d);
drop index inx_t2 on t2;
create unique index idx2_t2 on t2(b);
drop index idx2_t2 on t2;
三层模式
二层模式C/S(B/S)
三层模式C/A/S(B/A/S)  客湖层、逻辑层,数据层
灵活性和可扩展性,安全性,软件重用性
Mysql存储过程
use test;
delimiter //
create procedure simpleproc (out param1 int)
begin
    select count(*) into parma1 from t;
end
//
delimiter ;
call simpleproc(@a);
Mysql用户使用命令
mysql的use的用法
show databases;
use mysql; 使用mysql表
use db1;
select count(*) from members;
select * from mysql.members;更详细
use db1;
select * from test.emp;  //察看其他数据库的表,用"."
Mysql desc句法 表的结构
desc 表名[列名]
describe 提供有关一个表的列信息.列名可以是一个列名或是一个包含sql通配符字符"%"和"_"的字符串。没有必要用引号包围字符串。"%"表示任意的字符,
desc members 显示表的结构
desc members ’e%’;  members以"e"开头的列
Mysql事物与所定
start/commit/rollback
commit(提交)就是将sql语句交给数据库系统执行并生效,数据更改于磁盘文件.
缺省的,mysql运行在autocommit模式,执行完就更新存储磁盘
如果使用事务安全表,通过下面的命令,可以设置mysql为非autocommit模式
set autocommit=0;
在此之后,你必须使用commit来存储你的更改到磁盘上,或使用rollback(回滚),
set autocommit=0;
可以用 select @@autocommit;来显示
rollback可以反悔
事务是一个不可分割的数据操作单元,事物中的操作要么都发生,要么都不发生。
事务可以用start transaction定义;
start transaction;
select @x=sum(发的工资) from emp where  deptono=10;
update set a =@x;
commit;
自动体交语句
有些语句是无法回滚的,因为他们会自动提交,如:DDL语句(create/drop database,create/drop/alter table)
下面是自动的
alter table         begin             create index;
drop database     drop database
load master data
例子
start transaction;
    ...
    ...
    ...
    if @accoutn  school_2006_Array.sql      //将数据库中所有的表备份到文件
mysqldump --opt school teacher student > school_2006_Array.sql    //将数据库中taacher和student表备份到文件
mysqldump --databases school test > schoool_test_2006.sql    //备份多个数据库
进到数据库用source 以前的xx.sql备份
当用PHP5以下版本的PHP来连接MySQL5.0的数据库的时候,会出现下面的错误提示:
Client does not support authentication protocol requested by server; consider upgrading MySQL client
经过我在网上的一番查找终于找到问题的原因了,因为MySQL5.0的用户密码安全协议和以前的版本的不同了,为了让老版本的PHP连接数据库需要将MySQL的用户密码更换成老版本的。可以在mysql的命令行中执行下面的语句:
SET PASSWORD FOR 用户名@主机名 = OLD_PASSWORD(’密码’);
Mysql数据库同步
master/slave数据同步配置
A服务器设置
GRANT FILE ON *.* TO backup@1Array2.168.1.3 IDENTIFIED BY ‘1234’;
上面是Master开放一个账号backup密码1234给IP:1Array2.168.1.3有档案处理的权限
备份Master所有数据库..通常都用tar命令
在A服务器上修改/etc/my.cnf
在[mysqld]区段内加入参数
log-bin
server-id=1
sql-bin-update-same
binlog-do-db=vbb
从起A服务器mysql
此时因为由加入log-bin参数,因此开始有index产生了,在/var/lib/mysql目录下有.index当案记录数据库的异动log.
B服务器设置
设定/etc/my.cnf
在[mysqld]区段加入
master-host=A主服务器IP地址
master-user=backup
master-password=1234
master-port=3306
server-id=2
master-connect-retry=60
replicate-do-db=vbb 告诉slave只做vbb数据库的更新
log-slave-updates
将A上的mysql.tar copy到B上
用ftp传B的/tmp
Array
Mysql的新功能
索引分单列索引和组合索引
单列索引: 即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引,组合所印即一个索引包含多个列
普通话索引  三种方法创建
    创建索引,例如 create index  ON tablename (列的列表);
    修改表,例如 alter table tablename ADD INDEX [索引的名字] (列的列表);
    创建表的时候指定索引 CREATE TABLE table ([...],INDEX [索引的名字] (列的列表));
唯一性索引   唯一的区别:索引列的所有值都只能出现一次,即必须唯一.唯一性索引可以用以下几种创建
    创建索引,  CREATE UNIQUE INDEX  ON tablename (列的列表);
    修改表     ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
    创建表的时候指定索引  CREATE TABLE tablename ([...],UNIQUE [索引的名字] [列的列表]);
主键
Mysql全文检索
MySQL全文检索简介
MySQL
模糊查询;匹配程度
Mysql3.23后支持全文检索
全文索引在mysql中是一个fulltext类型索引。fulltest索引可以在create table时或之后使用alter table或create index在char,varchar或text列上创建。
对于大的数据库,将数据装载到一个没有fulltext索引的表中,然后再使用alter table(或create index)创建索引,这将是非常快的。将数据装载到一个已经有fulltext索引的表中,将是非常慢的。
全文搜索通过match()函数完成。
create table articles(            #创建一个带索引的表
    id int unsigned auto_increment not null primary key,
    title varchar(200),
    body text,
    fulltext(title,body)      #需要在title,body进行全文索引
);
insert into articles (title,body)
values           #加入数据
(’mysl tudsf’,’ater you wnt throut a ...’),
(’msql tuadsf’,’fter you went dhrght a ...’),
(’mysql tuadsf’,’afer you wet throuasdht a ...’),
(’ysql tuadsf’,’fter you ent thrsadught a ...’),
(’mysql tuadsf’,’aftr you ent throught a ...’),
(’mysql tuadsf’,’after you went throught a ...’),
(’mysql tuadsf’,’afte you ent throught a ...’),
(’mysl tuf’,’aferr weu nt throught a ...’),
(’mysql tuadsdsf’,’after you went tasdfrought a ...’),
(’msql tuadsf’,’sdfeer you went throught a ...’),
(’myql tuadsf’,’aferer you went throught a ...’),
(’myql tuadsf’,’afsdfter you went throught a ...’),
(’myasdfql tudsfdsf’,’aftersdfou went throught a ...’),
模糊搜索
select * from articles where match(title,body) against(’mysql’);
函数match()对照一个文本集(包含在一个fulltext索引中的一个或多个列的列集)执行自然语言搜索一个字符串。搜索字符串做为against
()的参数被给定。搜索以忽略字母大小写的方式执行。对于表中每个记录行,match()返回一个相关性值。即,在搜索字符串与记录行在match()列
表中指定的列的文本之间的相似性尺度。
当match()被使用在一个where子句中,返回的记录行被自动地以相关性从高度的次序排序。相关性值是非负的浮点数字
。零相关性意味着不相似。相关性的计算是基于:词在记录行的数目,在行中唯一的数目、在集中词的全部树木和包含一个特殊词的文档(记录行)的数目。
前面的例子是函数match()使用的一写基本说明。记录行以相似性递减的顺序返回。
administrator
select

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。