mysql

 

事物---功能---用途---实现条件---实现步骤/操作步骤(注意事项)---问题---解决
名词
数据库
| 存储管理数据的容器
层次式数据库
层次数据库是最早研制成功的数据库系统,它把数据通过层次结构(树形结构)的方式表现出来。

网络是数据库
网络数据库是指把 数据库技术 引入到计算机网络系统中,借助于 网络技术 将存储于数据库中的大量信息及时发布出去;而 计算机网络 借助于成熟的数据库技术对网络中的各种数据进行 有效管理 ,并实现用户与网络中的数据库进行实时动态数据交互。

关系式数据库(SQL)和非关系型数据库(NoSQL,Not Only SQL)
关系型数据库
| 关系就是二维表,并满足如下性质:
事物
关系型数据库,是指采用了关系模型来组织数据的数据库。简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。关系型数据库的最大特点就是事务的一致性:传统的关系型数据库读写操作都是事务的,具有ACID的特点,这个特性使得关系型数据库可以用于几乎所有对一致性有要求的系统中,如典型的银行系统。

常见关系型数据库:
大型:Oracle、DB2等;
中型:SQL Server、MySql等;
小型:Access等;

功能
表中行,列次序并不重要
行row:表中的一行,又称一条记录
列column:表中每一列,数位属性,字段 field 域
主键(Primary Key)
| 唯一标识
用于谁确定一个记录的字段,外键FK( foreign key)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

域domain:属性的取值范围,如,性别只能是男、女两个值

优/缺
优点:
容易理解:二维表结构是非常贴近逻辅世界的一个概念,关系横型相对网状、层次等其他模型来说更容易理解
使用方便:通用的SQL语言使得操作关系型数据库非常方便
易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据沉余和数据不一致的概率

缺点:
1、无法满足海量数据的管理需求
2、无法满足高并发的需求
3、无法满足高可扩展性和高可用性的需求

非关系型数据库
事物
非关系型数据库又被称为 NoSQL(Not Only SQL ),意为不仅仅是 SQL。 通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定,常用于存储非结构化的数据。 非关系型数据库存储数据的格式可以是 key-value 形式、文档形式、图片形式等。 使用灵活,应用场景广泛,而关系型数据库则只支持基础类型
特点
非结构化的存储。
选于多继关系模型。
具有特有的使用场展。

一部分功能
搜索值存储数据库(Key-Value)
所谓的Key-Value就是每次存储一个数据时,是根据Key进行索引存储的

列存储(Column-oriented)数据库
列存储数据库将数据存在列族(column family)中,一个列族存储经常被一起查询的相关数据。

面向文档(Document-Oriented)数据库
面向文档的数据库. 面向文档的数据库(Document-oriented database)用于储存、检索和管理面向文档的信息(也称为「半结构化数据」),是 NoSQL 数据库的一个主要类别


优/缺
优点:
高并发,大数据下读写能力较湿。(基于键值对的,可以想象成表中的主键和植的对应关系,而目不需想经过SQL层的解析,所以性能非常高)
基本支持分布式,嘉于扩属,可神缩。(因为基于键值对,数据之间设有概合性,所以非常容易水平扩展。)
简单,弱结构化存储。

缺点:
事务支持较弱。
通用性差。
无完整约束复杂业务场景支持较差。

sql
| SQL 指结构化查询语言,
| ​全称是Structured Query Language。
| ​ SQL 让您可以访问和处理数据库,
| ​包括数据插入

 


sql语句规范sql命名规范来自于简书
1.SQL关键字、对象名、和列名不区分大小写。
2.字符值和日期值要区分大小写。
3.在应用程序中如果SQL语句文本很长,可以将语句分布到多行上,并且可以通过使用跳格和缩进提高代码的可读性
4.SQL*Plus中的SQL语句以分号(;)结束。

sql 3种分类
| 按照实现功能不同主要分为3类:
数据操纵语言(DML)
主要用来处理数据库中的数据内容。允许用户对故据库中的数据进行查询,插入,更新和删除等操作

数据定义语言(DDL)
是一组5QL命令,用于创建和定义数据库对象,并且将对这些对象的定义保存到数据字典中。通过DDL语句可以创建数据库对象,修改数据库对象和删除数据库对象等。
注:每一条DDL语句执行后,Oracle都将提交当前事务。

