初识数据库

一、数据库管理软件的由来

1、程序所有的组件就不可能运行在一台机器上

"""
因为这台机器一旦挂掉则意味着整个软件的崩溃,并且程序的执行效率依赖于承载它的硬件,而一台机器机器的性能总归是有限的,受限于目前的硬件水平,就一台机器的性能垂直进行扩展是有极限的。

于是我们只能通过水平扩展来增强我们系统的整体性能,这就需要我们将程序的各个组件分布于多台机器去执行。
"""

2、数据安全问题

"""
根据1的描述,我们将程序的各个组件分布到各台机器,但需知各组件仍然是一个整体,言外之意,所有组件的数据还是要共享的。但每台机器上的组件都只能操作本机的文件,这就导致了数据必然不一致。

于是我们想到了将数据与应用程序分离:把文件存放于一台机器,然后将多台机器通过网络去访问这台机器上的文件(用socket实现),
即共享这台机器上的文件,共享则意味着竞争,会发生数据不安全,需要加锁处理。。。。
"""

3、并发

根据2的描述,我们必须写一个socket服务端来管理这台机器(数据库服务器)上的文件,然后写一个socket客户端,完成如下功能:

"""
1.远程连接(支持并发)
2.打开文件
3.读写(加锁)
4.关闭文件
"""

4、总结

"""
我们在编写任何程序之前,都需要事先写好基于网络操作一台主机上文件的程序(socket服务端与客户端程序),于是有人将此类程序写成一个专门的处理软件,
这就是mysql等数据库管理软件的由来,但mysql解决的不仅仅是数据共享的问题,还有查询效率,安全性等一系列问题,总之,把程序员从数据管理中解脱出来,专注于自己的程序逻辑的编写。
"""

二、数据库概述

1、什么是数据(Data)

"""
描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字、图片,图像、声音、语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机

在计算机中描述一个事物,就需要抽取这一事物的典型特征,组成一条记录,就相当于文件里的一行内容,如:
1 egon,male,18,1999,山东,计算机系,2017,oldboy

单纯的一条记录并没有任何意义,如果我们按逗号作为分隔,依次定义各个字段的意思,相当于定义表的标题

1 name,sex,age,birth,born_addr,major,entrance_time,school #字段
2 
egon,male,18,1999,山东,计算机系,2017,oldboy #记录

这样我们就可以了解egon,性别为男,年龄18岁,出生于1999年,出生地为山东,2017年考入老男孩计算机系
"""

2、什么是数据库(DataBase,简称DB)

"""
数据库即存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的

过去人们将数据存放在文件柜里,现在数据量庞大,已经不再适用

数据库是长期存放在计算机内、有组织、可共享的数据即可。

数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种 用户共享
"""

3、什么是数据库管理系统(DataBase Management System,简称DB)

"""
在了解了Data与DB的概念后,如何科学地组织和存储数据,如何高效获取和维护数据成了关键

这就用到了一个系统软件---数据库管理系统

如MySQL、Oracle、SQLite、Access、MS SQL Server

mysql主要用于大型门户,例如搜狗、新浪等,它主要的优势就是开放源代码,因为开放源代码这个数据库是免费的,他现在是甲骨文公司的产品。 
oracle主要用于银行、铁路、飞机场等。该数据库功能强大,软件费用高。也是甲骨文公司的产品。 sql server是微软公司的产品,主要应用于大中型企业,如联想、方正等。
"""

三、mysql介绍

1、sql是什么

"""
SQL 指结构化查询语言
SQL 使我们有能力访问数据库
SQL 是一种 ANSI 的标准计算机语言
"""

2、sql能做什么

"""
SQL 面向数据库执行查询
SQL 可从数据库取回数据
SQL 可在数据库中插入新的记录
SQL 可更新数据库中的数据
SQL 可从数据库删除记录
SQL 可创建新数据库
SQL 可在数据库中创建新表
SQL 可在数据库中创建存储过程
SQL 可在数据库中创建视图
SQL 可以设置表、存储过程和视图的权限
"""

3、mysql是什么

"""
mysql就是一个基于socket编写的C/S架构的软件

客户端软件
  mysql自带:如mysql命令,mysqldump命令等
  python模块:如pymysql
"""
"""
MySQL是一种开放源代码的关系型数据库管理系统。
1.MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。
2.MySQL使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。
3.MySQL是开放源代码的,任何人都可以下载并根据个性化的需要对其进行修改。
4.MySQL因为其速度、可靠性和适应性而备受关注,MySQL是管理内容最好的选择。
"""

4、数据库管理软件分类

"""
#分两大类:
  关系型:如sqllite,db2,oracle,access,sql server,MySQL,注意:sql语句通用
  
  非关系型:mongodb,redis,memcache

#可以简单的理解为:
    关系型数据库需要有表结构
    非关系型数据库是key-value存储的,没有表结构
"""

5、重要概念介绍

