热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysqlln_mysql

关系型数据库和菲关系型数据库的区别关系型数据库优点关系型数据库层级结构清晰易于维护:都是使用表结构,格式一致;使用方便:sq

关系型数据库和菲关系型数据库的区别

关系型数据库

优点

关系型数据库层级结构清晰

易于维护:都是使用表结构,格式一致;

使用方便:sql语言通用,可用于复杂查询;

复杂操作:支持sql,可用于一个表以及多个表之间非常复杂的查询

缺点:

读写性能非常差,尤其是海量数据的高效读写;

固定的表结构,灵活度欠缺;

高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈;

非关系型数据库

优点

格式灵活,存储数据的格式为key,values,文档形式,图片形式等等,使用灵活;

应用场景广泛,关系型数据库只支持基础操作;

速度快:nosql可是使用硬盘或者随机存储器作为载体,关系型数据库只能用硬盘;

高扩展;

成本低:nosql数据库部署简单,基本都是开源软件;

缺点

不提供sql支持,学习和使用成本高;

无事务处理;

数据结构相对复杂,复杂查询方面稍欠。

非关系型数据库的分类和比较:

1、文档型

2、key-value型

3、列式数据库

4、图形数据库

MYSQL的概念 mySQL (关 系型数据库管理系统)

MySQL是一个关系型数据库管理系统,

MySQL是最流行的关系型数据库管理系统之一,

在WEB应用方面,MySQL是最好RDBMS(Relational Database Management System,关系数据库管理系统)应用软件之MySQL是一种关系数据库管理系统,

关系数据库将数据保存在不同的表中,增加了速度并提高了灵活性。

进入mysq|

打开cmd,输入

>>>mysql -U root(用户名) -p

>>>Enter password: **** #输入密码

mysq|>

mysql -D 数据库名 -u root(用户名) -p

退出mysql

quit; 或 exit;

操作库之前要进行的步骤:

修改加密规则

ALTER USER '用户名' @'localhost' IDENTIFIED BY '密码' PASSWORD EXPIRE NEVER;

修改密码

ALTER USER ’用户名‘ @'localhost' IDENTIFIED WITH mysql native_password BY '密码';

刷新数据

FLUSH PRIVILEGES;

远程连接: mysql -h 要连接的用户ip地址 -u 用户名 -p 回车输密码

操作库

创建数据库: create database a;

完整创建数据库的写法:create database if not exists test default character set = 'utf8mb4';

显示数据库: show databases;

删除数据库: drop database a;

连接,进入数据库: use 库名;

查看当前使用的数据库:select database();

查看当前数据库包含的表信息: show tables;

操作表

创建表:create table b(字段名 数据类型 约束, ...);

完整创建表的写法: create table if exists user(

id int(10) unsigned【unsigned指的是无符号的类型】 auto_increment key【这里的key指的是主键】comment 【comment指的是注释】'用户ID', ......)engine=innodb,charset=utf8mb4;

查看表结构: desc 表名;

查看表的创建语句: show create table a;

删除表:drop table b;

更改表名:rename table 原表名 to 新表名;

​ 删除t1表中的id列(不需要指明类型): alter table t1 drop id;

alter table a modify 字段名 数据类型;

alter table a change 字段1 字段2 类想

engine 是引擎 charset 是编码格式

ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表'

增加数据

增加全部字段

insert into 表名 values(值....);

增加自定义字段

insert into 表名(字段1, 字段2...) values(值1, 值2...);

还有一种用到了set

insert 表名 set 字段1=值1,字段2=值2;

删除数据

delete from 表名 where 条件;

更改数据

update 表名 set 字段1=值1 where 条件;

如果将一个字段设为默认值:

update 表名 set 字段1=default where 条件;

优先级:

from > where > group by > 聚合函数 > having > order by

查看数据

简单查询

select * from student;

select 字段 from student;

去重:

select distinct(去重) 字段1,字段2 from 表名;

函数:IFNULL(x,y)

如果x不是null,IFNULL() 返回的是x,否则返回y

b7fbd9af56e6330712fb8ebb20998d4f.png

条件查询

select 字段 from 表名 where 条件;

查询字段书否为空

select 字段 from 表名 where 字段 is null / not nul; 是否为空

查询字段满足条件的字段

select 字段 from 表名 where 字段 + 算数运算 / 逻辑运算;

7d99d40cf53a67aee250ea646cb16826.png

模糊查询

查询名字里包含小的所有字段

select * from aa where name like '%小%'

b7fbd9af56e6330712fb8ebb20998d4f.png

b75bedcf74fe6b7ced61543bbeea7c19.png

范围查询

查询id为1或3或6的学生的所有信息

select * from students where id in(1, 3, 6);

查询学生id为3到6的学生的所有信息(包含6)

select * from students where id between 3 and 6;

聚合查询

select count(字段名) from 表名 where 条件; 查询个数

select max(字段名) from 表名 where 条件; 查询最大值

