热门标签 | 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()



推荐阅读
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • flea,frame,db,使用,之 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • 探讨在 Swoole 的 WorkerStart 回调中创建的对象如何在多个客户端之间实现隔离,确保每个客户端的数据独立性。 ... [详细]
  • 如何在U8系统中连接服务器并获取数据
    本文介绍了如何在U8系统中通过不同的方法连接服务器并获取数据,包括使用MySQL客户端连接实例的方法,如非SSL连接和SSL连接,并提供了详细的步骤和注意事项。 ... [详细]
  • 在中标麒麟操作系统上部署达梦数据库及导入SQL文件
    本文档详细介绍了如何在中标麒麟操作系统上安装达梦数据库,并提供了导入SQL文件的具体步骤。首先,检查系统的发行版和内核版本,接着创建必要的用户和用户组,规划数据库安装路径,挂载安装介质,调整系统限制以确保数据库的正常运行,最后通过图形界面完成数据库的安装。 ... [详细]
  • Zabbix自定义监控与邮件告警配置实践
    本文详细介绍了如何在Zabbix中添加自定义监控项目,配置邮件告警功能,并解决测试告警时遇到的邮件不发送问题。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 深入探讨:Actor模型如何解决并发与分布式计算难题
    在现代软件开发中,高并发和分布式系统的设计面临着诸多挑战。本文基于Akka最新文档,详细探讨了Actor模型如何有效地解决这些挑战,并提供了对并发和分布式计算的新视角。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
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社区 版权所有