MySQL

MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

RDBMS 术语

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

安装

MySQL分为服务端和客户端,下面以Ubuntu安装为例子 #其他系统建议搜索安装方法

服务端
apt-get install mysql-server    # 安装过程中可能需要设置mysql初始密码两次

客户端
apt-get install mysql-client

基本操作

- 连接数据库
mysql -uroot -p初始密码

- 退出数据库
exit or quit or ctrl+d

- 显示版本
select version();

- 显示时间
select now();

- 创建数据库
create database <数据库名> charset = utf8;

- 查看已创建的数据库
show create database <数据库名>;

- 删除数据库
drop database <数据库名>;

- 使用数据库
use <数据库名>;

- 查看当前使用数据库
select database();

新建用户和密码

- 创建一用户,用户名是test,密码是123456,本地主机名是localhost
mysql> use mysql;
mysql> CREATE USER 'test'@'localhost' IDENTIFIED BY '123456';

- 指定IP地址登录[192.168.2.144]
mysql> use mysql;
mysql> CREATE USER 'test'@'192.168.2.144' IDENTIFIED BY '123456';

- 任何IP都可以登录
mysql> use mysql;
mysql> CREATE USER 'test'@'%' IDENTIFIED BY '123456';

- 修改root为任何IP都可以登录
mysql> use mysql;
mysql> update user set host = '%' where user = 'root';

- 不重启MySQL服务生效
mysql> flush privileges;

删除用户

mysql> drop user 'test'@'localhost';

修改用户

rename user 'test'@'localhost' to 'gg'@'192.168.2.155';

修改密码

set password for 'gg'@'192.168.2.155'=Password('123456');

用户授权

- 查看 gg用户权限
show grants for 'gg'@'192.168.2.155';

- 授权 gg用户仅对db1数据库中所有表有查询的权限
grant select on db1.* to "gg"@'192.168.2.155';

- 授权 gg用户对db1数据库中t1表有查询、插入和更新的权限
grant select ,insert,update on db1.t1 to "gg"@'192.168.2.155';

- 授权 gg用户对db1数据库中t2表有任意权限
grant all privileges on db1.t2 to "gg"@'192.168.2.155';

- 授权 gg用户对db1数据库中的所有表执行任意权限
grant all privileges on db1.* to "gg"@'192.168.2.155';

- 授权 gg用户对所有数据库中所有表有任意权限
grant all privileges on *.* to "gg"@'192.168.2.155';

取消权限

- 取消 gg用户对db1的t1文件的任意操作
revoke all on db1.t1 from 'gg'@"192.168.2.155";

- 取消 gg用户对数据库db1所有表的任意权限
revoke all on db1.* from 'gg'@"192.168.2.155";

MySQL 数据类型

MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。

常用数据类型

- 整数 : [int][bit]
int支持-2147483648~2147483647
如果是unsigned,为 0~4294967295的数
如果是signed,为 -2147483648~2147483647

- 小数 : [decimal]
decimal表示浮点数,如decimal(5,2)表示共存5位数,小数占2位

- 字符串 : [varchar][char][text]
char表示固定长度的字符串,如char(3),如果填充'ab'时会补一个空格为'ab ' 在创建时指定,否则MySQL假定为char(1)
varchar表示可变长度字符串,如varchar(3),填充'ab'时就会储存'ab'
text表示储存长文本数据,当字符串大于4000时推荐使用

- 日期时间 : [date][time][datetime]
date表示1000-01-01~9999-12-31的日期,格式为 YYYY-MM-DD
time格式为 HH:MM:SS
datetime为date和time的组合

- 枚举类型 : [enum]
接受最多 64K 个串组成的一个预定义集合的某个串

约束

  • 主键:primary key :物理上存储的顺序
  • 非空:not null
  • 唯一:unique:此字段的值不能重复
  • 默认:default
  • 外键:foreign key 外健是指存储一个表主键值的字段 能起到一定的约束作用 但是不是外键越多越好 会降低查询效率