什么是mysql
MySQL 是一种流行的开源关系型数据库管理系统,广泛用于Web应用程序的数据存储和管理。MySQL 支持多种操作系统,具有高性能、稳定性强、易用性好等特点。它采用了客户端-服务器体系结构,能够处理大量数据并支持事务处理。MySQL 使用标准的SQL语言进行查询和管理数据库,同时还提供了丰富的功能和工具,使得开发人员可以轻松地构建和维护各种规模的数据库应用。
数据库
数据库系统有三个部分组成:数据库:用于存放数据的地方,提供了一个存储空间可以存放各种数据,可以将数据库视作为一个存放数据的容器,一个数据库可能会包含多个文件,一个数据库系统包含多个数据库
数据库管理系统: 用于管理数据库的软件,是用户创建、管理和维护数据库时使用的软件位于用户和操作系统之间,对数据库进行统一管理,能够定义数据库存储结构,提供数据的操作机制,维护数据库的安全性、完整性、可靠性
数据库应用程序:为了提高数据库系统的处理能力所使用的数据库的软件,虽然有类数据库管理学但是在很多情况下任然无法满足对数据库管理的要求,数据库应用程序的使用可以满足对数据库管理的更高要求,还可以使数据库管理过程更加直观,数据库应用程序负责与数据库系统进行通讯、可以访问和管理数据库管理系统中存储的数据,允许用户插入、修改删除数据库中的数据。
什么是数据库
数据库是一个长期存储在计算机中的,统一管理的数据集合(存储数据的仓库),它可以有效的有组织的管理存储在数据库中的数据
表
在关系型数据库中,数据库采用的是二维表格的方式来存放数据,数据表是由纵向的列和横向的行组成,列被称之为字段,行被称之为记录,每一个字段表示记录的一个属性,都有相应的描述信息,例如:数据的长度、数据类型……
什么叫数据类型
数据类型决定了数据在计算机中存储的格式,代表不同的信息类型,常用的数据类型有:整数类型,浮点数、精确小数类型,二进制数据类型、日期数据类型……
sql
对数据库进行查询和修改操作的语句可以叫做sql(结构化查询语句)
包含以下四个内容:
1、数据定义语言(DDL):DROP CREATE ALTER ……
2、数据操作语言 (DML): INSERT UPDATE DELETE ……
3、数据查询语言(DQL): SELECT
4、数据控制语言(DCL): GRANT REVOKE COMMIT ……
Mysql库
存放着关于mysql服务器的系统基本信息和配置,包含用户,权限和访问空值的表,用于管理用户和控制用户的访问权限,包含了几个重要的表:user、db,tables——priv
Information_schema库; 存放着关于mysql数据库系统的源数据,包含古语数据库的表,列,索引,约束,触发器等信息。同时查询information_schema库中表,可以获取关于数据库对象的信息
Performance_schema库#存放了对于mysql数据库的性能的详细信息,包含了性能相关的统计数据和指标,例如;查询数据,IO操作,可以使用performance_schema库用来分析和优化数据库的性能。
Sys库# 是一个存储过程和函数的结合,用于提供mysql数据库的信息监控和诊断功能,包含了一组视图和函数用于获取 performance_schema库和ingormation_schema库中的性能数据,并且以更方便的方式进行查询
存储引擎: 存储引擎是数据建库底层软件组件,数据库库管理系统使用数据库引擎创建,查询,更新和删除数据的操作,不同的存储引擎提供不同的存储机制,索引技巧,使用不同的存储引擎可以获取到特定功能,(存储引擎就是数据存储格式,不同的存储引擎采用不同的存储机制)
Mysql常见的存储引擎; innodb,memory,MyISAM……
查看存储引擎;
mysql> show engines\G;
默认存储引擎;
mysql> show variables like "%storage_engine";
常用的存储引擎特点和使用场景;
MyISAM#在mysql5.5版本之前默认使用的存储引擎,在5.5之后转为使用innoDB存储引擎。
MyISAM;读取速度较快,占用资源较少,不支持事务,不支持外键,支持全文索引。
使用场景;适用于硬件资源较差,适用于并发相对较低,数据修改业务较少
innoDB:事务类型数据库首选,支持事务,支持行锁定,支持外键约束。具有提交,回滚的能力,具有较高的存储效率,可以缓存索引,也能缓存数据,但是对设备硬件性能要求高
使用该存储引擎时,在mysql的数据目录下创建一个名为ibdata的自动扩展数据文件
使用场景;需要支持事务的业务,适用于并发较高的业务,数据更新较为频繁,数据一致性较高的业务
基础操作
创建库;
mysql> create database asd;
切库;
mysql> use asd;
创建表;
Create table 表名 (
字段名1 数据类型 (完整性数据类型)
字段名2 数据类型 (完整性数据类型)
字段名3 数据类型 (完整性数据类型)
完整性约束条件;
- 主键约束(primary key)
- 非空约束(not null)
- 唯一约束(unique)
- 自增约束(auto_increment)
- 默认值约束(default)
- 外键约束(foregin key)
- 主键约束;
创建表;
mysql> create table asd (id int primary key,name char(10),age int);
查看表结构;
mysql> desc asd;
插入数据;
mysql> insert into asd(name,age) value('sss','20');
ERROR 1364 (HY000): Field 'id' doesn't have a default value
未插入主键数据(报错违反主键非空要求)
mysql> insert into asd value('1','sss','20');
Query OK, 1 row affected (0.01 sec)
已插入主键数据
mysql> insert into asd value('1','123','2');
ERROR 1062 (23000): Duplicate entry '1' for key 'asd.PRIMARY'
插入相同id字段数据(报错违反主键唯一要求)
mysql> insert into asd value('2','123','2');
Query OK, 1 row affected (0.00 sec)
已插入数据
第二种格式设置主键
mysql> create table qwe(id int,name char(10),age int,primary key(id));
删除主键约束;
Alter table 表名 drop 主键
添加主键约束
Alter table 表名 add [constraint 约束名] 增加的约束类型 字段名
联合主键 一张表只能有一个主键,可以针对多个字段(只要一个不冲突即可)
mysql> create table zxc (id int,name char(10),age int, primary key(id,name));
唯一约束;要求字段中的数值唯一
非空约束;要求字段中不能有空值
一个表内无主键约束,设置非空和唯一则会自动升级为主键约束。
删除约束;
Alter table 表名称 modify 字段 数据类型 null
外键约束(foregin key)实现多张表之间数据的完整性和一致性(分为父表和子表,父表中的关联的地段需要设置主键约束,子表中关联的字段设置外键约束和父表进行绑定,只有父表中有的数据才能写入子表)
示例;
创建父表
mysql> create table class (id int primary key,name char(10));
Query OK, 0 rows affected (0.00 sec)
创建子表;
mysql> create table aaa (id int,name char(10),c_id int, constraint c_s foreign key(c_id) references class(id));
Query OK, 0 rows affected (0.01 sec)
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`asd`.`aaa`, CONSTRAINT `c_s` FOREIGN KEY (`c_id`) REFERENCES `class` (`id`))当一个表中的行引用另一个表中不存在的行时,就会出现这个错误。
先在父表加入数据
mysql> insert into class values(25,'A');
Query OK, 1 row affected (0.00 sec)
再在子表加入对应的数据
mysql> insert into aaa values('1','aa','25');
Query OK, 1 row affected (0.00 sec)