MySQL简要

学习node的过程中,需要用到数据库提供数据,简要学习MySQL其基本操作。

数据库基础

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。

RDBMS

MySQL属于关系型数据库。关系型数据库管理系统(RDBMS)的主要特点在于:

  • 数据以表格的形式出现
  • 每行为各种记录名称
  • 每列为记录名称所对应的数据域
  • 许多的行和列组成一张表单
  • 若干的表单组成database

RDBMS术语

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

MySQL数据类型

MySQL有三大类数据类型, 分别为数字、日期\时间、字符串, 这三大类中又更细致的划分了许多子类型:

  • 数字类型
    1. 整数: tinyint、smallint、mediumint、int、bigint
    2. 浮点数: float、double、real、decimal
  • 日期和时间: date、time、datetime、timestamp、year
  • 字符串类型
    1. 字符串: char、varchar
    2. 文本: tinytext、text、mediumtext、longtext
    3. 二进制(可用来存储图片、音乐等): tinyblob、blob、mediumblob、longblob

具体见附录。

MySQL操作

基础管理

  • mysql -h 主机地址 -u 用户名 -p 用户密码;:链接mysql数据库
1
2
mysql -u root -p #链接本机mysql
mysql -h 110.110.110.110 -u root -p abcd123 #链接远程主机上的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
2
mysql -D 所选择的数据库名 -h 主机名 -u 用户名 -p  #登录时选择
use 所选择的数据库名 #登录后选择

创建数据库表

create table 表名称(列声明);

1
2
3
4
5
6
7
8
create table students
(
id int unsigned not null auto_increment primary key,
name char(8) not null,
sex char(4) not null,
age tinyint unsigned not null,
tel char(13) null default "-"
);
  • 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
2
3
4
show table status from test_db;   # 显示数据库 test_db 中所有表的信息

show table status from test_db like 'test%'; # 表名以test_db开头的表的信息
show table status from test_db like 'test%'\G; # 加上 \G,查询结果按列打印

表格插入数据

insert [into] 表名 [(列名1, 列名2, 列名3, …)] values (值1, 值2, 值3, …);

1
insert into students (name, sex, age) values("小红", "女", 12);

查询表中数据

select 列名称 from 表名称 [查询条件];

1
2
3
4
select name,age from students;                 #显示所有人的name,age信息
select * from students where sex="女"; #性别是女的所有人信息
select * from students where name like "%小%"; #名字中含有小的所有人信息
select * from students where id>5 and age>10; #id小于5且年龄大于10的所有人信息

更新表中数据

update 表名称 set 列名称=新值 where 更新条件;

1
2
update students set age=age+1;                #所有人的年龄增加1
update students set tel=default where id=5; #将id为5的手机号改为默认的"-"

删除表中数据

delete from 表名称 where 删除条件;

1
delete from students where id=3;     #将id为3的人数据删除

添加表列

alter table 表名 add 列名 列数据类型 [after 插入位置];

1
2
alter table students add address char(60);    #在表的最后追加列 address
alter table students add birthday date after age; #在名为age的列后插入列 birthday

修改表列

alter table 表名 change 列名称 列新名称 新数据类型;

1
2
alter table students change tel telphone char(13) default "-";
#将表 tel 列改名为 telphone

删除表列

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 指定一个字符集
------本文结束 感谢阅读------