MySQL基础知识

MySQL是最受欢迎的开源关系数据库管理系统,有瑞典MySQL AB公司开发。2008年1月MySQL被美国的SUN公司收购,2009年4月SUN公司又被美国的甲骨文(Oracle)公司收购。

MySQL的特点

MySQL是一个单进程多线程、支持多用户、基于客户机/服务端(Client/Server, C/S)的关系数据库管理系统。与其他数据库管理系统(DBMS)相比,MySQL具有体积小、易于安装、运行速度快、功能齐全、成本低廉、开源、性能高效、跨平台支持、简单易用以及支持多用户等特点。

MySQL服务器的安装

mysql安装教程

启动与停止MySQL服务

方法一:“开始”->“运行”,输入“service.msc”
方法二:“我的电脑”->“管理”->“计算机管理”->“服务和应用程序”->“服务”
方法三:使用Windows操作系统的控制面板也可以找到“服务”窗口。
方法四:“开始”->“运行”->“输入cmd”->“net start mysql开启或net stop mysql”

连接MySQL服务器

1
2
3
4
5
6
7
mysql -h 127.0.0.1 -P 3306 -u root -proot 
mysql -h 127.0.0.1 -u root -p

-h : host MySQL服务器主机名或者IP地址
-P : Port MySQL服务的端口号,如果是默认端口3306,则 -P 参数可以省略
-u : user MySQL账号名
-p : pwd MySQL账户名对应的密码

每条MySQL命令或者SQL语句应该以“;”或者“\g”结束
键入“help;”或者“\h”命令,即可查看帮助信息。

字符集及字符序

字符(character)是人类语言最小的表义符号,给定一系列字符,并对每个字符赋予一个数值,用数值来代表对应的字符,这个数值就是字符的编码(character encoding),给定一系列字符并赋予对应的编码后,所有这些“字符和编码对”组成的集合就是字符集(character set)。
字符序(collation)是指在统一字符之内的比较规则。一个字符集可以包含多种字符序,每个字符集有一个默认的字符序(default collation),每一个字符唯一对应一种字符。MySQL字符序命名规则是:以字符序对应的字符集名称开头,以国家名居中(或以general居中),以ci、cs或bin结尾。以ci结尾的字符序表示大小写不敏感,以cs结尾的字符序表示大小写敏感。

MySQL字符集与字符序

MySQL为了节省存储空间,在默认情况下,一个gbk英文字符通常仅占用一个字节(8位)的存储空间,一个utf8英文字符仅占用一个字节(8位)的存储空间。
MySQL客户机成功连接MySQL服务器后,使用MySQL命令“show character set;”即可查看当前MySQL服务实例支持的字符集、字符集默认的字符序以及字符集占用的最大字节长度等信息。

使用MySQL命令“show variables like ‘character%’;”即可查看当前MySQL会话使用的字符集。

1
2
3
4
5
6
7
character_set_client:MySQL客户机的字符集
character_set_connection:数据通信链路的字符集,当MySQL客户机向服务器发送请求时,请求数据以该字符集进行编码。
character_set_database:数据库字符集。
character_set_filesystem:MySQL服务器文件系统的字符集,该值是固定的binary.
character_set_result:结果集的字符集,MySQL服务器向MySQL客户机返回执行结果时,执行结果以该字符集进行编码。
character_set_server:MySQL服务实例字符集。
character_set_system:元数据(字段名、表名、数据库名等)的字符集。

MySQL字符集的设置

方法:修改my.ini配置文件,可修改MySQL默认的字符集。

创建数据库

1
使用SQL语句“create database database_name;”

创建数据库后,MySQL服务实例自动在 ·\·\date\ 目录创建“database_name”目录及相关数据库文件(如db.opt)
db.opt文件的主要功能是记录当前数据库的默认字符集及字符序等信息。

查看数据库

1
使用MySQL命令“show datadases;"

1
2
3
4
information_schema:用于收集MySQL服务器的性能参数,确保了数据安全。
performance_schema:用于收集MySQL服务器的性能参数,以便数据库管理员了解产生性能瓶颈的原因。
information_schema系统数据库定义了所有数据库对象的元数据信息。例如所有数据库、表、字段、索引、约束、权限、存储引擎、字符集和触发器等信息都存储在information_schema数据库中。
系统数据库由MySQL服务实例进程自动维护,普通用户建议不要修改系统数据库信息。

显示数据库结构

