MySQL的简单介绍和基本使用
相信学计算机的朋友应该对数据库不陌生了,数据库顾名思义就是存储数据和管理数据的仓库。 目前使用的数据库种类比较多,总体分为两个大类:关系型数据库和非关系型数据库,而MySQL就是典型的关系型数据库。
MySQL由于是免费的数据库并且性能也可以承载中小型的项目,所以也是使用频率比较高的数据库之一。
那么为什么说MySQL是关系型数据库呢? 因为MySQL数据库就是由一张张表构成,表与表之间通过直接或间接的关系联系起来。
首先来讲一下数据库的安装,安装之前要先目标,数据库是有两种不同版本的:客户端和服务端。
首先用户通过客户端输入SQL语句与存放在服务器中的数据库进行数据一系列操作,所以说如果想要在自己的电脑上建立MySQL数据库,那么就需要形成一个闭环,就是服务端和客户端要同时存在于这台电脑上。 要么就是通过MySQL客户端对服务器上的MySQL进行操作,而一般的新人大概率是没有服务器的。
所以想要在本地建立一个MySQL数据库,就需要下载一个MySQL服务端。
链接如下:MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/
MySQL服务器端是一个Zip压缩包,然后解压一下,并且配置环境变量之后就可以使用了。
(具体如何配置,请查阅有关资料)
配置好了MySQL服务端以后,用户可以直接进行命令端操作也可以直接下载一个MySQL客户端操作,客户端软件有很多:navicat 、 Workbench等等
注意:在MySQL官网当中有很多的软件,如果看不懂请将页面翻译成中文,在MySQL官网有很多软件不要下错了。。。。
使用图形界面以后就可以很轻松的建立数据库和进行建表操作,所以在这里是讲解SQL代码操作,不用图形界面。
0.登入数据库
在命令提示符窗口输入:
mysql -uroot -p # -u 用户 -p: password
如图所示,输入 mysql -uroot -p 以后回车输入密码就可以登入MySQL数据库了。
如果没有登入成功原因有几点:
1. 没有配置好MySQL服务器,没有启动MySQL服务器
2. 初始化数据库时设置了密码但忘记了,如果没有设定用户名和密码也可以使用这个方法登入,在提示输入密码后直接回车,因为初始化根用户没有密码直接回车就行
注意: 设置MySQL密码操作有些许繁琐,在此不过多赘述。
1. 创建数据库操作
create database my_datebase charset = 'utf-8' ;
create database 创建数据库的名字;
charset = 'utf-8' 数据库的字符编码集,使用utf-8, 就代表数据库可以输入中文
2.查看数据库操作
show databases;
使用这条命令可以查看所有的数据库
3. 切换数据库
use my_database;
use 切换的数据库名称;
注意:每一条SQL语句结束以后要加一个分号
4.退出数据库
quit;
退出数据有几种方法!
5.查看创建数据库的语句
show create database my_database;
show create database 数据库名字;
6.查看创建数据表语句
show create table student;
show create table 表名;
创建数据表操作在后面会讲解
7.显示当前时间
select now();
8.查看当前使用数据库
select database();
9.查看当前数据库所有的数据表
show tables;
创建数据表操作后面会讲解到
9.9 查看数据表中的字段和约束
使用 desc 表名;
10. 创建数据表
create table student( id int primary key unsigned not null auto_increment ,
name varchar(10) not null,
sex varchar(3) default "男");
create table 表名( 字段名 字段类型 字段约束);
说到创建表的操作就需要明确几个词语:字段、约束。
字段就是相当于Excel当中的列名,在Excel中每一列都有一个列名来告诉用户这一列的数据是什么,同样的在数据库当中也有,在数据库中称为字段(个人解释,官方解释请查阅相关资料)
在MySQL中常见的约束有:
primary key : 主键约束:一个表只能有一个主键且不能为空不能重复
not null : 不能为空 : 非空约束
default : 设置默认值 : 默认约束
foreign key : 设置外键(外键就是另一种表的主键): 外键约束
unique: 唯一约束
其他:
auto_increment : 自动增长
unsigned: 表示无符号
在MySQL当中常用的数据类型:
int : 整数
tinyint : 小整数(范围-128 ~ 127)、此外还有 bigInt 、smallint 每个类型的范围不一样。
char (): 不可变的长度
varchar() : 可变长度的
decimal(): 浮点数
time(): 时间
date() : 日期
datetime: 日期 时间
year(): 年份
数据类型的使用:
char(3) : 输入字符'ab'时,不足三个字符会自动补一个空格即'ab '
varchar(3)类型: 如果是输入字符'ab',就不会自动补空格(有几个算几个,就是可变长度的)
decimal(5,3)浮点类型:表示总共五位,小数部分三位,括号前面一个参数表示总位数,后面一个参数表示小数的位数。
创建好表以后就可以对数据表进行一系列的操作,一般的操作有 增删改查。
1. 增加数据
insert into student(name,sex) values( '帅哥','男');
insert into 表名(要增加的列名) values (增加的数据,增加的数据)
# 上面是增加单行数据,接下来增加多行数据
insert into student(name,sex) values('大帅哥','男'),('美女','女');
# 如果表面后面不加(列名),那么默认添加所有数据
insert into student values(3 , '英雄', '男')
2. 查看数据
# 查看所有数据
select * from student ;
# 查看一列数据
select name from student;
# 查看两列数据
select name,sex from stuent;
select 要查看的列名 from 表名;
3. 删除数据
# 删除一列
alter table student drop age;
# 删除一个数据
delete from student where id=3;
# 删除数据表
drop table;
删除数据库
drop database;
# 一般不会使用delete对数据进行删除,因为这是物理删除,删除了就没有,一般采用逻辑删除
where语句的用法:
where语句是判断语句,用户可以在where语句后面加上指定的条件,对数据进行筛查,比如上面代码: where id = 3 ; 就是在student表中查找id = 3 的一组数据并返回,如果没有找到则不返回。
了解where语句的用法之后,就可以使用where语句进行各种筛查了。
例子1 : 查询所有男生
select * from student where sex='男';
例子2 : 查询所有年龄大于20 岁的男生
select * from student where age >20;
例子3 :查询所有工资高于10000元且年龄小于25岁的男生
select * from student where sales >10000 and age <25;
例子4:查询工资范围在10000元至50000元的男生
select * from student sales >10000 and sales <50000;
例子5:查询名字是萧开头的男生
select * from student where name like '萧%';
例子6: 查询名字是锋结尾且是三个字的男生
select * from student where name like '__锋';
下划线(_):代表一个字符 百分号(%):代表任意个字符
例子7:查看年龄为空的学生
判断是否为空用 : is null
select * from student where age is null;
4.数据表的更新操作
# 数据表的更新操作
update 表名
set 列名=要更新的内容
where 条件查询
例子如下:我要更新ID=3 的同学的名字和年龄
update student
set name = '武林盟主' ,age = 30
where id = 3 ;
# 以上是对数据表的内容更新,下面是对数据表的字段进行更新、删除和修改
# 添加字段
alter table student add name varchar(8)not null ;
alter table 表名 add 字段名 字段类型 字段约束
# 修改字段类型和约束
alter table student modify age int default 18 ;
alter table 表名 modify 字段名 修改后的字段类型 修改后的字段约束;
# modify 不能修改字段名
# 修改字段名
alter table student change age agess tinyint default 18;
alter table 表名 change 旧的字段 新的字段 字段类型 字段约束;
以上就是数据库的增删改查操作了。
# 补充内容
as 和distinct 关键字
as 在MySQL当中就是起一个别名,举两个例子
# 给数据表取别名
select * from student as st;
# 给列取别名
select name as 名字,age as 年龄 from student ;
distinct 关键字就是去除重复项,举个例子
# 假设学生年龄当中有三个年龄是是重复的(就有三个20岁的同学),那么想知道这个班级有多少个年龄段的同学(年龄不同的为一段),那么如果直接:
select age from student; 查看所有年龄在一个个数就会发现有重复的年龄, 那么使用distinct关键字
select distinct age from student 就会去掉重复的年龄
between and 用法
在进行判断的时候如果要判断一个范围内的数据,那么可以用between and , 举个例子
# 要判断工资超过5000 元低于10000元的同学
select * from student sales between 5000 and 10000;
相当于:select * from student sales >5000 and sales <10000;
in 的用法
# 假设要查看工资为3000 、5000、 6000 、8000 的同学
可以用 三个 or 连接,不过太麻烦了就可以直接使用in
select * from student where sales in (3000,5000,6000,8000);
查询结果排序
order ..... by....
# 对查询的结果按照年龄进行降序排序
select * from student order by age desc;
# 对查询结果按照年龄进行升序排序
select * from student order by age asc;
默认情况下进行升序排序
对查询数据进行分页操作
使用关键词 limit start count;
# 对查询数据进行分页,一页10条数据
select * from student limit 0,10 或者 select * from student 10;
想要查看第n页的数据
select * from student limit (n-1)*m , m;
MySQL数据库的高级用法
聚合函数
常用的聚合函数有 :max() , min(), avg() , sum() , count()
max() 表示求指定列的最大值
# 查找年龄最大的人的名字
select name from student where age = (select max(age) from student);
# 返回最大年龄
select max(age) from student;
# 返回平均年龄
select avg(age) from student;
# 返回最小年龄
select min(age) from student;
# 返回这列的数量
select count(age) from student; # 统计null 的行数
聚合函数一般配合(group by)来使用
# 注意 avg(ifnull(height, 0 )) ifnull函数的使用
分组查询
group by 语句
# 查看所有男生
select name,sex from student group by name,sex;
注意,查询字段要和 分组字段相同,不然会报错
having 的作用和where 的作用类似,但是where不能过滤分组数据所以就要用having
group by + group_concat(name) 用法
group_concat() 就是将分组中的一列显示出来
with rollup 用法
对比两张图片,自行区分with rollup 和 group_concat()的区别
连接查询
一般情况下都不会只查询一张表的数据而是进行连表查询,查询多张表的数据。
连接查询有几种情况:
内连接 左连接 右连接 自连接
如图所示:
如果取左半部分就是左连接,如果取中间交叉部分就是内连接,反之就是右连接
# 内连接查询
# 假设我们有两张表:学生表:student(id,name, sex,age , student_number) 和 班级表:class(student_number, class_and_grade)# 注释 student_number : 学号 , class_and_grade : 班级
那么我们要查看所有学生的基本信息和班级,如何操作呢?
那么就涉及两张表了,就需要进行连表查询
select * from student, class where student.student_number = class.student_number;
(此语句来源于SQL server写法)
内连接写法如下:
select * from student inner join class on student.student_number = class.student_number
运行结果同上
# 左连接查询
以左表为主查询表,在class查询不到的就用null值代替
# 右连接查询
以右表为主查询表,在student表中查询不到就用null代替
# 自连接查询
自连接就是自己与自己进行连接查询
select name from student as s inner join student as p on s.id = p.id
写法如上,代码未测试
子查询:简单来讲就是嵌套查询
# 查询大于平均年龄的人的信息
select * from student where age >(select avg(age) from student);
在查询中嵌套子查询
数据库的三大范式:
第一范式:数据表中的每一项都是原子属性不可再分
第二范式:满足第一范式的基础上,非主键元素对主键完全依赖
第三范式:满足第二范式的基础上,非主键元素对主键完全依赖,并且不存在传递依赖
总共有八层范式,每一层范式划分越来越严格
第一范式: (学号,姓名,性别,班级,班主任)
拆解第一范式 ------> 第二范式
第二范式: (学号,姓名,性别,班级)(班级,班主任)
拆解第二范式 ------> 第三范式
第三范式: (学号,姓名,性别),(学号,班级),(班级,班主任)
设置外键
设置外键的好处,可以保证数据的准确性,比如班级假设班级有4个,那么学生在选择班级的时候就只能选着4个,不能选其他班级。
# 为student表的class_id绑定外键 class_id
因为已经创建了student所以我们只需要进行添加就可以了
alter table student add foreign key (cls_id) references class(class_id);
- 添加外键约束: alter table 从表 add foreign key(外键字段) references 主表(主键字段);
# 创建表时添加外键
create shoo( id int not null primary key auto_increment, name varchar(10) );
create teatch( id int not null primary key auto_increment,
name varchar(8),
s_id int not null,
foreign key(s_id) references shoo(id));
# 删除外键约束
# 查看获取系统给的外键名称 show create table 表名;
# 删除外键 alter table 表名 drop foreign key 外键名(teacher_ibfk_1) ;
MySQL的高级操作
将查询结果插入到其他表中
使用连接更新某个表中字段的数据,就比如上面这个,将男女所对应的ID号更新到student表中
创建表的时候将一列数据添加进去
修改表的字段结构,一次可以修改多个
alter table student change age tinyint default 18 , change sex varchar(3) not null default '男';
pymysql的使用:
首先要来介绍pymysql的几种方法:
connect() 方法: 连接数据库 cursor()方法:创建游标对象
fetchone()\fetchall(): 抓取一条数据或所有数据
commit() : 提交方法用于将对数据库的操作进行提交
close(): 关闭 rollback():回滚
使用Python模块(pymysql)对数据库进行增删改查操作代码如下:
import pymysql# 连接数据库 mysql = pymysql.connect(user='root',password='mysql',database="my_database",) """ connect(host,user,password,port,database,charset) host:MySQL的主机IP ,如果是本机就是localhost user:数据库用户名 password:用户密码 port: 端口号 database:数据库名称 """ # 创建游标 cursor = mysql.cursor() try:# # 查看数据操作# sql = 'select * from student'# # 执行SQL语句# cursor.execute(sql)# # 打印结果# print(cursor.fetchall())# 添加数据操作# sql = "insert into student(name,sex,age) values(%s,%s,%s),(%s,%s,%s)"# cursor.execute(sql,['宇宙至尊','男',100000,'无敌王者','男',8000])# sql2 = 'select * from student'# cursor.execute(sql2)# mysql.commit()# print(cursor.fetchall())# 修改数据库中的数据# sql = "update student set age = 100000 where id = 13"# row_count = cursor.execute(sql)# print(row_count)# mysql.commit()# sql2 = 'select * from student'# cursor.execute(sql2)# print(cursor.fetchall())# 删除操作sql = "delete from student where id=1"cursor.execute(sql)mysql.commit()sql2 = 'select * from student'cursor.execute(sql2)print(cursor.fetchall()) except Exception as s:mysql.rollback()cursor.close() mysql.close()
事务
事务的四个特点:原子性、隔离性、持久性、一致性。
原子性:简单来说就是不能够在分了,就像把一个东西焊接起来了,这个东西就不能在拆卸开来成为最小的单元这就是原子性。
隔离性:就是事务与事务之间相互隔绝,在事务处理完之前完全隔绝
持久性:事务对数据进行操作具有持久性,对数据库操作永久保存和更改
一致性:事务中可能有多条代码,必须全部执行成功才会执行事务,不然就会进行回滚,保证事务的一致性
事务的使用要求:引擎要是innoDB,其他引擎不能使用事务
使用: show engines; 查看数据使用的引擎 (MyISAM 引擎不支持)
修改引擎:alter table 表名 engine = 引擎类型;
事务的写法如下:
begin;
sql 语句
commit;
索引
建立索引可以快速查询数据
# 查看表中的索引
show index from student;
# 索引的创建
alter table classes add index my_name (name);
# 索引的删除
alter table classes drop index my_name ;
# 创建联合索引
alter table teacher add index (name,age);
# 联合索引的的最左原则
在使用联合索引查询数据的时候一定要保证联合索引的最左侧字段出现在查询条件里面,否则联合索引失效,这就是最左原则。
# 联合索引的使用:
联合索引和普通的where表达式一样,但是如果添加了索引会按照索引的方式去查询,速度更快
select * from stu where name='至尊战神' -- 这里使用了联合索引的name部分
MySQL的简单介绍和基本使用相关推荐
- MySQL 数据库简单介绍
目录 前言 正文 MySQL 数据库的发展现状 MySQL 数据库的优势和历史 MySQL 数据库的分支版本 结尾 前言 一般来说,数据库被分为关系型数据库(RDS)和非关系型数据库(NoSQL),其 ...
- 数据库和MySQL的简单介绍
目录 一.数据库的介绍 1.1 什么是数据库 1.2 数据库的分类 二.MySQL的介绍 2.1 MySQL的结构 2.2 MySQL服务器如何组织数据 一.数据库的介绍 1.1 什么是数据库 数据库 ...
- Mysql数据库简单介绍
内容概要 一.数据库的组成 二.数据库管理系统(DBMS) 三.数据库系统(DBS) 四.当今主流数据库 五.关系型数据库介绍 六.非关系型数据库介绍 七.Mysql数据库介绍 一.数据库的组成 1. ...
- mysql数据库简单介绍_数据库的简单介绍
关系型数据库与非关系型数据库 关系型数据库:mysql /oracle/sql server/sqlite 优点: 1.易于维护:都是使用表结构,格式一致: 2.使用方便:sql语言通用,可用于复杂查 ...
- mysql,简单介绍一下索引
汉字很多,人力有时尽,人不可能记住所有的字,为了解决这个问题,于是有了字典.数据库里的数据很多,为了方便检索,于是有了索引. 索引,是一种数据结构,在这种数据结构中实现了高级的查找算法,索引可以帮助我 ...
- mysql binlog update_mysql binlog 简单介绍与基于binlog数据恢复
mysql binlog 简单介绍与基于binlog数据恢复 通过备份文件恢复 binlog(本节重点) binlog 二进制日志文件 show variables like 'log_bin'; 二 ...
- MySQL数据库配置文件介绍及使用
MySQL数据库配置文件介绍及使用 一 MySQL配置文件简单介绍 二 配置参数详细介绍 2.1 设置端口 2.2 设置数据库文件存储目录 2.3 创建新表时将使用的默认存储引擎 2.4 设置最大连接 ...
- [第11天]mySQL简单介绍
昨天我们说到了SQL,很多朋友说很难,我也知道很难的,说那个只是让大家有个基本的了解,不然以后说一些问题时会很困难的.今天我们来说mySQL,之所以说它是为了让大家对数据库能有个较深的了解.MySQL ...
- Mysql数据库的简单介绍
在当今的大数据时代,数据库已成为必不可少的数据工具.什么是数据库呢,数据库(Database)是按照数据结构来组织.存储和管理数据的仓库. MYSQL是目前最为流行的关系型数据库系统,关系型数据库系统 ...
最新文章
- r语言把两个折线图图像放到一个图里_图像相似度度量
- [转帖]Sqlcmd使用详解
- 搞大了,修改一个参数后重启数据库服务器出错CRS-0184
- Java基础—异常分类及处理
- CodeForces - 1076D Edge Deletion(最短路+贪心/最短路树+bfs)
- hdu 4442 Physical Examination (2012年金华赛区现场赛A题)
- 【angularjs】使用angular搭建项目,pc端实现网页中的内容不可复制
- Schema evolution in Avro, Protocol Buffers and Thrift
- Spring 事务使用详解
- 初涉Linux(无代码)
- 违法收集使用个人信息 抖音、快手、猎聘等105款App被点名
- Idea运行报错Error running ‘Application‘: Command line is too long的解决方法
- 位运算(异或运算) :数组中数字出现的次数
- html飞机大战游戏实验报告,JavaScript原生编写《飞机大战坦克》游戏完整实例
- sql分组排序, 分页查询
- teredo 未能解析服务器名,Win10系统Xboxlive显示Teredo无法进行限定怎么解决
- mac 重置mysql_mac 重置mysql 登录密码
- 服务器虚拟化解锁方案,RX 5700乐成刷入RX 5700 XT BIOS:频率、功耗双双解锁
- 六种常用的文本聚类算法介绍
- python中strip() 函数和 split() 函数的理解
热门文章
- 『线程池』在.NET中如何优雅地调优ThreadPool
- 【极客日报】Google 开源虚拟现实绘图应用 Tilt Brush;深圳锤子数码科技有限公司已注销...
- 百度地图开发(二)之添加覆盖物 地理编码和反地理编码
- A*地图最短路径算法
- java stringbuilder清空_Java中StringBuilder的清空方法比較
- JFreeChart简单介绍及用法(入门)
- 如何在Outlook 2010中使用密件抄送(密件抄送)
- hibernate关闭自动建表
- C#窗体TextBox只能输入数字
- CodeForces - 97B Superset (思维/分治/构造)