select min(字段名) from 表名 where 条件; 查询最小值

select sum(字段名) from 表名 where 条件; 查询他们的和

select avg(字段名) from 表名 where 条件; 查询平均值

分组查询

select 字段1 from 表名 group by 字段2

分组后的数据筛选

查询男生总人数

方案一

select count(*) from students where gender='男;

方案二:

select gender,count(*) from students group by gender having gender='男;

where和having的区别

where是对from后面指定的表进行数据筛选,属于对原始数据的筛选

having是对group by的结果进行筛选

排序查询

select 字段1 from 表名 order by 字段1

分页查询

select * from 表名 limit 从第几行开始,显示几行 【acs 升序 desc 降序】

一对多表

38ea0b46ec102adf3ec7fc7e1899d7b5.png

必须在已存在的字段上设置外键

级联操作的类型:

restrict(限制) 抛出异常

cascade 级联

set null 外键设置为空

no action 什么都不做

通过修改创建外键:

第一步:先增加子表字段a_id

第二步:****alter table 表名 add foreign key(a_id) references 主表名(字段名 eg:id)

constraint 是指定外键名称,在用的时候会用到 不影响foreign key后面的加入 可写可不写

或者:****alter table 表名 add constraint iid foreign key a_id references 主表名(字段名 eg:id)

多对多表 (和一对多相似,只是创了一张中间表)

aebab08a95cca2fe453b5554ed0c1241.png

b7fbd9af56e6330712fb8ebb20998d4f.png

修改已存在的表结构:

第一步:先增添字段

第二步:alter table a add foreign key(id) references aa(id)

d0475ed3d7136060983a5fe148a4400c.png

内连接查询

从左表中取出每一条记录,与右表中的所有记录进行匹配,

在左表和右表相同的公共部分,才会保留结果,否则不保留。

注意:

内连接可以没有on,系统会保留所有结果,就是笛卡尔积;

还可以用where代替on,但是效率没有on高;

select * from 左表名 inner join 右表名 on 条件;

b7fbd9af56e6330712fb8ebb20998d4f.png

左外连接查询

包含左边表的全部行(不管右边的表中是否存在与他们匹配的行),以及右表中全部匹配的行

select * from 左表名 left join 右表名 on 条件;

右外连接查询

包含右边表的全部行(不管右边的表中是否存在与他们匹配的行),以及左表中全部匹配的行

select * from 左表名 right join 右表名 on 条件;

自查询【自己关联自己】

select * from grade as a inner join grade as b on 条件;

字符串函数

查看字符串的ascii码值 【与下面的char可以相互转化】 select ascii(str);

b7fbd9af56e6330712fb8ebb20998d4f.png

查看ascii码值对应的字符 select char(数字);

b7fbd9af56e6330712fb8ebb20998d4f.png

拼接字符串 【凭借后都是字符串】 select concat(str1,str2);

b7fbd9af56e6330712fb8ebb20998d4f.png

包含字符个数 select length('abc');

b7fbd9af56e6330712fb8ebb20998d4f.png

返回几个左端数据 select left('abc123',个数);

b7fbd9af56e6330712fb8ebb20998d4f.png

返回几个右端数据 select right('abc123',个数);

b7fbd9af56e6330712fb8ebb20998d4f.png

从第几个元素开始,返回几个数 select substring(str,start,len);

b7fbd9af56e6330712fb8ebb20998d4f.png

返回由n个空格组成的字符串 select space(10);

b7fbd9af56e6330712fb8ebb20998d4f.png

返回删除了左空格的字符串 select ltrim(str);

b7fbd9af56e6330712fb8ebb20998d4f.png

返回删除了右空格的字符串 select rtrim(str);

b7fbd9af56e6330712fb8ebb20998d4f.png

返回从某侧删除remstr后的字符串str select trim(方向【both,leading左,trailing右】remstr from str);

b7fbd9af56e6330712fb8ebb20998d4f.png

b7fbd9af56e6330712fb8ebb20998d4f.png

b7fbd9af56e6330712fb8ebb20998d4f.png

替换字符串 select replace(str, start_str, end_str);

b7fbd9af56e6330712fb8ebb20998d4f.png

大小写转换 select lower(str); select upper(str);

b7fbd9af56e6330712fb8ebb20998d4f.png

数学函数

求绝对值 select abs(n);

b7fbd9af56e6330712fb8ebb20998d4f.png

余数 select mod(m,n);

b7fbd9af56e6330712fb8ebb20998d4f.png

展示不大于n的最大整数 【地板floor(n)】 select floor(n);

b7fbd9af56e6330712fb8ebb20998d4f.png

b7fbd9af56e6330712fb8ebb20998d4f.png

求四舍五入值 select round(n【原数】,b【小数位置】);

b7fbd9af56e6330712fb8ebb20998d4f.png

求幂 select pow(2,3);

b7fbd9af56e6330712fb8ebb20998d4f.png

获取圆周率 select PI();

随机数 select rand(0-1的浮点数);