数据控制语言(DCL)
数据控制语言用于修改数据库结构的操作权限。
DCL语句主要有2种:
CRANT 授予其他用户对数据库结构的访问权限
REVOKE 收回用户访问数据库结构的权限

mysql数据库
| 特点是将数据存储在不同的表中
介绍
名词
数据表:保存在数据库中的不同类别的记录集合称为数据表,一个数据库中可以保存多个数据表。


MySQL是一种关系型数据库管理系统,它将数据保存在不同的表中,而不是将所有数据放在一个大仓库内。因此它的灵活性强,速度快强。它具有两种模式:商业版跟社区版,一般新手都会选择社区版来创建自己的数据库系统。由于它的体积小、速度快、成本低、最重要的是开放源码,所以中小型的公司都喜欢使用它作为网站数据库。
特点
(1)MySQL数据库是用C和C++语言编写的,并且使用了多种编辑器进行测试,以保证源码的可移植性
(2)支持多个操作系统例如:Windows、Linux、Mac OS等等
(3)支持多线程,可以充分的利用CPU资源
(4)为多种编程语言提供API,包括C语言,Java,PHP。Python语言等
(5)MySQL优化了SQL算法,有效的提高了查询速度
(6)MySQL内提供了用于管理,检查以及优化数据库操作的管理工具
(7)它能够作为一个单独的应用程序应用在客户端服务器网络环境中,也可以作为一个库嵌入到其他的软件中并提供多种语言支持

MySQL数据库能做什么:
(1)它可以存储大量的数据,方便用户检索和访问
(2)用于保存信息数据以及信息的一致性和完整性
(3)数据的共享和安全
(4)通过组合分析,产生有用信息


优/缺
优点
1. 通常存储过程 标题有助于提高应用程序的性能。因为当你创建他的时候就已经编译了,只不过是按需编译的。
2.存储过程有助于减少应用程序和数据库服务器之间的流量,因为应用程序不必发送多个冗长的SQL语句,而只能发送存储过程的名称和参数。
3.存储过程将数据库接口暴露给所有应用程序,以便开发人员不必开发存储过程中已支持的功能,而我们只能使用他程序授予的适当的权限而不能赋予他权限,而这 也保证了他的安全性。

缺点
1. 如果使用大量存储过程,那么使用这些存储过程的每个连接的内存使用量将会大大增加。 此外,如果您在存储过程中过度使用大量逻辑操作,则CPU使用率也会增加。
2.存储过程的构造使得开发具有复杂业务逻辑的存储过程变得更加困难。
3.mysql不允许调试存储过程。
4.开发和维护存储过程很难。

mysql常用命令
mysql常用命令来自于博客园
删库

DROP DATABASE dbname;

| dbname是表名

选中到数据库

USE 库名

建表

CREATE TABLE 表名{内容}
 CREATE TABLE penson{
 id INT(11),
 pnname VARCHAR(50),
 age INT(3),
 address VARCHAR(100),
 sex CHAR(2),
 birth DATEIME,
 PRIMARY KEY(id)
 ​}

IF NOT EXISTS #:加载创建表名前,意为如果有就不创建,没有就创建
AUTO_INCREMENT #:加载主键后,意为自增
PRIMARY KEY #:定义主键(主键唯一,不重复)


查询表

SELECT * FROM penson;

| *号代表所有的,建议用列名去查
通过列名查询:SELECT 列名 FROM 表名

查询表中的某一行

SELECT * FROM eternity WHERE id=2;
#查询全部表数据中id为2的一行

删除表

DROP TABLE penson;

显示存储引擎
SHOW ENGINES;

插入数据
insert into 表名(列1,......列n)values(值1,......值n) # 列和值要一一对应
| 例:

#插入一个数据
 INSERT INTO penson (id,pnname,age,address,sex,birth)VALUES(1,'貂蝉',18,'三国','','2000-08-09 12:03:31'); # 如果最后一个时间不写时分秒会默认为00:00:00
 
 #如果插入所有数据可缺省列
 INSERT INTO penson VALUES(1,'貂蝉',18,'三国','','2000-08-09');
 
 # 因为创建表时要求id(主键)自增所以在插入下一条数据时,id会自动增加而不用写id
 INSERT INTO penson (pnname,age,address,sex,birth)VALUES('刘备',18,'三国','','2000-08-09');
 # 如果有的值不想填要 写null(或者有的值本身就可以为空而不写),填空格或不填可能会出问题

