【web系列九】快速上手MySQL数据库

目录

数据库的概念、MySQL安装和数据迁移

数据库的概念

关系型数据库

非关系型数据库(NoSQL)

MySQL安装

可视化界面

数据迁移

常用功能

基本操作

查询数据库

选中数据库

 查看数据库中所有表

 查看表中内容

创建新的数据库

 创建表

 查看表结构

向表中插入一条数据

修改表中一行数据 

删除表中一行数据 

删除表

删除数据库

约束

主键约束

 自增约束

 唯一约束

非空约束

默认约束

 外键约束

数据库设计三大范式

第一范式

第二范式

 第三范式

数据类型

数值类型

日期和时间类型

字符串类型

数据库部署

创建用户

另一种远程访问的方式

Ubuntu系统下要注意

grant语句

语法说明

参考资料


数据库的概念、MySQL安装和数据迁移

数据库的概念

        数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

        数据库分为关系型数据库和非关系型数据库。

关系型数据库

        存储的格式可以直观地反映实体间的关系。关系型数据库和常见的表格比较相似,关系型数据库中表与表之间是有很多复杂的关联关系的。 常见的关系型数据库有MysqlSqlServer等。在轻量或者小型的应用中,使用不同的关系型数据库对系统的性能影响不大,但是在构建大型应用时,则需要根据应用的业务需求和性能需求,选择合适的关系型数据库。

非关系型数据库(NoSQL)

        指的是分布式的、非关系型的、不保证遵循ACID原则的数据存储系统。NoSQL数据库技术与CAP理论、一致性哈希算法有密切关系。所谓CAP理论,简单来说就是一个分布式系统不可能满足可用性、一致性与分区容错性这三个要求,一次性满足两种要求是该系统的上限。而一致性哈希算法则指的是NoSQL数据库在应用过程中,为满足工作需求而在通常情况下产生的一种数据算法,该算法能有效解决工作方面的诸多问题但也存在弊端,即工作完成质量会随着节点的变化而产生波动,当节点过多时,相关工作结果就无法那么准确。这一问题使整个系统的工作效率受到影响,导致整个数据库系统的数据乱码与出错率大大提高,甚至会出现数据节点的内容迁移,产生错误的代码信息。但尽管如此,NoSQL数据库技术还是具有非常明显的应用优势,如数据库结构相对简单,在大数据量下的读写性能好;能满足随时存储自定义数据格式需求,非常适用于大数据处理工作。

        NoSQL数据库适合追求速度和可扩展性、业务多变的应用场景。对于非结构化数据的处理更合适,如文章、评论,这些数据如全文搜索、机器学习通常只用于模糊处理,并不需要像结构化数据一样,进行精确查询,而且这类数据的数据规模往往是海量的,数据规模的增长往往也是不可能预期的,而NoSQL数据库的扩展能力几乎也是无限的,所以NoSQL数据库可以很好的满足这一类数据的存储。NoSQL数据库利用key-value可以大量的获取大量的非结构化数据,并且数据的获取效率很高,但用它查询结构化数据效果就比较差。

MySQL安装

MySQL :: Download MySQL Community Server

        我们下载MySQL Community Server就可以了。 

        觉得官网下载慢的,可以去一下网址下载

        下载mysql_installer_community-xxx.msi就可以了。

         安装过程可以参考以下教程

mysql安装教程【安装版】_超级小的大西瓜的博客-CSDN博客_mysql安装教程

可视化界面

        下载和安装可参考以下教程

【SQLyog破解版】SQLyog免费下载 v12.3.1 中文破解版(附注册码)-开心电玩 (kxdw.com)

数据迁移

        可以参考以下教程

MySQL数据库--几种数据迁移的方法详解都在这了!看完必懂,真牛皮_普通网友的博客-CSDN博客_mysql 数据库迁移

常用功能

基本操作

查询数据库

         查询一个数据库服务器中所有的数据库

show databases;

选中数据库

        只有选中数据库之后才能对他进行其他操作。

use xxx;

 查看数据库中所有表

show tables;

 查看表中内容

select * from xxx;

创建新的数据库

create database xxx;

 创建表

create table pet(
    name varchar(20),
    owner varchar(20),
    sex char(1)
);

 查看表结构

describe xxx;

向表中插入一条数据

insert into xxx values(
    'xxx',
    'xxx',
    'x'
);

修改表中一行数据 

update xxx set xxx='xxx' where xxx='xxx';

删除表中一行数据 

delete from xxx where xxx='xxx';

删除表

drop table xxx;

删除数据库

drop database test;

约束

主键约束

        通过主键约束的字段在表中是不会重复的,因此可以保证一行数据的唯一性。

