一、初识MySql

1、为什么要学习数据库

  • 公司业务需求,岗位要求
  • 用来存储数据信息
  • 大数据时代,数据库是基本要求
  • 数据库也是所有软件体系中的核心存在

2、什么是数据库(DataBase)?

  • 数据库是“按照数据结构来组织、存储和管理数据的仓库”,是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。
  • 数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。

3、数据库的分类

关系型数据库:(Sql)
  • 通过表和表之间的关系进行存储的数据,如学生信息表,成绩表;
  • 常见的关系型数据库:MySql、Oracle、Sql Sever、DB2等
非关系型数据库
  • 非关系型数据库存储对象,由对象自身的属性决定;
  • 常见的非关系型数据库:Redis、MongoDB。

4、什么是MySql?

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。 一般中小型网站和大型网站的开发都选择 MySQL 作为网站数据库。

二、MySQL安装、Sqlyog安装

命令行安装MySQL步骤

1、下载软件

64位安装软件下载链接
根据自己的电脑配置下载相关的软件包

2、安装步骤
  1. 将下载好的软件包解压到自己想安装的目录下,如:E:\Environment\mysql-5.7.19
  2. 添加环境变量:
    1、打开自己电脑的环境变量配置;
    2、选择Path,在后面加上MySQL中的bin文件夹的路径;
    3、E:\Environment\mysql-5.7.19下新建 my.ini 文件;
    4、编辑新建的 my.ini 文件,将其中路径切换为自己的文件路径;
[mysqld]
basedir=E:\Environment\mysql-5.7.19\
datadir=E:\Environment\mysql-5.7.19\data\
port=3306
character-set-server=utf8
skip-grant-tables
  1. 启动管理员模式下的CMD,然后切换目录到MySQL下的bin,再输入 mysqld –install 进行安装

  2. 再输入mysqld --initialize-insecure --user=mysql初始化数据文件

  3. 然后输入net start mysql再次启动 mysql 再使用命令mysql –u root –p 进入mysql管理界面(密码可为空)

  4. 进入页面后更改root密码:
    update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';
    再输入flush privileges;刷新权限

  5. 将第2步中的 my.ini 文件中的skip-grant-tables 删掉

  6. 重启mysql即可正常使用 net stop mysql ; net start mysql

安装完成正常使用的界面:

Sqlyog安装

SQLyog下载链接

下载完成后正常安装即可。

命令行连接数据库

mysql -uroot -p123456

三、操作数据库

1、 操作数据库 – 操作数据库中的表 – 操作数据表中的数据

1、创建数据库

CREATE DATABASE `westos`;

2、删除数据库

DROP DATABASE `westos`;

3、使用数据库

use `westos`;

4、查看所有的数据库

SHOW DATABASES;

2、数据库的列类型

数值

tinyint --特别小数据 1字节
smallint --较小的数据 2字节
int --标准的整数 4字节
bigint --较大的数据 8字节
float -- 单精度浮点数 4字节
double -- 双精度浮点数 8字节
decimal --字符串形式的浮点数,一般用于金融计算

字符串

char --字符串大小固定 0-255字符
varchar --可变字符串 0-65535字符
tinytext --微型文本 2^8-1个字符
text --文本串 2^16-1个字符

时间日期格式

date --YYYY-MM-DD 日期格式
time --hh:mm:ss 时间格式
datetime --最常用的时间日期格式 YYYY-MM-DD hh:mm:ss
timestamp --时间戳 1970.1.1到现在经过的毫秒数

3、数据库的字段属性

Unsigned

  • 无符号的整数
  • 不能为负数

zerofill

  • 0填充
  • 位数不足,0来填充,如:int(3),1 – 001

自增

  • 自动在上一条记录上加1
  • 自增的字段必须是整数类型

非空

  • not null,不填写就会报错

4、创建数据库的数据表

创建一个school数据库
创建student数据表
列属性:id(10)name(20)sex(2)birthday(10)phone(20)
主键为id,自增