更新数据
update 表名 set 列1=值1,...,列n=值n where id =xxx;
 # id作为条件
 UPDATE penson SET pnname =‘张飞’ WHERE id=2;# WHERE后是根据条件,前是修改内容
 # 这种情况不经常用
 UPDATE penson SET id='7' WHERE pnname='曹操'; # 把pnname包含曹操的id改为7

删除数据
delete from 表名 where id=xxx;
DELETE FROM penson WHERE id=2;# 删除表中id为2的数据
 DELETE FROM penson WHERE pnname='吕布';# 删除pnname包含为吕布的所有数据
 DELETE FROM penson;删除penson表中的全部数据,只剩表头

 

数据类型
| MySQL 中定义数据字段的类型对
| ​你数据库的优化是非常重要的。
| MySQL 支持多种类型,大致可以分为
| ​三类:数值、日期/时间和字符串(字符)类型
数据类型来源于菜鸟教程

代码练习
一些简单的练习

 1 # 查询表数据 
 2 # select * from 表名; 
 3 # * 代表所有列
 4 SELECT * FROM student;
 5 # 通过语法建库
 6 # CREATE DATABASE dbname;
 7 CREATE DATABASE bd202109;
 8 # 删库
 9 DROP DATABASE bd202109;
10 #创建一个数据库
11 CREATE DATABASE star;
12 #选中这个库
13 USE star;
14 
15 #新建一个表
16 CREATE TABLE IF NOT EXISTS eternity(#IF NOT EXISTS:如果有这个表就不创建没有就创建
17 id INT(11) AUTO_INCREMENT,#定义id为int类型,位数为11,auto_increment自增
18 nname VARCHAR(50),#定义名字nname为varchar类型位数为50
19 age INT(3),#定义年龄为int类型,位数为3
20 address VARCHAR(50),#定义个varchar类型,位数为50
21 sex CHAR(2),#定于性别sex,为char类型,位数为2
22 birth DATETIME,#定义birth为时间和日期类型 格式:YYYY-MM-DD HH:MM:SS
23 PRIMARY KEY(id)#primary key():设置主键,主键唯一且不重复
24 )ENGINE =INNODB DEFAULT CHARSET=utf8; #设置储存引擎,设置编码. 
25 #查询全表 
26 SELECT * FROM eternity;
27 #查询表中的id和nname
28 SELECT id,nname FROM eternity;
29 #显示存储引擎
30 SHOW ENGINES;
31 #插入数据 insert into 表名(列1, ......列n)values(值1,......值n)
32 #值和列要一一对应
33 INSERT INTO eternity(id,nname,age,address,sex,birth)VALUES(1,'赵云',18,'三国','','200-08-09');
34 #不写列名代表所有的列
35 INSERT INTO eternity VALUES(2,'刘备',19,'三国','','2000-08-09 17:10:40');
36 #id写了自增
37 INSERT INTO eternity(nname,age,address,sex,birth) VALUES('关羽',32,'三国','','2000-09-26 17:13:59');
38 INSERT INTO eternity(nname,age,address,sex,birth) VALUES('貂蝉',16,'三国','','2019-09-26 17:20:34');
39 INSERT INTO eternity(nname,age,address,sex,birth) VALUES('大乔',13,'三国','',NULL);#不想填数据且值可为null的情况下建议自己填个null
40 #上述代码没有对应id,结果已经自增因为id写了AUTO_INCREMENT(自增)
41 
42 #更新,修改 update 表名 set 列1=值1,......列n=值n where id=xxx;
43 UPDATE eternity SET nname='隆中' WHERE id=2;#update后跟表名 set后是修改的内容 where后是筛选的条件
44 
45 #删除数据delete from 表名 where id==xxx;
46 DELETE FROM eternity WHERE id=5;#删除id为5的数据
47 #删除整个表中的数据
48 DELETE FROM eternity;
49 #删除整个表
50 DROP TABLE eternity;
51 #查询名字为貂蝉的数据
52 SELECT nname='貂蝉' FROM eternity;
53 #查询id列中nname为关羽的一列
54 SELECT id FROM eternity WHERE nname='关羽';
55 #查询全部表数据中id为2的一行
56 SELECT * FROM eternity WHERE id=2;

 

posted @ 2021-09-26 15:02  阴阳兔  阅读(79)  评论(0)    收藏  举报