1、创建一个有主键约束的表

create table pet(
    name varchar(20) primary key,
    owner varchar(20),
    sex char(1)
);

2、向user中插入元素 

         可以发现当主键重复或者为null时,都无法插入元素。

3、创建一个带有联合主键的表

create table pet(
    name varchar(20),
    owner varchar(20),
    sex char(1),
    primary key(name, owner)
);

 4、向user2中插入元素

         可以发现联合主键中的多个字段,至少有一个字段的值和其他主键不同,才能顺利插入,当然联合主键中的任何字段都不能为NULL。

5、创建表后添加主键

alter table xxx add primary key(xxx);

6、删除主键

alter table xxx drop primary key;

 7、修改主键或添加主键

alter table xxx modify xxx xxx primary key;

 自增约束

1、创建一个有自增约束的表

create table pet(
    name varchar(20) primary key auto_increment,
    owner varchar(20),
    sex char(1)
);

 2、向user3中插入数据

        可以发现即使插入数据时不输入由自增约束控制的字段的数值,该字段还是会自动生成,且数值递增。

3、删除一个数据后再插入

         可以发现即使删除了某条数据,其他数据的自增字段值不会改变,且新插入的元素不会填补被删除的元素。

 唯一约束

1、创建一个带有唯一约束的表

        以下三种都行。

create table user5(
    id int,
    name varchar(20),
    unique(name)
);
create table user5(
    id int,
    name varchar(20) unique
);
create table user5 (
    id int,
    name varchar(20)
);

alter table user5 add unique(name);

 2、向user5中添加数据

         带有唯一约束的字段无法重复。

3、删除唯一约束

alter table user5 drop index id;

非空约束

1、创建一个带有非空约束的表

create table user6(
    id int,
    name varchar(20) not null
);

2、向user6中插入数据

        可以发现插入的数据中带有非空约束的字段如果为null且没有默认值,则无法插入

默认约束

 1、创建一个带有默认约束的表

create table user7(
    id int,
    name varchar(20),
    age int default 10
);

2、向user7中插入数据

        若在插入数据的时候,带有默认约束的字段没有值,则会用默认值替代。

 外键约束

        涉及到两个表,父表和子表/主表和副表。

        可以通过主表中的字段数值来限制副表的数据插入。

 1、创建一对带有外键约束的表

create table classes(
    id int primary key,
    name varchar(20)
);

create table students(
    id int primary key,
    name varchar(20),
    class_id int,
    foreign key(class_id) references classes(id)
);

 2、向class和students中插入数据

        可以发现如果插入students的数据中字段class_id的数值部署于classes的id时,会插入失败。

数据库设计三大范式

第一范式

        数据表中所有字段都是不可分割的原子值。

        也就是说字段要拆分的尽量细,这样便于后面的处理,但是可以根据实际需求调整。

        比如一个字段是地址,则可以拆分成国、市、县、区、路、门牌号。

第二范式

        必须是满足第一范式的前提下,除主键或联合主键以外的字段要完全依赖主键或联合主键(不能只依赖联合主键的部分)。

        假设有一个订单表如下,这时,product_name部分依赖联合主键的product_id,customer_name也部分依赖联合主键的customer_id,这是不符合第二范式的。

create table myorder(
    product_id int,
    customer_id int,
    product_name varchar(20),
    customer_name varchar(20),
    primary key(product_id, customer_id)
);

         可以拆表处理,得到如下三个表,这三个表都是分别满足第二范式的。

create table myorder(
    order_id int primary key,
    product_id int,
    customer_id int
);

create table product(
    id int primary key,
    name varchar(20)
);

create table customer(
    id int primary key,
    name varchar(20)
);

 第三范式

        必须是满足第二范式的前提下,除主键外的其他字段间不能有依赖关系。

        比如以下表中customer_name和customer_id之间还有依赖,这就是不满足第三范式的。

create table myorder(
    order_id int primary key,
    product_id int,
    customer_id int,
    customer_name varchar(20)
);

数据类型

数值类型

        MySQL 支持所有标准 SQL 数值数据类型。

        下面的表显示了需要的每个整数类型的存储和范围。

