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 外健是指存储一个表主键值的字段 能起到一定的约束作用 但是不是外键越多越好 会降低查询效率