MySQL客户端连接成功后,可以show [ session | global ] 命令可以提供服务器状态信息,也可以在操作系统上使 用mysqladmin extended-status命令获得这些消息,session表示当前连接,而global表示数据库上次启动至今的 统计结果
通过慢查询日志定位那些执行效率较低的SQL语句,用--log-slow-queries[=filename]选项启动,mysqld写一个包含 所有执行时间超过long_query_time秒的SQL日志文件。
- 简单:使用视图的用户完全不需要关心后面对应的表的结构,关联条件和筛选条件,对用户来说已经是过滤好的符合条件的结果集。
- 安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行或某个列,但是通过视图就可以实现。
- 数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。
- 创建视图:
create or replace view view_name as
->select 列名1,列名2,列名3
->from 表名1,表名2
->where 从句条件
注意:视图的定义有用一些限制,例如,在FROM关键字后面不能包含子查询。 - 删除视图:
用户可以一次删除一个或者多个视图,前提是必须有该视图的DROP权限。
drop view [ if exists ] view_name [,view_name] - 查看视图:
show tables MySQL 5.1版本开始可以使用该命令查询表和视图。
show table status [ from db_name ] [ like pattern ] 不仅可以显示表的信息,也可显示视图的信息。
show create view view_name \G 查看视图的定义。
select * from views where table_name = 'view_name' \G 通过查看information_schema.views也可以查看视图的相关信息。
| Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。 可能很多人又有疑问了,既然 Hash 索引的效率要比 B-Tree 高很多,为什么大家不都用 Hash 索引而还要使用 B-Tree 索引呢?任何事物都是有两面性的,Hash 索引也一样,虽然 Hash 索引效率高,但是 Hash 索引本身由于其特殊性也带来了很多限制和弊端,主要有以下这些。 (1)Hash 索引仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询。 由于 Hash 索引比较的是进行 Hash 运算之后的 Hash 值,所以它只能用于等值的过滤,不能用于基于范围的过滤,因为经过相应的 Hash 算法处理之后的 Hash 值的大小关系,并不能保证和Hash运算前完全一样。 (2)Hash 索引无法被用来避免数据的排序操作。 由于 Hash 索引中存放的是经过 Hash 计算之后的 Hash 值,而且Hash值的大小关系并不一定和 Hash 运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算; (3)Hash 索引不能利用部分索引键查询。 对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用。 (4)Hash 索引在任何时候都不能避免表扫描。 前面已经知道,Hash 索引是将索引键通过 Hash 运算之后,将 Hash运算结果的 Hash 值和所对应的行指针信息存放于一个 Hash 表中,由于不同索引键存在相同 Hash 值,所以即使取满足某个 Hash 键值的数据的记录条数,也无法从 Hash 索引中直接完成查询,还是要通过访问表中的实际数据进行相应的比较,并得到相应的结果。 (5)Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高。 对于选择性比较低的索引键,如果创建 Hash 索引,那么将会存在大量记录指针信息存于同一个 Hash 值相关联。这样要定位某一条记录时就会非常麻烦,会浪费多次表数据的访问,而造成整体性能低下。 |
在ubuntu安装Mysql Server比较简单,一条命令就可以搞定,如下:
sudo apt-get install mysql-server
但是用apt-get安装mysql不能设置默认字符集,可能是我不明白怎么弄,安装完默认字符集是latin1,可以登录mysql后用status命令查看,显示内容如下:
root@ubuntu-vm:/home/kuuyee# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.0.51a-3ubuntu5.4 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> status
--------------
mysql Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2
Connection id: 4
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.0.51a-3ubuntu5.4 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 16 hours 33 min 45 sec
Threads: 1 Questions: 10 Slow queries: 0 Opens: 12 Flush tables: 1 Open tables: 6 Queries per second avg: 0.000
--------------
解决办法就是更改/etc/mysql/my.cnf文件,在[mysqld]和[mysql]下添加如下内容:
[mysqld]
default-character-set=utf8
default-storage-engine=INNODB
[mysql]
default-character-set=utf8
然后重启mysql server即可,命令如下:
sudo /etc/init.d/mysql restart
然后再查看一下status,呵呵!字符集变为utf-8了!
- 浮点数存在误差问题
- 对货币等对精确度敏感的数据,应该使用定点数表示
- 在编程中,如果用到浮点数,要特别注意误差问题,并尽量避免作浮点数比较
- 要主要浮点数中一些特数值的处理。
● 安全存储合适的数据
●快速检索合适的数据
●支持多个并行的用户会话
这些任务可以合称为 ACID 测试;ACID 是 Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)和 Durability(持久性)的缩略词。
原子性 指数据库操作可以组合到一起,当作单个单元处理。
一致性 保证此单个单元(或事务)中的所有操作要么都成功执行,要么都不执行。换句话说,数据库不能处于未完成状态。要了解这些特征为何如此重要,可考虑这样一个 银行事务:即钱从储蓄帐户转到支票帐户。如果在将钱从储蓄帐户减去之后、加到支票帐户之前,转帐处理失败,那么您就会变穷,而银行将会有一个愤怒的(前) 客户!原子性使得这两个操作 —— 从储蓄帐户减钱和向支票帐户加钱 —— 被当作单个事务进行处理。一致性保证事务中的这两个操作同时成功或同时失败。这样,您的钱就不会丢失了。
隔离性 指独立的数据库事务集合以不相互冲突的方式执行。仍使用这个银行类比,考虑两个客户同时在帐户之间转移资金。数据库必须分别跟踪两个转帐;否则,资金可能进入错误的帐户,而银行可能得多两个愤怒的(前)客户。
持久性 保证数据库是安全的,不会异常终止。当电源断电时,如果电视或计算机不工作,这可能是小麻烦,但同样的事情对于数据库来说就不一样了。如果银行计算机在转 移资金时掉电,导致交易丢失,您就不会是个快乐的客户了。持久性保证如果数据库在资金转移期间异常终止,则当数据库重新启动时,它将能够恢复交易并继续正 常的操作。
ALTER TABLE table_name CHANGE [COLUMN] old_col_name column_definitions
ALTER TABLE table_name DROP [COLUMN] column_name
show status;
show innodb status;
mysqlreport --第三方插件;
十一、解释查询
explain select * from tableA where field1= 'a';
十二、添加索引
alter table TableA add key name(name);
alter table TableA drop key name(name);
alter table TableA add com_key(field1,field2,field3);
INFORMATION_SCHEMA提供了访问数据库元数据的方式。
元数据是关于数据的数据,例如数据库名或表名、列的数据类型或访问权限等。有时,用于表述该信息的其他术语包括“数据字典”和“系统目录”。
下面举几个例子来说明用法,详细用法请参考手册。
1、查看数据库服务器上的数据库

- SELECT SCHEMA_NAME AS 'database'
- FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 0, 30
2、查看某个数据库里的数据表

- SELECT table_name
- FROM INFORMATION_SCHEMA.TABLES
- WHERE table_schema = 'test' LIMIT 0, 30
3、查看某个数据表里的字段

- SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
- FROM INFORMATION_SCHEMA.COLUMNS
- WHERE table_name = 'entries' AND table_schema = 'test' LIMIT 0, 30
4、查看某个表的索引信息

- SELECT *
- FROM INFORMATION_SCHEMA.STATISTICS
- WHERE table_name = 'authors' AND table_schema = 'test' LIMIT 0, 30
5、查看某个数据库里数据和索引的大小(M)

- SELECT SUM( DATA_LENGTH ) /1024 /1024 AS DATA_SIZE, SUM( INDEX_LENGTH ) /1024 /1024 AS INDEX_SIZE
- FROM INFORMATION_SCHEMA.TABLES
- WHERE table_schema = 'test'
MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。BLOB类型实际是个类型系列(TinyBlob、Blob、MediumBlob、LongBlob),除了在存储的最大信息量上不同外,他们是等同的。
MySQL的四种BLOB类型
类型 大小(单位:字节)
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G
实际使用中根据需要存入的数据大小定义不同的BLOB类型。
需要注意的是:如果你存储的文件过大,数据库的性能会下降很多。
--表stu
id name
1, Jack
2, Tom
3, Kity
4, nono
--表exam
id grade
1, 56
2, 76
11, 89
内连接 (显示两表id匹配的)
select stu.id,exam.id,stu.name, exam.grade from stu inner join exam on stu.id=exam.id
--------------------------------
1 1 Jack 56
2 2 Tom 76
左连接(显示join 左边的表的所有数据,exam只有两条记录,所以stu.id,grade 都用NULL 显示)
select stu.id,exam.id,stu.name, exam.grade from stu left join exam on stu.id=exam.id
1 1 Jack 56
2 2 Tom 76
3 NULL Kity NULL
4 NULL nono NULL
右连接(与作连接相反,显示join右边表的所有数据)
select stu.id,exam.id,stu.name, exam.grade from stu right join exam on stu.id=exam.id
1 1 Jack 56
2 2 Tom 76
NULL 11 NULL 89
总结来说:
内连接取两个表的交集,外连接分左和右,左连接取左边的全部,右连接取右边的全部。
内连接:进行连接的两个表对应的相匹配的字段完全相同的连接。
左连接:LEFT OUTER JOIN, 两个表左连接时会返回左边表中的所有行和右边表中与之相匹配的列值,如果没有则用空值代替。
右连接:RIGHT OUTER JOIN,两个表进行右连接时会返回右边表中的所有的行和左边表中与之相匹配的列值没有相匹配的用控制代替。
浙公网安备 33010602011771号