类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 Bytes (-128,127) (0,255) 小整数值
SMALLINT 2 Bytes (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 Bytes (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 Bytes (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 Bytes (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
FLOAT 4 Bytes (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度
浮点数值
DOUBLE 8 Bytes (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度
浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

日期和时间类型

        表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

        每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

类型 大小
( bytes)
范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4

1970-01-01 00:00:00/2038

结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

YYYYMMDD HHMMSS 混合日期和时间值,时间戳

字符串类型

        字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。

类型 大小 用途
CHAR 0-255 bytes 定长字符串
VARCHAR 0-65535 bytes 变长字符串
TINYBLOB 0-255 bytes 不超过 255 个字符的二进制字符串
TINYTEXT 0-255 bytes 短文本字符串
BLOB 0-65 535 bytes 二进制形式的长文本数据
TEXT 0-65 535 bytes 长文本数据
MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据
LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295 bytes 极大文本数据

数据库部署

  一般多人开发的项目,需要共用数据库,这时通常会把数据库放在公共服务器上,并且允许用户使用ip访问。

创建用户

        首先要使用以下语句在数据表中创建一个用户名为name,密码为password,且ip为192.168.1.200的用户。

create user 'name'@'192.168.1.200' identified by 'password';

        使用grant语句赋予权限,想具体了解grant语句的话可以移步(3条消息) 【web系列九】快速上手MySQL数据库_Nicholson07的博客-CSDN博客

grant all privileges        // all privileges是赋予所有权限 
on *.*                      // .代表权限范围包括所有数据表
to 'name'@'192.168.1.200'   // 用户名称和ip
with grant option;          // 赋予该用于给予他人权限的权限

注意,旧版的MySQL还支持使用以下语句实现在创建用户的同时赋予权限,新版(具体是哪个版本开始的不清楚)必须要分开实现。

grant all privileges on *.* to 'name'@'192.168.1.200' identified by 'password' with grant option;

         这样,在mysql库中的user表中就可以看到我们添加的用户啦。

         这样的话,用户name就可以在192.168.1.200的电脑上使用password登录我们的数据库了。

另外,建议多人开发时,为了相互之间不影响,可以在同一个公共机上的同一个端口下创建多个内容相同,单名称不同的数据库,每个人使用自己的,这样在修改了表结构或表数据时不会影响别人。 

另一种远程访问的方式

        将对应用户的Host改为%,我们拿root用户举例。

        将host改为%后,root用户就可以在任意ip下访问我们的数据库了。 

Ubuntu系统下要注意

要实现远程访问还要开放ubuntu的端口

1)去修改配置文件,将bind-address = 127.0.0.1这行前面加一个#注释掉。

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

 2)重启mysql

service mysql restart

grant语句

grant
<权限类型>[(<列名>)][,<权限类型>[(<列名>)]]
on <对象><权限级别>
to <用户>

语法说明

 1、列名

        可选项,用于指定权限要授予给表中哪些具体的列

2、on

        用于指定权限授予的对象和级别

3、权限级别

        用于指定权限的级别

  • *:当前数据库中的所有表
  • *.*:所有数据库中的所有表
  • db_name.*:某个数据库中的所有表
  • db_name.tbl_name:某个数据库中的某个表
  • tbl_name:某个表
  • db_name.routine_name:某个数据库的某个存储过程或函数

4、权限类型

  • SELECT:可以使用SELECT语句
  • INSERT:可以使用INSERT语句
  • DELETE:可以使用DELETE语句
  • UPDATE:可以使用UPDATE语句
  • REFERENCES:可以创建指向特定的数据库中的表外键
  • CREATE:可以使用CREATE TABLE语句创建新表
  • ALTER:可以使用ALTER TABLE语句修改数据表
  • SHOW VIEW:可以查看已有视图的视图定义
  • CREATE ROUTINE:可以创建存储过程和存储函数
  • ALTER ROUTINE:可以更新和删除已有的存储过程和存储函数
  • INDEX:可以在数据表上定义和删除索引
  • DROP:可以删除所有表和视图
  • CREATE TEMPORARY TABLES:可以创建临时表
  • CREATE VIEW:可以创建新的视图
  • EXECUTE ROUTINE:可以调用存储过程和存储函数
  • LOCK TABLES:可以锁定已有数据表
  • ALL或ALL PRIVILEGES:以上所有权限

参考资料

数据库(电子化的文件柜)_百度百科 (baidu.com)

mysql安装教程【安装版】_超级小的大西瓜的博客-CSDN博客_mysql安装教程

【SQLyog破解版】SQLyog免费下载 v12.3.1 中文破解版(附注册码)-开心电玩 (kxdw.com)

MySQL数据库--几种数据迁移的方法详解都在这了!看完必懂,真牛皮_普通网友的博客-CSDN博客_mysql 数据库迁移

MySQL用户授权(GRANT)语法介绍和示例 - 百度文库 (baidu.com)

四行实现!!!Ubuntu下安装mysql服务并设置远程访问,允许指定ip或所有ip访问_sundw1998的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/Nichlson/article/details/125513551