-- 创建数据库
CREATE DATABASE IF NOT EXISTS `school`;
-- 创建数据表
CREATE TABLE IF NOT EXISTS `student`(`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '学号',`name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',`birthday` DATETIME DEFAULT NULL COMMENT '生日',`phone` VARCHAR(15) DEFAULT NULL COMMENT '联系方式',PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

创建数据表的格式

CREATE TABLE IF NOT EXISTS `表名` (`字段名` 列类型  属性  注释,......
)表类型 字符集设置 注释

5、数据表的类型

  • INNODB 默认使用类型
  • MYISAM 早期使用的数据表类型

这两个数据表的区别:

MYISAM INNODB
事务 不支持 支持
数据行锁定 不支持 支持
外检约束 不支持 支持
全文索引 支持 不支持
表空间大小 较小 较大,约为MYISAM的两倍
优点 节约空间,速度快 安全性高,可以处理事务、多表的用户操作

数据表在物理空间的存储位置

创建的所有数据库都在安装 MySQL 的目录下的 data 文件夹中。

数据表的字符编码

CHARSET=utf8

6、对数据表的修改和删除

修改

-- 修改表名 格式:ALTER TABLE 原表名 RENAME AS 新表名
ALTER TABLE `teacher` RENAME AS `newteacher`;
-- 增加表中的字段 ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE `newteacher` ADD `age` INT(3);
-- 修改表的字段 ALTER TABLE 表名 MODIFY 字段名 列属性
ALTER TABLE `newteacher` MODIFY `id` VARCHAR(15);
-- 修改字段的名字 ALTER TABLE 表名 CHANGE 原字段名 新字段名
ALTER TABLE `newteacher` CHANGE `id` `newid` INT(3);
-- 删除表的字段 ALTER TABLE 表名 DROP 字段名
ALTER TABLE `newteacher` DROP `age`;

删除

-- 删除表
DROP TABLE IF EXISTS `newteacher`;

在所有的创建和删除和删除操作时加上判断操作,以免程序报错。

四、MySQL数据管理

1、外键

在创建外键的时候,增加外键约束

-- 创建年级表
CREATE TABLE `grade`(`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',PRIMARY KEY (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 创建学生表,添加外键约束
CREATE TABLE IF NOT EXISTS `student` (`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',`pwd` VARCHAR(20)NOT NULL DEFAULT '123456' COMMENT '密码',`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',`gradeid` INT(10) NOT NULL COMMENT '学生的年级',`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',PRIMARY KEY(`id`),-- 定义外键KEY `FK_gradeid` (`gradeid`),-- 给外键添加约束CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

创建表成功后,添加外键约束

-- 格式:ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY (外键的列) REFERENCES 哪个表(哪个字段)
ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);

2、DML语言(数据库操作语言)

  • insert(插入语句)
    注意点:字段和字段之间要用英文逗号隔开;字段的名字是可以省略的,但后面的字段的值要和每个字段对应。
-- 插入一个字段
INSERT INTO `grade`(`gradename`)VALUES('大一');
-- 插入多个字段
INSERT INTO `grade`(`gradename`)VALUES('大二'),('大三');
INSERT INTO `student`(`name`)VALUES('lili');
INSERT INTO `student`(`name`,`pwd`,`sex`)VALUES('heihei','123456','男');
INSERT INTO `student`(`name`,`pwd`,`sex`)VALUES('zhangsan','789456','男'),('lisi','789123','nv');
  • update(修改语句)
-- 修改字段的值,指定位置进行修改
UPDATE `student` SET `name`='zhaohang' WHERE `id`='1';
-- 如果不指定位置进行修改,会将所有的字段值全部修改
UPDATE `student` SET `name`='update';
-- 修改字段的多个属性,用逗号隔开
UPDATE `student` SET `name`='zhangsan',`pwd`='01011110' WHERE `id`='1';
-- 通过where定位字段,可以设置区间或大于小于某个值。
  • delete(删除语句)
DELETE FROM `student` -- 不推荐这样写,会删除数据表中所有的数据
DELETE FROM `student` WHERE id='4';  -- 指定字段进行删除
-- TRUNCATE命令,清空一个数据库的表,但表的结构和约束不会变
TRUNCATE `student`;

delete和truncate的相同和区别:

相同:都可以删除数据,但不会破坏表的结构
区别:TRUNCATE 后表的自增会归零,不会影响事务。

五、DQL数据查询

1、DQL数据查询语言(Data Query Language)

  • 数据库中所有的查询操作都使用 SELECT
  • 数据库中最核心的语言和操作
  • 使用频率最高的操作

2、 指定字段查询

-- 查询所有的学生
SELECT *FROM `student`;
-- 指定查询的字段
SELECT `StudentName`,`GradeId` FROM `student`;
-- 给查询的字段结果起一个自定义别名进行查询
SELECT `StudentName` AS '学生姓名' FROM `student`;
-- 拼接字符串函数concat()
SELECT CONCAT('姓名:',`StudentName`) `newname` FROM `student`;

查询语法:SELCET 字段 FROM 数据表

查询结果去重:如果查询的结果出现重复的数据,只显示一条

-- 去重查询
SELECT DISTINCT `StudentNo` FROM `result`;

表达式

-- 查看系统版本
SELECT VERSION();
-- 计算数据
SELECT 1000*12-15464 AS 结果;
-- 计算自增的步长
SELECT @@auto_increment_increment;

3、where 指定条件进行查询

获取符合条件的数据

-- where 指定条件进行查询
-- 查询成绩大于等于90的学生的学号和成绩
SELECT `StudentNo`,`StudentResult`FROM `result` WHERE `StudentResult`>=90;
-- &&查询
SELECT `StudentNo` FROM `student` WHERE `StudentNo`>1005&&`Sex`='1';
-- between and 区间查询
SELECT DISTINCT `StudentNo` FROM `result` WHERE `StudentResult` BETWEEN '85' AND '90';
-- NOT和!=
SELECT `GradeId` FROM `student` WHERE NOT `StudentNo`='1000';
SELECT `GradeId` FROM `student` WHERE `StudentNo`!='1000';

4、Join 联表查询

连接方式 描述
Inner Join 如果表中至少有一个匹配,就返回该行
Left Join 从左表中返回左右的值,即使右表中没有匹配
Right Join 从右表中返回所有的值,即使左表中没有匹配

使用合适:

SELECT 字段1,字段2,...
FROM 第一个表
连接方式
ON 判断条件
  • Inner Join
-- 联表查询 参加了考试的同学的学号、姓名、科目编号、分数
/*分析步骤:1、分析查询的字段来自那些表2、确定使用那种查询方式:a、确定交叉点(这两个表中的那些数据是相同的)b、判断的条件:学生表中的studentNo=成绩表中的studentNo
*/
SELECT s.`StudentNo`,`StudentName`,`SubjectNo`,`StudentResult`
FROM `student` AS s
INNER JOIN `result` AS r
WHERE s.`StudentNo`=r.`StudentNo`;
  • Left Join
SELECT s.`StudentNo`,`StudentName`,`SubjectNo`,`StudentResult`
FROM `student` s
LEFT JOIN `result` r
ON s.`StudentNo`=r.`StudentNo`;
  • Right Join
SELECT s.`StudentNo`,`StudentName`,`SubjectNo`,`StudentResult`
FROM `student` s
RIGHT JOIN `result` AS r
ON s.`StudentNo`=r.`StudentNo`;

案例:
查询参加考试同学的信息(学号,姓名,科目名,分数)
思路:
1、分析要查询的字段来自哪些表
2、确定使用哪种查询方式
a、确定交叉点
b、判断条件

SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`
FROM `student` AS s
JOIN `result` AS r
ON s.`StudentNo`=r.`StudentNo`
INNER JOIN `subject` AS sub
ON r.`SubjectNo`=sub.`SubjectNo`;

自连接:自己和自己连接
一张表当两张表使用

-- 创表CREATE TABLE `category` (`categoryid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主题id',`pid` INT(10) NOT NULL COMMENT '父id',`categoryName` VARCHAR(50) NOT NULL COMMENT '主题名字',PRIMARY KEY (`categoryid`)
) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8
-- 插入数据
INSERT INTO `category` (`categoryid`, `pid`, `categoryName`)
VALUES('2','1','信息技术'),
('3','1','软件开发'),
('4','3','数据库'),
('5','1','美术设计'),
('6','3','web开发'),
('7','5','ps技术'),
('8','2','办公信息');
-- 自连接
SELECT a.`categoryName` AS '父类',b.`categoryName` AS '子类'
FROM `category` a,`category` b
WHERE a.`categoryid`=b.`pid`;

执行结果:

5、分页和排序

排序 :升序和降序
-- 排序 ORDER BY 降序DESC 升序ASC
select s.`StudentName`,`SubjectName`,`StudentResult`
from `student` as s
inner join `result` as r
on s.`StudentNo`=r.`StudentNo`
inner join `subject` as sub
on r.`SubjectNo`=sub.`SubjectNo`
where sub.`SubjectName`='高等数学-1'
order by `StudentResult` desc;
分页

分页的必要性: 缓解数据库的压力,给用户以更好的体验
语法:

limit 起始值,页面的容量

案例:

SELECT `SubjectName`,`GradeID`
FROM `subject`
LIMIT 0,5;

执行结果:

6、子查询

子查询的本质:在 WHERE 语句中在嵌套一条 SELECT 语句

案例:查询 高等数学-1的所有考试结果(学号,科目编号,成绩)

-- 方式一:使用连接查询
SELECT r.`StudentNo`,r.`SubjectNo`,`StudentResult`
FROM `result` r
INNER JOIN `subject` sub
ON r.`SubjectNo`=sub.`SubjectNo`
WHERE sub.`SubjectName`='高等数学-1'
ORDER BY r.`StudentResult` DESC;-- 方式二:使用子查询(执行顺序从内向外)
SELECT `StudentNo`,`SubjectNo`,`StudentResult`
FROM `result`
WHERE `SubjectNO` = (SELECT `SubjectNo` FROM `subject`WHERE `SubjectName`='高等数学-1'
)
ORDER BY `StudentResult` DESC;

嵌套查询:代码量少,但较难理解

-- 嵌套查询高等数学-1成绩大于80分的学生的学号和姓名
SELECT `StudentNo`,`StudentName` FROM `student` WHERE `StudentNo` IN (SELECT `StudentNo` FROM `result` WHERE `StudentResult` > 80 AND `SubjectNo`=(SELECT `SubjectNo` FROM `subject` WHERE `SubjectName`='高等数学-1')
)

以上就是MySQL的基础知识,从了解数据库到操作数据库,以及数据库的数据查询操作,这些都是MySQL的基本要求,下一节还会学习MySQL的函数、事务、索引、权限管理等。

数据库学习----MySQL(一)相关推荐

  1. python数据库学习--Mysql

    摘要: Python使用mysql需要安装驱动,有两种1)mysqldb 2)umysql  ,两者都是开源,具体区别不详,umysql没用过 一.mysqldb 安装MySQL驱动--http:// ...

  2. mysql学时用什么类型_MYSQL数据库学习----MYSQL数据类型

    一切数据在计算中都是以二进制形式存储,而8位二进制数就表示1个字节. 通常我们说一种数据类型占多少字节,就是说这种数据类型可以表示多少位的二进制数,同时二进制数可以转换为十进制数,进而得到这种数据类型 ...

  3. 数据库学习--MySQL锁

    锁是计算机协调多个进程或线程并发访问某一资源的机制 特点 显著特点是不同的存储引擎支持不同的锁机制 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低 行级锁:开销大, ...

  4. linux数据库创建score表,MySQL数据库学习笔记

    MySQL数据库学习笔记phpma (实验环境:Redhat9.0,MySQL3.23.54) 纲要: 一,连接MySQL phpma 二,MySQL管理与授权 三,数据库简单操作 四, 数据库备份 ...

  5. 这38个小技巧告诉你如何快速学习MySQL数据库

    无论是运维.开发.测试,还是架构师,数据库技术是一个必备加薪神器,那么,一直说学习数据库.学MySQL,到底是要学习它的哪些东西呢?此文为你揭晓,你值得一看!看过别忘记点赞+转发支持哦. 1.如何快速 ...

  6. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  7. mysql选定数据库_mysql数据库学习――2,数据库的选定,创建,删除和变更_MySQL...

    bitsCN.com mysql数据库学习--2,数据库的选定,创建,删除和变更 数据库选定,数据库选定后依然可以使用其他数据库中的数据表,只要指定[数据库.数据表]即可 use db_namesel ...

  8. mysql数据库学习(一)--基础

    一.简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 R ...

  9. MySql数据库学习--存储过程(1)

    在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用户入门. 存储过程介绍 存储过程是一组为了 ...

  10. linux 指定库名 登录mysql_数据库学习笔记之MySQL(01)

    目录 01. 什么是数据库? 02. 常见数据库 03. MySQL简介 04. 数据库系统(Database System)的组成 05. SQL语言 06. SQL语言组成 07. MySQL的常 ...

最新文章

  1. 积微论坛报告视频+PPT:用微生物组时序数据重现生物膜装配动态过程
  2. 根据痛点分析制作软件
  3. Linux之chattr命令详解
  4. Win64 驱动内核编程-26.强制结束进程
  5. ASA/PIX: Load balancing between two ISP - options
  6. python中什么是实例-在Python中使用’__rsub__’方法的典型实例是什么?
  7. python中递归函数写法_python递归函数用法详解
  8. Nodejs学习(三)-安装nodejs supervisor,提高点效率吧。
  9. Ananagrams Uva 156
  10. 前端学习(482):html之b/s和c/s
  11. scala语言示例_标有示例的Scala关键字
  12. 【Matplotlib】【Python】如何使用matplotlib绘制折现图
  13. 7 分钟全面了解位运算
  14. 调试寄存器:Debug Register
  15. java ecc signature_如何用python验证android/java的ECC签名
  16. OpenStack 开放云平台
  17. 安装libvirt管理套件(C/S架构模式,用户管理kvm虚拟机)
  18. IPTV机顶盒和网络盒子及转换
  19. 【STM32开发环境搭建】 - st-link驱动安装和串口驱动安装
  20. zf:tf7: RNN—古诗词

热门文章

  1. Centos干净卸载apache-php-mysql
  2. Infopath 2013 通过UserProfileService读取AD用户信息
  3. Ajax运用json数组传输数据
  4. 从XmlDocument到XDocument的转换
  5. Castle ActiveRecord学习实践:构建配置信息
  6. android圆角柱状图,MPAndroidChart 圆角柱状图-Go语言中文社区
  7. 拓端tecdat|R语言:逻辑回归ROC曲线对角线分析过程及结果
  8. 拓端tecdat|python主题LDA建模和t-SNE可视化
  9. html5隐藏自定义控制按钮,用仿ActionScript的语法来编写html5——第七篇,自定义按钮...
  10. SpringBoot2.0.0启动流程