初识数据库
1、数据库服务器:运行数据库管理软件的计算机;
2、数据库管理软件:管理数据库(mysql、oracle、db2、sqlserver);
3、库:文件夹,即存放数据的仓库,只不过这个仓库是在计算机存储设备上;
4、表:文件用来存放多行内容/多条记录;
5、记录:事物一系列典型特征;
6、数据:描述事物特征的符号;可以使文字、图片、图像、声音、语言等;
数据库的优势:
1.程序稳定性 :这样任意一台服务所在的机器崩溃了都不会影响数据和另外的服务。
2.数据一致性 :所有的数据都存储在一起,所有的程序操作的数据都是统一的,就不会出现数据不一致的现象
3.并发 :数据库可以良好的支持并发,所有的程序操作数据库都是通过网络,而数据库本身支持并发的网络操作,不需要我们自己写socket
4.效率 :使用数据库对数据进行增删改查的效率要高出我们自己处理文件很多;
管理数据的工具:
关系型:关系型数据库需要有表结构,如sqllite,db2,oracle,access,sql server,MySQL,注意:sql语句通用;
非关系型:非关系型数据库是key-value存储的,没有表结构,mongodb,redis,memcache;
mysql
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
sql语句
SQL : 结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;
SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型:
1、DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
2、DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
3、DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
1、操作文件夹(库) 增:create database db1 charset utf8; 查:show databases; 改:alter database db1 charset latin1; 删除: drop database db1; 2、操作文件(表) 增:create table t1(id int,name char); 查:show tables; 改:alter table t1 modify name char(3); alter table t1 change name name1 char(2); 删:drop table t1; 3. 操作文件中的内容(记录) 增:insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3'); 查:select * from t1; 改:update t1 set name='sb' where id=2; 删:delete from t1 where id=1; 清空表: delete from t1; #如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。 truncate table t1;数据量大,删除速度比上一条快,且直接从零开始, *auto_increment 表示:自增 *primary key 表示:约束(不能重复且不能为空);加速查找
搜索引擎
MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。
存储引擎:存储数据的方式;
数据都是存储在硬盘上,也就是说数据持久化存储:一张表 数据 表结构 索引(查询的时候使用的一个目录结构);
数据和索引在一起2文件(InnoDB存储引擎):数据索引一个文件、表结构一个文件
支持事物:为了保证数据的完整性,将多个操作变成原子性操作(保持数据安全);
支持行级锁:修改的行少的时候使用(修改数据频繁操作);
支持表级锁:批量修改多行的时候使用(对于大量数据的同时修改);
支持外键:约束两张表中的关联字段不能随意添加/删除(降低数据增删改的出错率);
数据和索引不存储在一起3个文件(MyISAM存储引擎):数据、索引、表结构
数据存储在内存中,也就是说数据断电消失1个文件(MEMORY存储引擎):表结构;
mysql支持哪些存储引擎?
mysql5.6支持的存储引擎包括InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、FEDERATED、MRG_MYISAM、ARCHIVE、PERFORMANCE_SCHEMA。其中NDB和InnoDB提供事务安全表,其他存储引擎都是非事务安全表。
常用的搜索引擎
InnoDB 用于事务处理应用程序,支持事务、支持外键和行级锁。
如果应用对事物的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包括很多更新和删除操作,那么InnoDB存储引擎是比较合适的。InnoDB除了有效的降低由删除和更新导致的锁定,还可以确保事务的完整提交和回滚,对于类似计费系统或者财务系统等对数据准确要求性比较高的系统都是合适的选择。
MyISAM 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,那么可以选择这个存储引擎。
Memory 将所有的数据保存在内存中,在需要快速定位记录和其他类似数据的环境下,可以提供极快的访问。Memory的缺陷是对表的大小有限制,虽然数据库因为异常终止的话数据可以正常恢复,但是一旦数据库关闭,存储在内存中的数据都会丢失。
存储引擎相关sql语句
#查询当前的默认的存储引擎;
show variables like "default_storage_engine";
#查询当前数据库支持的存储引擎
show engines
结果2:
指定存储引擎创建表:
#在建表时指定 create table ai (id bigint(12),name varchar(200)) engine = INNODB #也可以使用alter table语句,修改一个已经存在的表的存储引擎。 alter table ai engine = innodb; #my.ini文件 [mysqld] default-storage-engine=INNODB
mysql的工作流程
MySQL架构总共四层,在上图中以虚线作为划分。
首先,最上层的服务并不是MySQL独有的,大多数给予网络的客户端/服务器的工具或者服务都有类似的架构。比如:连接处理、授权认证、安全等。
第二层的架构包括大多数的MySQL的核心服务。包括:查询解析、分析、优化、缓存以及所有的内置函数(例如:日期、时间、数学和加密函数)。同时,所有的跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。
第三层包含了存储引擎。存储引擎负责MySQL中数据的存储和提取。服务器通过API和存储引擎进行通信。这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明化。存储引擎API包含十几个底层函数,用于执行“开始一个事务”等操作。但存储引擎一般不会去解析SQL(InnoDB会解析外键定义,因为其本身没有实现该功能),不同存储引擎之间也不会相互通信,而只是简单的响应上层的服务器请求。
第四层包含了文件系统,所有的表结构和数据以及用户操作的日志最终还是以文件的形式存储在硬盘上。
mysql数据类型
数值类型: MySQL支持的整数类型有TINYINT、MEDIUMINT和BIGINT;
int、float、unsigned
日期时间类型:表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR;
字符串类型:指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET;
char:定长存储,最多只能表示255个字符,节省时间,浪费空间。例如:身份证、手机号、qq号、username,password,银行卡号
varchar:变长存储,最多只能表示65535个字符,更节省存储空间,但是存取速度慢 评论、朋友圈、微博、微博;
ENUM和SET类型
ENUM中文名称叫枚举类型,它的值范围需要在创建表时通过枚举方式显示。ENUM只允许从值集合中选取单个值,而不能一次取多个值。
SET和ENUM非常相似,也是一个字符串对象,里面可以包含0-64个成员。根据成员的不同,存储上也有所不同。set类型可以允许值集合中任意选择1或多个元素进行组合。对超出范围的内容将不允许注入,而对重复的值将进行自动去重。
查看表结构
describe [tablename];这种方法和desc [tablename];效果相同;可以查看当前的表结构
#查看表结构有两种方式: describe book; desc book
mysql表的完整性约束
为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。
约束条件与数据类型的宽度一样,都是可选参数,主要分为以下几种:
# NOT NULL :非空约束,指定某列不能为空; # UNIQUE : 唯一约束,指定某列或者几列组合不能重复 # PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录,主键可以包含一个字段或多个字段。当主键包含多个栏位时,称为组合键 (Composite Key),也可以叫联合主键;主键必须唯一,主键值非空 # FOREIGN KEY :外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性
#unsigned 不能有符号 -- create table t1(id int unsigned) #不能为空 -- create table t2(id int not null) #默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值,有数据则覆盖默认值 -- create table t3 (id1 int not null,id2 int not null default 222); #UNIQUE 唯一约束,指定某列或者几列组合不能重复 #方法一: -- CREATE TABLE t5 ( -- id INT, -- NAME vachar (20) UNIQUE, -- COMMENT VARCHAR (100) -- ) #方法二:联合唯一 -- create table t6( -- id int, -- name varchar(20), -- comment varchar(100), -- unique(name,comment) -- ); #PRIMARY KEY主键 #单列主键 #方法一:not null+unique,第一个被定义为非空+唯一的那一列会成为这张表的主键,一张表只能有一个主键 -- create table t7( -- id int not null unique, #主键 -- name varchar(20) not null unique, -- comment varchar(100) -- ); #方法二:在某一个字段后用primary key -- create table t8( -- id int primary key, #主键 -- name varchar(20), -- comment varchar(100) -- ); -- desc t7 #方法三:在所有字段后单独定义primary key -- create table t8( -- id int, -- name varchar(20), -- comment varchar(100), -- primary key(id); #创建主键并为其命名pk_name -- alter table t1 modify id int primary key; #多列做主键 -- create table t9( -- ip varchar(15), -- port char(5), -- service_name varchar(10) not null, -- primary key(ip,port) -- ); #AUTO_INCREMENT:约束字段为自动增长,被约束的字段必须同时被key约束 -- create table t10( -- id int primary key auto_increment, -- name varchar(20), -- sex enum('male','female') default 'male' -- ) -- desc t10 insert into t10 values('aa','a1'); ##也可以指定id -- insert into t10 values(4,'asb','female');