MySQL Tutorial

Reference

MySQL 教程

Introduction

什么是数据库?

数据库(Database)是按照数据结构来组织, 存储和管理数据的仓库.

  • 我们也可以将数据存储在文件中, 但是在文件中读写数据速度相对较慢.
  • 所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

RDBMS(Relational Database Management System,关系数据库管理系统)特点:

  • 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。
  • 数据以表格的形式出现
  • 每列为记录名称所对应的数据域
  • 每行为各种记录名称
  • 许多的行和列组成一张表
  • 若干的表组成database

RDBMS Terminology

数据库: 数据库是一些关联表的集合。
数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
冗余:存储两倍数据,冗余可以使系统速度更快。
主键(PRIMARY KEY):主键是唯一的。一个数据表中只能包含一个主键。但主键可以包含多列
外键:外键用于关联两个表。
复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

安装, 管理

Linux/Unix

安装

MySQL 安装

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
2
/etc/init.d/mysqld stop
mysqladmin -u root -p shutdown

1
2
3
开启
/etc/init.d/mysqld start
mysqld_safe &

conf
指定错误日志路径等参数

Database

shell模式

  • 管理员初始化密码:mysqladmin -u root -p passwd
  • 登陆数据库
    • 进入全局模式:mysql -u user -p
      • host、user、password三者必须通过验证
    • 进入库模式:mysql -u user -p database
  • 管理数据库
    • 创建数据库: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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
create table table(column_name column_type(length) attribute extra_info),在attribute后使用,分隔多个column
- column_name
- column_type(length):length,定义最大值长
□ column_type
- attribute:可以设置多个,比如column设置为int,attribute可以设置unsigned auto_increment
null
not null
default value:设置一个缺省值,可以为null
◊ AUTO_INCREMENT:定义列为自增属性,因此不用填值
} 一般用于主键
□ auto_increment:定义列为自增属性
◊ 初始值:1
◊ 修改初始值
} 创建表:AUTO_INCERMENT = x
} alter:修改FIELD
check:检查值是否符合要求,MySQL无效

- extra_info:在最后一行加入
primary key(column_name):定义列为主键,可以定义多列为主键,逗号隔开
◊ 主键的值具有唯一性
◊ 主键的值不能为null
删除表

drop table table

修改表名

alter table old_table rename(to) new_table

复制表结构
  1. 获得表结构:show create table table \G
  2. 修改表名
  3. 创建表
复制表部分或全部数据

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