数据库 - Mysql基础

关系型数据库(MySQL)

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

python连接mysql

conn = pymysql.connect(host=‘root‘)
port=3306,user=‘root‘
passwd=‘1234‘,db=‘user‘,charset=‘utf8mb4‘ # 声明mysql连接对象
cursor=conn.cursor(cursor=pymsql.cursors.DictCursor) # 查询结果以字典的形式
cursor.execute(sql语句字符串) # 执行sql语句
conn.close() # 关闭链接

mysql基础

1.安装

linux中:

1.sudo apt-get install
mysql-server

2.修改配置文件

3.启动:sudo service mysql start(重启->restart)

4.查看进程中是否有:ps ajx | grep mysql

5.停止:sudo service mysql stop

6.mysql命令行的安装:mysql命令行的安装:sudo apt-get install mysql-client

Windows中:

1.下载mysql 5.7.msi

2.更改系统环境变量

3.更改配置文件

4.首先打开mysql服务器

5.开启mysql服务:net start mysql

2.配置环境

本机mysql

Windows中修改初始密码

命令为:mysql -u root -p;

use mysql

updata user set

authentication_string=password("123456")

where
user="root";

flush privileges;

updata user set
password_expired="N"where

user="root"              再次启动:mysql -u root -p

建立用户

本地登录:create user “u1"@"localhost"indentified
by"123“;

任意都可以登录:create user ”u2“@”%“identified by "123"

具体主机登录:create user ”u4“@”172.16.12.24“identfied by "123";

Navicat

使用步骤

1.连接本机的mysql

2.先创建数据库

3.再创建表

3.表的增删改查

0.数据库操作

创建数据库:create database testdb2 charset
utf8;

展示数据库:show databases

1.增加

为当前表增加一个字段:alter table stu add gender
char(4);

增加数据:insert into 表名values(0,"测试");

2.删除

1.drop

删除整张表:drop table 表明;

删除表中的列:alter table 表名 drop column 列名;

2.delete

删除表里的所有数据:delete from 表名;

删除表里的一条数据:delete from 表名 where id=1

3.truncate

删除所有数据:truncate table 表名

4.删除总结

彻底删除一张表:drop

删除一张表的记录,保留该表:truncate

删除一张表的所有数据:delete

(truncate是释放数据页,包括记录,而delete每删除一行需要在日志中记录一行)

3.修改