日期时间函数

select year(date); 返回date的年份;

select month(date); 返回date的月份;

select day(date); 返回date的日期;

select hour(time); 返回time的小时数;

select minute(time); 返回time的分钟数;

select second(time); 返回time的秒数;

日期格式化 select date_format(date,format),

b7fbd9af56e6330712fb8ebb20998d4f.png

b7fbd9af56e6330712fb8ebb20998d4f.png

日期计算 select '2016-12-23'+interval 1day;

b7fbd9af56e6330712fb8ebb20998d4f.png

当前时间 select current_time();

当前日期 select current_date();

当前日期时间 select now();

视图

【可以使用户操作方便,并保证数据库系统安全】

视图就是虚拟表,作用和真实表一样 。

create view 视图名(自定义) as select 字段 from 表名;

drop view 视图名;

b7fbd9af56e6330712fb8ebb20998d4f.png

b7fbd9af56e6330712fb8ebb20998d4f.png

事务

提交事务 数据库最小执行的单元

事务是保证每次对数据库操作的准确性和安全性

只有使用了innodb数据库引擎的数据库或表才支持事务

【用来管理insert update delete语句】

创建表时设置引擎 alter table '表名'(字段1 类型)engine=innodb

修改表的引擎 alter table '表名' engine=innodb;

事务处理的两种方法:

直接用set来改变mysql的自动提交模式

set autocommit=0 禁止自动提交

set autocommit=1 开启自动提交

用begin,rollback,commit实现

begin 开始一个事务

rollback 事务回滚

commit 事务确认

事务测试

回滚

b7fbd9af56e6330712fb8ebb20998d4f.png

提交

b7fbd9af56e6330712fb8ebb20998d4f.png

事务的四大特性(ACID)

原子性A:不可分割,不能分开执行

一致性C:几个并发执行的事务,执行结果必须与某一顺序的串行执行的结果相一致

隔离性I:完全相互独立

持久性D:对于已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障

MySQL的事务隔离级别

未提交读(Read Uncommitted):允许脏读,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。也就是可能读取到其他会话中未提交事务修改的数据

提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)。

可重复读(Repeated Read):可重复读。无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响。

串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

MySQL数据库(InnoDB引擎)默认使用可重复读( Repeatable read)

与python3交互

简单步骤:

import pymesql

首先:建立有数据库的连接conn = pymysql.connect(host=连接的mysql主.,port=端口,db=数据库名称,user=连接的用户名,password=密码,charset=编码方式,autocomment=是否自动提交,默认为false)

第二步:创建游标 cur=conn.cursor()

第三步:执行sql命令cur.execute("......")

第四步:1.提交生效 conn.commit()

2.放弃操作 conn.rollback()

第五步:关闭连接conn.close()

cursor的属性

rowcount返回数据条数或影响行数

connection 获得当前连接对象

connection对象的方法

close()关闭连接

commit()事务,所以需要提交才会生效

rollback()事务,放弃之前的操作

cursor()返回Cursor对象,用于执行sql语句并获得结果

import pymysql

# 建立与数据库的连接

conn = pymysql.connect(host='localhost',port=3306,db='students',user='huhu',password='root')

# 创建游标

cur = conn.cursor()

# 执行操作语句

# pymysql 里的自增要加下划线 sqlite3不加

# pymysql占位符 是 % sqlite3占位符 是 ?

# cur.execute("create table demo13(id int primary key auto_increment, name char(10))")

# sqlite3 可以赋值到一个变量,用变量进行查询; pymysql 只能通过游标取出数据

cur.execute("select * from grade")

a = cur.fetchall()

for i in a:

print(list(i))

conn.close()

import pymysql

conn= pymysql.connect(host='localhost',port=3306,user='huhu',password='root',db='students')

cur=conn.cursor()

cur.execute("create table aaaa(id int primary key auto_increment,name char(10))")

try:

cur.execute("insert into aaaa values(0,'%')" %'vv')

conn.commit()

except:

conn.rollback()

conn.close()



推荐阅读
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 数字账号安全与数据资产问题的研究及解决方案
    本文研究了数字账号安全与数据资产问题,并提出了解决方案。近期,大量QQ账号被盗事件引起了广泛关注。欺诈者对数字账号的价值认识超过了账号主人,因此他们不断攻击和盗用账号。然而,平台和账号主人对账号安全问题的态度不正确,只有用户自身意识到问题的严重性并采取行动,才能推动平台优先解决这些问题。本文旨在提醒用户关注账号安全,并呼吁平台承担起更多的责任。令牌云团队对此进行了长期深入的研究,并提出了相应的解决方案。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文主要复习了数据库的一些知识点,包括环境变量设置、表之间的引用关系等。同时介绍了一些常用的数据库命令及其使用方法,如创建数据库、查看已存在的数据库、切换数据库、创建表等操作。通过本文的学习,可以加深对数据库的理解和应用能力。 ... [详细]
author-avatar
LISA_W186
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有