学习node的过程中,需要用到数据库提供数据,简要学习MySQL其基本操作。
数据库基础
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。
RDBMS
MySQL属于关系型数据库。关系型数据库管理系统(RDBMS)的主要特点在于:
- 数据以表格的形式出现
- 每行为各种记录名称
- 每列为记录名称所对应的数据域
- 许多的行和列组成一张表单
- 若干的表单组成database
RDBMS术语
- 数据库: 数据库是一些关联表的集合。.
- 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
- 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
- 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
- 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
- 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
- 外键:外键用于关联两个表。
- 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
- 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
- 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
MySQL数据类型
MySQL有三大类数据类型, 分别为数字、日期\时间、字符串, 这三大类中又更细致的划分了许多子类型:
- 数字类型
- 整数: tinyint、smallint、mediumint、int、bigint
- 浮点数: float、double、real、decimal
- 日期和时间: date、time、datetime、timestamp、year
- 字符串类型
- 字符串: char、varchar
- 文本: tinytext、text、mediumtext、longtext
- 二进制(可用来存储图片、音乐等): tinyblob、blob、mediumblob、longblob
具体见附录。
MySQL操作
基础管理
mysql -h 主机地址 -u 用户名 -p 用户密码;
:链接mysql数据库
1 | mysql -u root -p #链接本机mysql |
mysqladmin -u用户名 -p旧密码 password 新密码;
:修改密码grant select on 数据库.* to 用户名@登录主机 identified by \"密码\"
:增加新用户
创建数据库
create database 数据库名 [其他选项];
1 | create database test_db character set gbk; #便于在命令符下显示中文 |
查看数据库
show databases:列出 MySQL 数据库管理系统的数据库列表。
选择数据库
1 | mysql -D 所选择的数据库名 -h 主机名 -u 用户名 -p #登录时选择 |
创建数据库表
create table 表名称(列声明);
1 | create table students |
- id为列的名称。
- int为整数类型(取值范围为 -8388608到8388607)。
- unsigned设置无符号位(取值范围为 0到8388607)。
- not null不能为空必填项。auto_increment在插入数据时若该列为 NULL, MySQL将自动产生一个比现存值更大的唯一标识符值。在每张表中仅能有一个这样的值且所在列必须为索引列。
- primary key该列是表的主键, 本列的值必须唯一, MySQL将自动索引该列。
- char(8) 长度为8的字符串。
- tinyint取值范围为 -127到128的整数类型。
- null default “-“ 值为空时默认-
查看数据库表
describe 表名
:可查看已创建的表的详细信息。show tables
:显示指定数据库的所有表,使用该命令前需要使用 use 命令来选择要操作的数据库。
1 | show tables; |
show columns from 数据表
:显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。
1 | show columns from students; |
show index from 数据表
:显示数据表的详细索引信息,包括PRIMARY KEY(主键)。
1 | show index from students; |
show table status like [from db_name] [like 'pattern'] \G
:该命令将输出MySQL数据库管理系统的性能及统计信息。
1 | show table status from test_db; # 显示数据库 test_db 中所有表的信息 |
表格插入数据
insert [into] 表名 [(列名1, 列名2, 列名3, …)] values (值1, 值2, 值3, …);
1 | insert into students (name, sex, age) values("小红", "女", 12); |
查询表中数据
select 列名称 from 表名称 [查询条件];
1 | select name,age from students; #显示所有人的name,age信息 |
更新表中数据
update 表名称 set 列名称=新值 where 更新条件;
1 | update students set age=age+1; #所有人的年龄增加1 |
删除表中数据
delete from 表名称 where 删除条件;
1 | delete from students where id=3; #将id为3的人数据删除 |
添加表列
alter table 表名 add 列名 列数据类型 [after 插入位置];
1 | alter table students add address char(60); #在表的最后追加列 address |
修改表列
alter table 表名 change 列名称 列新名称 新数据类型;
1 | alter table students change tel telphone char(13) default "-"; |
删除表列
alter table 表名 drop 列名称;
1 | alter table students drop birthday; #删除brithday列 |
重命名数据表
alter table 表名 rename 新表名;
1 | alter table students rename children; |
删除整张数据库表
drop table 表名;
1 | drop table children; |
删除整个数据库
drop database 数据库名;
1 | drop database test_db; |
附录
整数类型 | 含义(有符号) |
---|---|
tinyint(m) | 1个字节 范围(-128~127) |
smallint(m) | 2个字节 范围(-32768~32767) |
mediumint(m) | 3个字节 范围(-8388608~8388607) |
int(m) | 4个字节 范围(-2147483648~2147483647) |
bigint(m) | 8个字节 范围(+-9.22*10的18次方) |
浮点类型 | 含义 |
---|---|
float(m,d) | 单精度浮点型 8位精度(4字节) m总个数,d小数位 |
double(m,d) | 双精度浮点型 16位精度(8字节) m总个数,d小数位 |
decimal(m,d) | 精确值(上述两种为近似值) m总个数,d小数位 |
字符串类型 | 含义 |
---|---|
char(n) | 固定长度,最多255个字符 |
varchar(n) | 可变长度,最多65535个字符 |
tinytext | 可变长度,最多255个字符 |
text | 可变长度,最多65535个字符 |
mediumtext | 可变长度,最多2的24次方-1个字符 |
longtext | 可变长度,最多2的32次方-1个字符 |
日期时间类型 | 含义 |
---|---|
date | 日期 ‘2008-12-2’ |
year | 日期 ‘2008’ |
time | 时间 ‘12:25:36’ |
datetime | 日期时间 ‘2008-12-2 22:06:44’ |
timestamp | 自动存储记录修改时间 |
关键字 | 含义 |
---|---|
NULL | 数据列可包含NULL值 |
NOT NULL | 数据列不允许包含NULL值 |
DEFAULT | 默认值 |
PRIMARY KEY | 主键 |
AUTO_INCREMENT | 自动递增,适用于整数类型 |
UNSIGNED | 无符号 |
CHARACTER SET name | 指定一个字符集 |