1
使用MySQL命令“show create database database_name;"

可以查看名database_name数据库的结构。

选择当前操作的数据库

1
使用SQL语句“use database_name;"

删除数据库

1
使用MySQL命令“drop database database_name;"

删除数据库后,MySQL服务实例会自动删除数据库目录及该数据库目录中的所有文件,数据库一旦删除,保存在该数据库中的数据将全部丢失。

MyISAM和InnoDB存储引擎

MySQL提供了插件式(pluggable)的存储引擎,存储引擎是基于表的。同一数据库,不同的表,存储引擎可以不同。甚至,同一个数据库表在不同的场合可以应用不同的存储引擎。目前,MySQL的存储引擎至少10种,

1
使用MySQL命令“show engines;”

即可查看MySQL服务实例支持的存储引擎。
MySQL常用的存储引擎有InnoDB存储引擎以及MyISAM存储引擎。

InnoDB存储引擎

InnoDB存储引擎是事务(transaction)安全的,并且支持外键(foreign key)。如果某张表主要提供OLTP支持,需要执行大量的增、删、该操作(即insert、delete、update语句),处于事务安全方面的考虑,InnoDB存储引擎是更好的选择。

MyISAM存储引擎

如果某张表主要提供OLAP支持,建议用MyISAM存储引擎。MyISAM具有检查和修复表的大多数工具。MyISAM表可以被压缩,而且最早支持全文索引,但MyISAM表不是事务安全的,也不支持外键。如果某表需要执行大量的select语句,出狱性能方面的考虑,MyISAM存储引擎是更好的选择。

设置默认的存储引擎

1
2
使用MySQL命令“set default_storage_engine=MyISAM;" 可以“临时地”将MySQL“当前会话的”存储引擎设置为MySIAM。
使用MySQL命令“show engines;”查看当前引擎

修改my.ini配置文件中的[mysqld]选项组中的default-storage-engine的参数值,并重启服务。可以“永久性”修改。

创建数据库表

表是数据库中最为重要的数据库对象。创建表前,需要根据数据库涉及的结果确定表名、字段名及数据类型、约束等信息,另外,还要为每张表选择一个合适的存储引擎。

1
2
3
4
5
6
use choose;
set default_storage_engine=InnoDB;
create table my_table(
today datetiome,
name char(20)
);

对于InnoDB存储引擎的表而言,MySQL服务实例会在数据库目录自动创建一个名为表名、后缀名为frm的表结构定义文件my_table.frm。
对于MyISAM,MySQL服务实例除了自动创建frm表结构文件外,还会自动创建一个文件名为表名、后缀名为MYD的数据文件以及文件名为表名、后缀名为MYI的索引文件。

显示表结构

1
2
3
使用MySQL命令“show tables;"即可查看当前操作的数据库中所有的表。
使用MySQL命令“describe table_name;"即可查看表名为table_name的表结构(describe也可以简写为desc)
使用MySQL命令“show create table table_name;"查看名为table_name表的详细信息。

表记录的管理

表记录的管理包括表记录的更新操作以及表记录的查询操作(select),其中,表记录的更新操作包括表记录的插入(insert)、修改(update)以及删除(delete)。

1
2
3
4
5
use choose;
insert into my_table values(now(),'a');
insert into my_table values(now(),'a');
insert into my_table values(now(),NULL);
insert into my_table values(now(),'');

now()函数返回MySQL服务器的当前日期以及时间。

1
使用MySQL命令“delect*from tables_name”负责查询table_name表中的所有记录。

NULL与空字符串“‘’”是两个不同的概念。
NULL与整数零以及空格字符“‘ ’”的概念也不同。

MyISAM表的备份只需将整个数据库目录复制一份即可。
InnoDB表的备份不仅需要复制整个数据库目录,还需要复制ibdata1表空间文件,以及重做日志文件ib_lagfile1。

InnoDB 表空间

InnoDB表空间分为共享表空间与独享表空间。

共享表空间

MySQL服务实例承载的所有数据库的所有InnoDB表的数据信息、索引信息、各种元数据信息以及事务的回滚(UNDO)信息,全部存放在共享空间文件中。

独享表空间

如果将全局变量innodb_file_per_table的值设置为ON,那么之后创建InnoDB存储引擎的新表时,这些表的数据信息、索引信息将保存到独享表空间中。

删除表

1
使用SQL语句“drop table table_name;"即可删除名为table_name的表