"""
库    ------>    文件夹
表    ------>    文件
记录  ------>    文件内一行行的数据
    name   password    hobby
    jason    123       学习
     egon    123       女教练
表头      表格的第一行字段
字段      name、password、hobby
"""

四、sql语句初识

"""
1、MySQL中的sql语句是以符号作为结束的标志

2、基本命令
    show databases;    查看所有的库名

3、连接服务端的命令可以缩写:
  mysql -uroot -p

4、当你输入的命令不对,又不想让服务端执行并返回报错信息,可以用\c取消
  错误命令 \c

5、客户端退出  退出命令加不加分号都可以
  quit
  exit

6、当你在连接服务端的时候,发现只输入mysql也能连接
  但是你不是管理员身份,而只是游客模式
"""

五、基本sql语句介绍

针对库的增删改查(文件夹)

"""
# 增
create database db1;
create database db2 charset='gbk';

# 查
show databases;  # 查所有
show create database db1;  # 查单个

# 改
alter database db2 charset='utf8';

# 删
drop database db2;
"""

针对表的增删改查(文件)

"""
在操作表(文件)的时候,需要指定所在的库(文件夹)

# 查看当前所在的库的名字
select database();
# 切换库
use db1; 

# 增
create table t1(id int,name char(4));

# 查
show tables;  # 查看当前库下面所有的表名
show create table t1;
describe t1;  # 支持简写  desc t1;


# 改
alter table t1 modify name char(16);

# 删
drop table t1;

create table db2.t1(id int);  # 也可以用绝对路径的形式操作不同的库
"""

针对数据的增删改查(一行行数据)

"""
一定要先有库    有表    最后才能操作数据

# 增
insert into t1 values(1,'egon');
insert into t1 values(1,'egon'),(2,'jason'),(3,'tank');

# 查  
select * from t1;  # 该命令当数据量特别大的时候不建议使用
select id,name from t1;  

# 改
update t1 set name='DSB' where id > 1;

# 删
delete from t1 where id > 1;
delete from t1 where name='egon';
# 将表所有的数据清空
delete from t1;
"""

六、存储引擎

"""
日常生活中文件格式有很多种,并且针对不同的文件格式会有不同存储方式和处理机制(txt,pdf,word,mp4...)
针对不同的数据应该有对应的不同的处理机制来存储。
存储引擎就是不同的处理机制

MySQl主要存储引擎
  * innodb  是MySQL5.5版本及之后默认的存储引擎
          存储数据更加的安全
  * myisam  是MySQl5.5版本之前默认的存储引擎
          速度要比innodb更快,但是我们更加注重的是数据的安全
  * memory  内存引擎(数据全部存放在内存中)断电数据丢失
  * blackhole  无论存什么,都立刻消失(黑洞)
"""
# 查看所有的存储引擎
show engines;

# 不同的存储引擎在存储表的时候,异同点:
create table t1(id int) engine=innodb;
create table t2(id int) engine=myisam;
create table t3(id int) engine=memory;
create table t4(id int) engine=blackhole;

# 存数据
insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);

 

七、创建表的完整语法

# 语法
create table 表名(
    字段名1 类型(宽度) 约束条件,
    字段名2 类型(宽度) 约束条件,
    字段名3 类型(宽度) 约束条件
);

# 注意:
1、在同一张表中字段名不能重复
2、宽度和约束条件时可选(可写可不写)而字段名和字段类型是必须的
     约束条件写的话,也支持写多个
     字段名1 类型(宽度) 约束条件1 约束条件2...
     create table t5(id);  # 报错
3、最后一行不能有逗号
     create table t6(
       id int,
       name cahr,
);   # 报错

补充

# 宽度
    一般情况下指的是对存储数据的限制
    create table t7(name char);  # 默认宽度是1
    insert into t7 values('jason');
   insert into t7 values(null);  # 关键字null
    针对不同的版本会出现不同的效果
        5.6版本默认没有开启严格模式,规定只能存一个字符,你给了多个字符,那么我会自动帮你截取
        5.7版本及以上或者开启了严格模式,那么规定只能存几个,就不能超,一旦超出范围立刻报错 Data too long fro ...

'''严格模式到底开不开呢?'''
MySQL5.7之后的版本默认都是开启严格模式的

使用数据库的准则:
    能尽量少的让数据干活就尽量少,不要给数据库增加额外的压力


# 约束条件 null    not null 不能插入null
  create table t8(id int,name char not null);


# 宽度的约束条件到底是什么关系
  宽度是限制数据的存储
  约束条件是在宽度的基础之上增加的额外的约束

八、严格模式

"""
如何查看严格模式
 show variables like "%mode";

模糊匹配/匹配
  关键字 like
    % 匹配任意多个字符
    _ 匹配任意单个字符

# 修改严格模式
  set session  # 只在当前窗口有效 
  set global   # 全局有效

  set global sql_mode = 'STRICT_TRANS_TABLES';

  修改完之后重新进入服务端即可
"""

 

posted @ 2021-06-09 22:51  Palpitate~  阅读(47)  评论(0编辑  收藏  举报