您的位置:首页 > 其它

在局域网设置部分用户共享访问权限

2012-05-07 16:07 309 查看
* FULLTEXT模式
** 启用FULLTEXT模式
CREATE TABLE XXX
(
......
......
FULLTEXT(列名)
) ENGINE=MyISAM;
--只有MyISAM引擎才支持全文本模式
where Match(列名) Against(关键字)
** 查询扩展
使用扩展查询还会搜索出与你搜索相关的其他行即使其他行不包括指定的关键字
MySQL对数据和索引进行两边扫描来完成搜索
1、进行一个基本的全文搜索,找出与条件匹配的所有行
2、检查这些匹配行并选择有用的词
3、用有用的词再次搜索
where Match(列名) Against(关键字 WITH QUERY EXPANSION)
** 布尔文本查询
where Match(列名) Against('要包含的词表示 -不包含的词表示' IN BOOLEAN MODE)
*** 全文本布尔操作符
+ 包含,词必须存在
- 排除,词必须不出现
> 包含,而且增加等级值
< 包含,而且减少等级值
() 把词组成子表达式
~ 取消一个词的排序值
* 词尾的通配符
"" 定义一个短语
** 全文本搜索的使用说明
1、三个或者三个一下字符的词语,不参与搜索
2、mySQL内建一个词列表,列表中的词都不参与搜索
3、如果词出现在50%行以上的话,该词不参与搜索
4、表中的行数必须多于或者等于3行,否则无结果
5、忽略词中的单引号
6、无次分隔符的语言(日语和汉语)不能恰当地返回结构

* 数据操作
** INSERT 语句
insert into table(colums...)
values(vals......)
(vals......)
(vals......)
......
可以一次插入N列

** UPDATE语句
UPDATE IGNORE.....
可以忽略跟新时出现的错误,使错误发生前更新的列不被恢复为原来的值

* 表的操作
** CREATE TABLE语句
若想在一个表不存在的时候创建表,则在CREATE TABLE 语句的表名后面给出IF NOT EXISTS
每个表只允许一个AUTO_INCREMENT列,而且它必须被索引(例如通过使他成为主键)
可以使用last_insert_id()函数返回最后一个AUTO_INCREMENT值
MYSQL不允许使用函数作为默认值,只支持常量
建表时使用
CREATE TABLE 表名
(
列名 类型 [CHARACTER SET 字符集 COLLATE 校对名] --对列设置字符集和校对
)[ENGINE=引擎名] --指定引擎类型
[DEFAULT CHARACTER SET 字符集] --指定字符集
[COLLATE 校对名] -- 指定校对
InnoDB引擎不支持全文本搜索
MyISAM引擎不支持事务处理
定义外键的语法为FOREIGN KEY(列名) REFERENCES 外部表名(外部键名)
**重命名表
RENAME TABLE 旧表名 TO 新表名
** 视图
使用SHOW CREATE VIEW 视图名;来查看创建视图的语句
跟新视图,可以先DROP再CREATE VIEW,也可以直接用CREATE OR REPLACE VIEW语句

*高级用法
** 存储过程
*** 执行存储过程
CALL 存储名(@参数名...) --所有MySQL变量使用时都必须以@开始,
--注意:这里没有PROCEDURE关键字
--参数在使用前可以不定义,直接使用
PS:可以用SELECT @参数名...的方式来获取参数的返回值

*** 创建存储过程
CREATE PROCEDURE 存储名(参数列表)[COMMENT 注释语句]
BEGIN
SQL语句; --通过INTO关键字可以将SELECT结果赋值给OUT参数
......
END;

PS:若使用MySQL命令行来建立存储过程,则存储过程内的SQL语句的';'会被解释成存储过程结束的';',是的存储过程中的SQL出现语法错误。解决办法是临时更改命令行实用程序的语句分隔符
DELIMITER // --除\符号外,任何字符都可以用作语句分隔符,
--注意:这里没有';'
CREATE PROCEDURE 存储名(参数列表)
BEGIN
SQL语句;
......
END//
DELIMITER ;
**** 参数列表定义为
IN|OUT|INOUT 参数名 定义,IN|OUT|INOUT 参数名 定义......
PS:记录状态不是允许的类型,因此,不能通过一个参数返回多个行和列

*** 删除存储过程
DROP PROCEDURE 存储过程名;
DROP PROCEDURE IF EXISTS 存储过程;

*** 存储过程定义语法
**** 定义
DECLARE 变量名 类型 [DEFAULT 默认值]
DECLARE CONTINUE HANDLER FOR SQLSTATE 'SQL状态码' SET 赋值语句 --当出现状态吗,执行赋值语句
--DECLARE语句定义的局部变量必须在定义任何游标或句柄之前定义,而句柄必须在游标之后定义即:
--定义局部变量
--定义游标
--定义句柄
**** 判断
IF ... THEN
......
ELSEIF ... THEN
......
ELSE
......
END IF;
****循环
REPEAT
......
UNTIL ... END REPEAT;

*** 检查存储过程
SHOW CREATE PROCEDURE 存储名; --显示创建存储过程的语句
SHOW PROCEDURE STATUS [LIKE 过滤模式] --获得何时,由谁创建等详细信息的存储过程列表

