目录
数据库的概念、MySQL安装和数据迁移
数据库的概念
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据库分为关系型数据库和非关系型数据库。
关系型数据库
存储的格式可以直观地反映实体间的关系。关系型数据库和常见的表格比较相似,关系型数据库中表与表之间是有很多复杂的关联关系的。 常见的关系型数据库有Mysql,SqlServer等。在轻量或者小型的应用中,使用不同的关系型数据库对系统的性能影响不大,但是在构建大型应用时,则需要根据应用的业务需求和性能需求,选择合适的关系型数据库。
非关系型数据库(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:以上所有权限
参考资料
mysql安装教程【安装版】_超级小的大西瓜的博客-CSDN博客_mysql安装教程
【SQLyog破解版】SQLyog免费下载 v12.3.1 中文破解版(附注册码)-开心电玩 (kxdw.com)
MySQL数据库–几种数据迁移的方法详解都在这了!看完必懂,真牛皮_普通网友的博客-CSDN博客_mysql 数据库迁移
MySQL用户授权(GRANT)语法介绍和示例 – 百度文库 (baidu.com)
四行实现!!!Ubuntu下安装mysql服务并设置远程访问,允许指定ip或所有ip访问_sundw1998的博客-CSDN博客
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/100781.html