MySQL Tutorial
Reference
Introduction
什么是数据库?
数据库(Database)是按照数据结构来组织, 存储和管理数据的仓库.
- 我们也可以将数据存储在文件中, 但是在文件中读写数据速度相对较慢.
- 所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
RDBMS(Relational Database Management System,关系数据库管理系统)特点:
- 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。
- 数据以表格的形式出现
- 每列为记录名称所对应的数据域
- 每行为各种记录名称
- 许多的行和列组成一张表
- 若干的表组成database
RDBMS Terminology
数据库: 数据库是一些关联表的集合。
数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
冗余:存储两倍数据,冗余可以使系统速度更快。
主键(PRIMARY KEY):主键是唯一的。一个数据表中只能包含一个主键。但主键可以包含多列
外键:外键用于关联两个表。
复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
安装, 管理
Linux/Unix
安装
MySQL组件
- MySQL:MySQL服务器。你需要该选项,除非你只想连接运行在另一台机器上的MySQL服务器。
- MySQL-client:MySQL 客户端程序,用于连接并操作Mysql服务器。
- MySQL-devel:库和包含文件,如果你想要编译其它MySQL客户端,例如Perl模块,则需要安装该RPM包。
- MySQL-shared:该软件包包含某些语言和应用程序需要动态装载的共享库(libmysqlclient.so*),使用MySQL。
MySQL-bench:MySQL数据库服务器的基准和性能测试工具。
验证安装
1 | mysqladmin --verion |
关闭
1 | /etc/init.d/mysqld stop |
1 | 开启 |
conf
指定错误日志路径等参数
Database
shell模式
- 管理员初始化密码:mysqladmin -u root -p passwd
- 登陆数据库
- 进入全局模式:mysql -u user -p
- host、user、password三者必须通过验证
- 进入库模式:mysql -u user -p database
- 进入全局模式:mysql -u user -p
- 管理数据库
- 创建数据库:mysqladmin -u root -p create database
- 删除数据库:mysqladmin -u root -p drop database
全局模式
- 查看
- 库汇总:show databases
- 库中所有表的信息:show table status from database
- 库中特定表的信息:show table status from database like ‘table%’
- 以列打印库中特定表的信息:show table status from database like ‘table%’\G
- 管理
- 创建数据看:create database database
- 进入数据库:use database
元数据
- 查询结果信息:数据库操作的影响次数
- 数据库和数据表信息:结构信息
- MySQL服务器信息:服务器当前状态、版本号等
命令 | 描述 |
---|---|
SELECT VERSION( ) | 服务器版本信息 |
SELECT DATABASE( ) | 当前数据库名 (或者返回空) |
SELECT USER( ) | 当前用户名 |
SHOW STATUS | 服务器状态 |
SHOW VARIABLES | 服务器配置变量 |
Table
库模式(use DATABASE)
查看
- 表汇总:show tables
- 表属性、主键信息等信息:show columns from table
- 表索引:show index from table
- 表结构:show create table table
管理
创建表
1 | create table table(column_name column_type(length) attribute extra_info),在attribute后使用,分隔多个column |
删除表
drop table table
修改表名
alter table old_table rename(to) new_table
复制表结构
- 获得表结构:show create table table \G
- 修改表名
- 创建表
复制表部分或全部数据
create table table select fields from table
复制表不重复的数据
create table table select fields from table group by
管理表 field
alter table table clause
- 添加:add column_name column_type(length) location
- 默认:添加到最后一行
- location
□ first
□ after column_name
- 修改
- 修改column_type:modify column_name column_type(length)
- 修改column_name:change old_column new_clomn column_type(length)
- 删除:drop column_name
索引
- 特点
- 索引可以提高MySQL的检索速度,但会降低表的更新速度
- 因为是提高索引速度,所以必须确保索引可以被where检索
- 索引会创建一个表,包含索引和主键,并指向实体表
- 类别
- 单列索引:一个索引包含一列,一个表可以拥有多个单列索引
- 组合索引:一个索引包含多列
- 管理(不如alter逻辑清晰)
- 添加索引
§ create (unique) index index on table(filed(length))
□ unique:唯一索引,索引值具有唯一性,允许null。如果是组合索引,则列值组合必须唯一
□ length:如果是char、varchar,length可以小于字段实际长度;如果是blob、text类型,必须指定length
§ 创建表时直接添加索引:index/unique index (field(length)) - 删除索引
§ drop index index on table - alter管理:alter table table clause
- 添加主键:add primary key(filed)
§ 索引值必须唯一,不允许null - 删除主键:drop primary key
- 添加索引:add unique/index index(filed(length))
§ 强行添加唯一索引(将删除重复行):alter ignore table table add unique index(filed(length)) - 添加全文索引:add index fulltext index(filed(length))
- 删除索引:drop index index
临时表:用于保存临时数据
- 当前连接关闭或其他连接数据库的程序断开时,临时表会自动销毁
- 创建:create temporary table table()
- 查看:无法通过show tables查看,只能通过select进行检索
- 删除:drop table table