** 游标 --MySQL游标只能用于存储过程和函数
*** 定义游标
DECLARE命名游标,并定义相应的SELECT语句
DECLARE 游标名 CURSOR FOR SELECT语句;
*** 打开和关闭游标
OPEN 游标名 --这里不需要CURSOR关键字
CLOSE 游标名 --如果不明确关闭游标,MySQL会在到达END语句时自动关闭它
*** 使用游标数据
使用FETCH INTO语句分别访问它的每一行,FETCH指定检索什么数据,检索出来的数据存储在什么地方。它还向前移动游标中的内部行指针,使得下一条FETCH语句检索下一行
FETCH 游标 INTO 变量1,变量2...

** 触发器
*** 创建触发器
CREATE TRIGGER 触发器名 --唯一的触发器名
AFTER|BEFORE --触发器何时执行(处理之前或之后)
INSERT|DELETE|UPDATE --触发器应该响应的活动(DELETE、INSERT和UPDATE)
ON 表名 --触发器关联的表
FOR EACH ROW
触发的SQL语句;
**** 注意
--只有表才支持触发器,视图和临时表不支持触发器
--单一触发器不能与多个事件或多个表关联。
--如果BEFORE触发器失败,则MySQL将不执行请求操作(??)。如果BEFORE触发器或语句本身失败,MySQL将不执行AFTER触发器
*** 删除触发器
DROP TRIGGER 触发器名称 --触发器不能跟新,只能删除再创建
*** 使用触发器
***** INSERT触发器
1、在INSERT触发器代码内,可引用一个名为NEW德虚拟表,访问被插入的行;
2、在BEFORE INSERT触发器中,NEW中的值也可以被跟新(允许更改被插入的值);
3、对于AUTO_INCREMENT列,NEW在INSERT执行之前为0,执行之后为自动生成的值
*****DELETE触发器
1、在DELETE触发器代码内,你可以引用一个名为OLD的虚拟表,访问被删除的行;

** 事务处理
START TRANSACTION; --标识事务的开始
SAVEPOINT 保留点名; --为了支持回退部分事务处理,必须能在事务处理块中合适的位置放置保留点,可使用SAVEPOINT语句
ROLLBACK [TO 保留点;
RELEASE SAVEPOINT 保留点; --释放保留点
COMMIT;

SET autocommit=0 --MySQL不自动提交更改
SET autocommit=1 --MySQL自动提交更改
--标志位连接专用,所以autocommit标志是针对每个连接而不是服务器的。

** 全球化与本地化
1、校对在对ORDER BY子句检索出来的数据排序时起重要作用
SELECT * FROM $table ORDER BY $column COLLATE 校对名;--COLLATE还可以用于GOURP BY,HAVING,聚集函数,别名等

* 数据库维护
** 备份数据库
1、mysqldump -h $hostname -u $username 数据库名 >备份.sql
mysql 数据库名 <备份.sql
2、mysqlhotcopy
3、BACKUP TABLE或SELECT INTO OUTFILE备份,用RESTORE TABLE还原
--为保证所有数据被写到磁盘,可能需要在备份前使用FLUSH TABLES语句
** 数据库维护
ANALYZE TABLE 表名; --检查表键是否正确
CHECK TABLE 表名; --针对许多问题对表进行检查
OPTIMIZE TABLE 表名; --回收表空间
** 诊断启动问题
mysqld --help --显示帮助列表
--safe-mode --装载减去某些最佳配置的服务器
--verbose --显示全文本信息
--version --显示版本信息
** 查看日志文件(位于data目录中)
hostname.err --错误日志
hostname.log --查询日志,记录所有MySQL活动
hostname-bin --二进制日志,记录跟新过的数据
hostname-slow.log --缓慢查询日志,记录执行缓慢的任何查询
** 安全管理
*** 管理用户
*****获得用户账号列表
use mysql;
select user from user;
***** 创建用户账号
CREATE USER 用户名 IDENTIFIED BY '密吗'
*****重新命名用户账号
RENAME USER 旧用户名 TO 新用户名
***** 删除用户账号
DROP USER 用户名
***** 设置访问权限
SHOW GRANTS FOR 用户名; --看到用户账号的权限
--注意GRANTS有个S
--USAGE表示根本没有权限

GRANT --授权
SELECT|ALL|... --要授予的权限
--可以列出各权限并用','分隔
ON 数据库.表名|ALL|database.*|特定的列|存储过程 --被授予访问权限的数据库和表
--对象可以是不存在的
TO 用户名; --用户名

REVOKE --撤销权限
SELECT|ALL|... --撤销的权限
--可以列出各权限并用','分隔
ON 数据库.表名|ALL|database.*|特定的列|存储过程 --撤销权限的数据库和表
--对象可以是不存在的
FROM 用户名; --用户名
***** 更改用户口令
SET PASSWORD FOR 用户名=Password('新密码')
SET PASSWORD=Password('新密码') --不指定用户名时更改自己密码
本文出自 “暗日” 博客,请务必保留此出处http://darksun.blog.51cto.com/3874064/961160
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: