基本观点 越精确的匹配越优先
mysql> select Host,User from mysql.user; +-----------+--------+ | Host | User | +-----------+--------+ | % | root | | % | xiaomi | | 127.0.0.1 | | | 127.0.0.1 | yfang | | localhost | root | +-----------+--------+ 5 rows in set (0.00 sec)
+-----------+--------+ | Host | User | +-----------+--------+ | 127.0.0.1 | yfang | | 127.0.0.1 | | | localhost | root | | % | root | | % | xiaomi | +-----------+--------+
root@S71[0]~17:01:03# /usr/local/mysql/bin/mysql -uyy -h 127.0.0.1 -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 33 to server version: 5.0.18-standard-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> select user(), current_user(); +--------------+----------------+ | user() | current_user() | +--------------+----------------+ | yy@127.0.0.1 | @127.0.0.1 | +--------------+----------------+ 1 row in set (0.00 sec)
CREATE USER, GRANT, REVOKE, SET PASSWORD 等等,你可以使用下面的方法来实现root密码的修改。
UPDATE user SET password=PASSWORD('new_password') WHERE user='root';
FLUSH PRIVILEGES;
| 优点 | 缺点 |
|---|---|
| 安全 | CPU开销 |
| 可以针对特定的连接设定开启 | 数据传输速度慢 |
| 支持replication | |
CREATE [OR REPLACE] [ALGORITHM = algorithm_type]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
OR REPLACE 如果原来存在同名视图,则替换原有视图
ALGORITHM 设定视图算法
column_list 可以重载默认的视图中的列名
WITH CHECK OPTION 数据更新时,检查数据类型,如果不符合视图中的类型定义,则不做更新
CREATE VIEW UserView AS SELECT User, Host FROM mysq.user;
主键(Primary key) 一种典型的索引,要求唯一,非NULL
唯一索引(unique index) 和主键类似,不同点是可以是NULL,所有非NULL行要求值唯一
可重复索引(non-unique index) 所有键值可以有重复
全文(FULLTEXT) 索引 全文检索索引,只有MyISAM存储引擎支持FULLTEXT索引,并且只为CHAR、VARCHAR和TEXT列。索引总是对整个列进行,不支持局部(前缀)索引
空间(SPATIAL) 索引 只有MyISAM存储引擎支持空间类型。空间索引使用R-树。
<前n位索引性能考查案例>
假定有一个表在name char(255)上建立了10位索引
SELECT COUNT(DISTINCT name) AS 'Distinct Name',
COUNT(*) - COUNT(DISTINCT name) AS 'Duplicate Name'
FROM tbl_name;
SELECT COUNT(DISTINCT LEFT(name,10)) AS 'Distinct Name',
COUNT(*) - COUNT(DISTINCT LEFT(name,10)) AS 'Duplicate Name'
FROM tbl_name;
这可以帮你查看只检查10位前缀是否对数据筛选性构成巨大影响,如果两次运行的结果比较接近,或者说后者筛选性你能接受的话,那就可以这么做了。
<多列索引使用案例> 假定有下面显示的SELECT语句 SELECT * FROM tbl_name WHERE col1=val1; SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2; SELECT * FROM tbl_name WHERE col2=val2; SELECT * FROM tbl_name WHERE col2=val2 AND col3=val3; 如果 (col1,col2,col3)有一个索引,只有前2个查询使用索引 第3个和第4个查询确实包括索引的列,但(col2)和(col2,col3)不是 (col1,col2,col3)的最左边的前缀