MySQL数据库基础与实例
MySQL基础知识
MySQL是最受欢迎的开源关系数据库管理系统,有瑞典MySQL AB公司开发。2008年1月MySQL被美国的SUN公司收购,2009年4月SUN公司又被美国的甲骨文(Oracle)公司收购。
MySQL的特点
MySQL是一个单进程多线程、支持多用户、基于客户机/服务端(Client/Server, C/S)的关系数据库管理系统。与其他数据库管理系统(DBMS)相比,MySQL具有体积小、易于安装、运行速度快、功能齐全、成本低廉、开源、性能高效、跨平台支持、简单易用以及支持多用户等特点。
MySQL服务器的安装
启动与停止MySQL服务
方法一:“开始”->“运行”,输入“service.msc”
方法二:“我的电脑”->“管理”->“计算机管理”->“服务和应用程序”->“服务”
方法三:使用Windows操作系统的控制面板也可以找到“服务”窗口。
方法四:“开始”->“运行”->“输入cmd”->“net start mysql开启或net stop mysql”
连接MySQL服务器
1 | mysql -h 127.0.0.1 -P 3306 -u root -proot |
每条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
7character_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 | 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 | 使用MySQL命令“set default_storage_engine=MyISAM;" 可以“临时地”将MySQL“当前会话的”存储引擎设置为MySIAM。 |
修改my.ini配置文件中的[mysqld]选项组中的default-storage-engine的参数值,并重启服务。可以“永久性”修改。
创建数据库表
表是数据库中最为重要的数据库对象。创建表前,需要根据数据库涉及的结果确定表名、字段名及数据类型、约束等信息,另外,还要为每张表选择一个合适的存储引擎。1
2
3
4
5
6use 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 | 使用MySQL命令“show tables;"即可查看当前操作的数据库中所有的表。 |
表记录的管理
表记录的管理包括表记录的更新操作以及表记录的查询操作(select),其中,表记录的更新操作包括表记录的插入(insert)、修改(update)以及删除(delete)。1
2
3
4
5use 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的表 |