增加一个字段:alter table 表名 add 字段名
字段类型(alter table user
add image varchar (100) comment "图片路径”after birthday)

修改表名:alter table 表名 rename to 新的表名

修改列名:alter table 表名 change 字段
新字段名 类型

update:update表set列where列条件;是对表内的数据进行操作

update和alter的区别:alter是指修改表的结构,update修改表的数据

4.查询

单表查询

查询该表的所有值:select * from 表名

使用as给字段起别名:select column as 别名 from 表名

按某种条件进行查询:select * from 表名 where 条件

范围查询,in里面是范围:select * from students where id in(数字)

查询某字段信息,按升序or降序排列:select 列名 from 表名 order by 字段名 asc|desc;

聚合函数:

查询学生总数:select count(*)from students;

查询此列的和:select sum(字段名)from 表名 where 条件

查询某条件下某字段的平均值:select avg (字段名) from 表名 where 条件

分组+聚合:

查询当前性别的种类并进行分组:select gender from students
group by gender;

查询结果并将每个集合进行分组:select
gender,group_concat(name)from student

分别统计性别为男/女的人平均年龄数:select gender,avg(age) from students group by gender;

查询性别总数>2的数量并进行分组:select gender,count(*) from student group by gender having
count(*)>2;

查询前3行男生信息:select * from students where gender=1 limit 0,3;

多表查询

交叉连接:

获得的是两个表的笛卡尔积:select * from A,B

内连接:

显式内连接:select * from A inner join B on 条件;

隐式内连接:select * from A,B where 条件;

实例:使用内连接查询班级表与学生表,取AB得交集- select * from students inner join
classes on students.cls_id = classes.id;

左连接:

通式:select * from A left join B on A.id =
B.user_id

实例:select * from students as s left join
classes as c on s.cls_id = c.id

右连接:

通式:select * from A right join B on A.id =
B.user_id

实例:select * from students as s right join
classes as c on s.cls_id = c.id;

5.数据库优化方案

1.避免使用select*

2.固定长度在前面

3.内存代替表,如:性别等

4.读写分离

5.分库

6.分表-水平分表-垂直分表

7.命中索引

8.组合索引代替索引合并

9.尽量使用短索引

10.如果取一条数据时,使用limit 1:select id , name from tb where name = "limit 1"

11.禁止使用子查询,遇到使用子查询的情况,尽量使用join代替

12.避免使用大事务,使用短小的事务

13.减少锁等待和竞争

$$数据库高级

视图

简单来说,视图就是呈现给用户数据的一个虚拟表,只能查看,不会对原表产生任何影响

触发器

触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助,应用在数据库端确保数据的完整性。

触发器中的两个限制:

触发程序不能调用将数据返回客户端的存储程序,但是允许存储程序通过参数将数据返回触发程序;

不能在触发器中使用以显式和隐式方式开始或结束事务的语句;

显示:用COMMIT命令直接完成的提交为显式提交

隐式:用SQL命令完成的提交为隐式提交

执行过程:

触发器是行触发的,每次增加,修改都会触发进行处理,所以尽量少编写复杂的触发器,能提升性能优化

事务

事务的概念:事务是一组不可分被分割的SQL语句集合,如果有必要,可以撤销

事务的四大特性:

原子性(atomicity):事务是由一个或一组相互关联的SQL语句组成,这些语句被认为是一个不可分割的单元;

一致性(consistency):对于数据库的修改是一致的,即多个用户查的数据是一样的;

隔离性(isolation):事务之间不会相互影响;

持久性(durability):提交了这个事务之后对数据的修改更新就是永久的,即事务执行成功后必须全部写入磁盘;

索引

定义:每个表至少支持16个索引,总索引长度至少为256字节。大多数存储引擎有更高的限制。

一个表的索引,就好比一本书的目录,有了目录,查询速度自然会大大加快。

搜索的索引列,不一定是所要选择的列:意思是说,如果索引在where子句后,会比select关键字的选择列表中要好很多;

使用唯一索引:索引的列的基数越大,索引的效果越好,例如:存放出生日期的列具有不同值,很容易区分各行;

使用短索引:如果对字符串列进行索引,应该制定一个前缀长度,这样搜索起来更快捷;

使用最左前缀:在创建一个n列的索引时,实际是创建了MySQL可利用的n个索引。

多列索引可起几个索引的作用,因为可利用索引中最左边的列集来匹配行。这样的列集称为最左前缀。

不要过度索引

存储过程:定义;是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,经由用户调用;

Mysql的语法规范

²  不区分大小写

²  每条命令分号结尾;

²  命令根据需要进行缩进或换行;

²  注释:#注释文字(单行);--注释;多行注释:/注释文件/;

²  mysql配置文件,my.ini(如果改了配置文件需要重启服务)

创建数据库并插入数据

创建一个名为 mysql_shiyan 的数据库,其中有两张表 employee和 department

准备:在Linux系统上配置好Mysql,打开MySQL并使用root登录

# 打开 MySQL 服务
sudo service mysql
start
#使用 root 用户登录,密码为空
mysql -u root

新建数据库:

# 创建数据库
CREATE DATABASE
mysql_shiyan;
# 查看数据库
show database;

连接使用数据库:

# 使用数据库
use mysql_shiyan;
# 查看数据库中有几张表
show table

新建数据表:

# 新建一张表 employee,包含ID,姓名 和电话信息
CREATE TABLE employee (id
int(10),name
char(20),phone int(12));

插入数据:

# 通过 INSERT 语句向表中插入数据,语句格式为:
INSERT INTO 表的名字(列名a,列名b,列名c) VALUES(值1,值2,值3);
# 向 employee 中加入
Tom、Jack 和 Rose
INSERT INTO employee(id,name,phone) VALUES(01,‘Tom‘,110110110);
INSERT INTO employee VALUES(02,‘Jack‘,119119119);
INSERT INTO employee(id,name) VALUES(03,‘Rose‘);

有的数据需要用单引号括起来,比如 Tom、Jack、Rose 的名字,这是由于它们的数据类型是 CHAR 型。此外 VARCHAR,TEXT,DATE,TIME,ENUM 等类型的数据也需要单引号修饰,而 INT,FLOAT,DOUBLE等则不需要。

第一条语句比第二条语句多了一部分:(id,name,phone) 这个括号里列出的,是将要添加的数据 (01, ‘Tom‘, 110110110) 其中每个值在表中对应的列。而第三条语句只添加了 (id,name) 两列的数据,所以在表中Rose的phone为NULL。

CHAR 和 VARCHAR 的区别: \
CHAR的长度是固定的,而VARCHAR的长度是可以变化的,比如,存储字符串
“abc",对于 CHAR(10),表示存储的字符将占 10 个字节(包括 7 个空字符),而同样的 VARCHAR(12) 则只占用4个字节的长度,增加一个额外字节来存储字符串本身的长度,12 只是最大值,当你存储的字符小于 12 时,按实际长度存储。
ENUM和SET的区别: ENUM类型的数据的值,必须是定义时枚举的值的其中之一,即单选,而SET类型的值则可以多选。

RDBMS

即关系数据库管理系统(RelationalDatabaseManagementSystem)的特点:

1、数据以表格的形式出现

2、每行为各种记录名称

3、每列为记录名称所对应的数据域

4、行和列组成一张表单

5、若干的表单组成database

[client]#设置mysql客户端默认字符集

default-character-set=utf8

[mysqld]

port=3306#设置3306端口

basedir=C:\\web\\mysql-8。0。11#设置mysql的安装目录

#设置mysql数据库的数据的存放目录,MySQL8+不需要以下配置,系统自己生成即可,否则有可能报错

#datadir=C:\\web\\sqldata

max_connections=20#允许最大连接数

character-set-server=utf8#服务端使用的字符集默认为8比特编码的latin1字符集

default-storage-engine=INNODB#创建新表时将使用的默认存储引擎

日期和时间


类型


大小(字节)


范围


格式


用途


DATE


3


1000-01-01/9999-12-31


YYYY-MM-DD


日期值


TIME


3


‘-838:59:59‘/‘838:59:59‘


HH:MM:SS


时间值或持续时间


YEAR


1


1901/2155


YYYY


年份值


DATETIME


8


1000-01-0100:00:00/9999-12-3123:59:59


YYYY-MM-DDHH:MM:SS


混合日期和时间值


TIMESTAMP


4


1970-01-0100:00:00/2038


YYYYMMDDHHMMSS


混合日期和时间值,时间戳

 

 

MYSQL存储引擎

InnoDB支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。

MyISAM插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用。

MEMORY所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。

MySQL查询优化

mysql查询优化,1万条数据30秒;

1、 表的主键、外键必须有索引;

2、 数据量超过300的表应该有索引;

3、 经常与其它表进行连接的表,在连接字段上应该建立索引;

4、 经常出现where子句中的字段,特别是大表的字段,应该建立索引;

5、 索引应该建在选择性高的字段上;

6、 索引应该建在小字段上,对于大的字段甚至超长字段,不要建索引;

7、 复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替;

8、 频繁进行数据操作的表,不要建立太多的索引;

9、 删除无用的索引,避免对执行计划造成负面影响;

MySQL慢查询

MySQL的慢查询,全名是慢查询日志 ,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阈值的语句;

具体环境中,运行时间超过long_query_time的值的SQL语句,则会被记录到慢查询日志中。

long_query_time的默认值为10,意思是记录运行10秒以上的语句。默认不开启,调优时候开启,会对性能有一定影响,支持将日志文件写入文件和数据表。

原文地址:https://www.cnblogs.com/qingaoaoo/p/12326072.html

时间: 2024-11-05 18:30:11

数据库 - Mysql基础的相关文章

趁一切还来得及【一】数据库MySQL基础知识及编译安装

此情更待成追忆,只是当时已惘然.                                        --[唐]李商隐 第一章 数据库概述及分类特点应用 1.1 数据库种类.语言处理.典型产品 ①数据库的理解:就是一个存放数据的仓库,这个仓库是按照一定的数据结构,来组织和存储的.可以通过数据库提供的多种方法来管理数据库. ②数据库的种类:按照早期的数据库理论分为层次数据库.网络式数据库.和关系型数据库.当今互联网最常用的就是关系型数据库和非关系型数据库(NOSQL). ③关系型数据库:

数据库mysql基础1

一.开启mysql服务器三种方法 1.通过windows管理的方式进行开启 2.通过dos命令行开启 3.直接使用bin目录下的mysqld来完成 二.登录mysql客户端 一般继续输入: set names gbk;-- 客户端字符集为gbk; 设置默认数据库:use 数据库名: 三.MySQL的注释符 1.单行注释: # -- 注释内容,注意,其中-与注释内容之间有一个空格! 2.多行注释: /*  注释内容  */ 四.DDL:Data Definition Language,数据定义语言

PHP学习之[第08讲]数据库MySQL基础之增删改查

一.工具: 1.phpMyAdmin (http://www.phpmyadmin.net/) 2.Navicat (http://www.navicat.com/) 3.MySQL GUI Tools (http://dev.mysql.com/downloads/gui-tools/) 二.语法: 数据类型 描述 应用范围 int,smallint 整型,常用int型,取值最大11位 点击量,编号,真假 char ,varchar 字符串型,char最大取值255字节,varchar更长并伸

[python] 专题九.Mysql数据库编程基础知识

在Python网络爬虫中,通常是通过TXT纯文本方式存储,其实也是可以存储在数据库中的:同时在WAMP(Windows.Apache.MySQL.PHP或Python)开发网站中,也可以通过Python构建网页的,所以这篇文章主要讲述Python调用MySQL数据库相关编程知识.从以下几个方面进行讲解: 1.配置MySLQ 2.SQL语句基础知识 3.Python操作MySQL基础知识 4.Python调用MySQL示例 一. 配置MySQL 首先下载mysql-5.0.96-winx64,安装

mysql基础和数据库的优化

Mysql基础... 4 Mysql介绍... 4 登录mysql mysql –u root –p[掌握]... 4 SQL语言... 4 DCL. 4 grant. 4 revoke. 4 DDL. 4 建库... 4 删库... 4 建表... 4 看表结构... 5 删表... 5 修改表... 5 DML[重点]... 5 增加... 5 删除... 5 修改... 5 查看... 5 排序... 5 总数... 5 求和... 5 平均... 6 最大... 6 最小... 6 表连

(3.15)mysql基础深入——mysql默认数据库/系统数据库

(3.15)mysql基础深入——mysql默认数据库 关键词:Mysql默认数据库,mysql系统数据库 1.系统数据库的组成 一共4个 [1]information_schema [2]mysql [3]performance_schema [4]sys [1]information_schema [2]mysql mysql数据库是Mysql核心的数据库,类似于sql server中的master库,oracle中的system部分功能. 主要负责存储数据库的用户/权限等Mysql自己需要

MySQL基础/数据库和表的设计

MySQL基础 一:安装MySQL(按步骤操作,如果下载后使用不了,试着用360安全卫士卸载MySQL,清除残留的,方便在下载造成不必要的麻烦:如果这样也不行,那就需要重做系统在进行下载) 二:创建数据库/表 黑窗口:1:输入密码 2:show databases:查看数据库 3:create database 库名:创建库 4:use 库名:使用库 5:create table 表名:创建表( 列名数据类型(约束条件),    //用逗号隔开 ): 6:show tables:查看库里有哪些表

专题九.Mysql数据库编程基础知识

https://blog.csdn.net/Eastmount/article/details/52156383 这篇文章主要讲述Python调用MySQL数据库相关编程知识.从以下几个方面进行讲解: 1.配置MySLQ 2.SQL语句基础知识 3.Python操作MySQL基础知识 4.Python调用MySQL示例 一. 配置MySQL 原文地址:https://www.cnblogs.com/chenhuan123/p/12038446.html

MySQL数据库的基础架构

前言 我思故我在 MySQL基础架构图 MySQL组成部分说明 ①连接器 作用:负责和客户端建立连接,权限校验,管理和维护连接,连接完成处于空闲状态. 问题:如何查看空闲列表? 答案:通过show processlist查看,在Command字段,为Sleep为空闲状态. 引申:我们知道如果客户端长时间不相应,那么会断开连接,而这个时长由wait_timeout控制,默认时间8小时. 命令:SHOW GLOBAL VARIABLES LIKE 'wait_timeout'; 注意我们在这里得到的