MySql入门基础教程

  • MySql入门基础教程已关闭评论
  • 187 views
  • A+
所属分类:MySql PHP

MySQL介绍

MySQL是基于结构化查询语言(SQL)的开源关系数据库管理系统(RDBMS)。MySQL运行在几乎所有的平台上,包括Linux,UNIX和Windows。几乎所有编程语言都提供MySQL抽象接口封装,有官方和非官方的库,比如PHPPDO-MYSQLJavaJDBCPythonmysql-connector等。

为什么使用数据库?

在科技发展如此之快,信息爆炸的年代我们使用数据库的地方越来越多。比如网上购物的订单、商品、用户信息,信息流如网易新闻、新浪微博、QQ空间,学校的成绩系统,游戏的后台服务,警务系统都在使用数据库来存储信息内容。

为什么不直接使用文件来存储呢?

Note:

  • 文件的增删改查操作灵活性太差
  • 文件的全安性太低
  • 在一致性和事务方面不好控

在数据库中能快速查找出你想要的数据,删除的数据可以快速恢复,在出错的情况下可以回滚操作,它的优点能弥补它的缺点。

MySQL安装

Window

在此页面选择https://dev.mysql.com/downloads/installer/对应的包安装即可。

Linux

使用官网提供的Yum源安装,源下载地址:https://dev.mysql.com/downloads/repo/yum/,选择对应的系统下载源以下安装的整个步骤。

详细的安装文档可以从这里查看

MySQL基础入门

下面我们将通过createupdateselectdeleteordergroup几个功能在MySQL里面的使用。在使用这个几个功能之前,你必须了解结构化查询语言(SQL)的基础知识。

Create(创建)

在学习create语法之前,我们先要知道MySQL的数据类型

TypeSizeDesc
TINYINT1 bytes范围为-128到127或0到255无符号
SAMLLINT2 bytes范围为-32768至32767或0至65535无符号
MEDIUMINT3 bytes范围为-8388608至8388607或0至16777215无符号
INT4 bytes范围为-2147483648至2147483647或0至4294967295的无符号数
BIGINT8 bytes范围为-9223372036854775808至9223372036854775807或0至18446744073709551615无符号
FLOAT4 bytes带有小数点的小数如: 12.5
DOUBLE8 bytes带有小数点的大数如: 10321021.33
DECIMALLength + 1 or Length + 2 bytes一个DOUBLE存储为一个字符串,允许一个固定的小数点
DATE3 bytes格式为YYYY-MM-DD
DATETIME8 bytes格式为YYYY-MM-DD HH:MM:SS
TIMESTAMP4 bytes格式为YYYYMMDDHHMMSS;可接受的范围在2037年结束
TIME3 bytes格式为HH:MM:SS
ENUM1 or 2 bytes枚举的缩写列中的数据可能是组里面一项[1, 2, 3, 4]
SET1, 2, 3, 4, or 8 bytes和ENUM差不多,只是列可能是多个值
CHARLength bytes固定长度为0到255个字符的字段
VARCHARString length + 1 bytes固定长度为0到255个字符的字段
BINARYString length + 1 bytes和char类型一样只是内容是二进制字符串
VARBINARYString length + 1 bytes和varchar类型一样内容也是二进制字符串
TINYTEXTString length + 1 bytes最大长度为255个字符的字符串
TEXTString length + 2 bytes最大长度为65535个字符的字符串
MEDIUMTEXTString length + 3 bytes最大长度为16777215个字符的字符串
LONGTEXTString length + 4 bytes最大长度为4294967295个字符的字符串
TINYBLOBString length + 4 bytes和tinytext一样但是数据是二进制形式
BLOBString length + 4 bytes和text一样但是数据是二进制形式
LONGBLOBString length + 4 bytes和mediumtext一样但是数据是二进制形式
LONGBLOBString length + 4 bytes和longtext一样但是数据是二进制形式
JSONString length + 4 bytes代表列的数据为JSON数据类型的值如: {“name”: “小明”}

现在我们将创建一个学生课程成绩单表。我们可以想下这个表需要那些字段如:姓名学号课程名课程分班级院系专业
我们只是一个成绩单可以只要学号课程名课程分,其它几个都是学生信息。那我们这个表需要这些学生信息吗? 
这是一个关于mysql表设计的问题也和项目的设计有关系,我们可以理解为冗余设计和非冗余设计。 
我们就以非冗余设计这个表,在设计原则上应该为每个表建立一个自增主键(ID)。 
在创建表之前我们需要先创建使用create database 库名语法创建一个库。

course库中创建两了 course 和 course_score 两个表课程表和课程分数表。为什么使用 UNIQUE KEY (sid, cid), 因为一个学号一门课程只有一次分数,使用唯一索引来限制数据.

  • CREATE TABLE tableName () ENGINE=innodb 创建一个表,设置表引擎为innodb
  • cid SMALLINT(6) UNSIGNED NOT NULL 设置一个字段名为sid、类型为无符号smallint、NOT NULL 不能为null值
  • PRIMARY KEY (column) 设置一个主键
  • UNIQUE KEY (column, [‘column’]) 设置一个唯一索引

Insert(插入数据)

insert into 语法有两种。

  • insert into 表名 (字段名) values (‘值’)
  • insert into 表名 set 字段名=’值’

可以从两种格式中选择一种自己的喜欢。在使用使用values (‘值’) 这种格式的时候,可以使用 values ('值'), ('值'), ('值')来插入多行数据。如果插入的字段为自增主键,那我们可以省略这个字段或者将它的值设置为null,系统会自动给行设置这个值。 下面我们将为上面两个表插入一些数据来测试。在插入分数之前我们先要使用select 语句拿到所有课程ID号,因为分数表中使用了课程ID来关键分数, 学号先自己模拟几个以下SQL完成整个步骤。

以上语句就完成了为学号9527这个人插入了六门课程的成绩。如果列字段是字符类型那么他的值必须是(9527, 1, '值'),整型也可以值两旁边加上单引号。

Select(查询数据)

select的语法有很多种可以查看这里, 这里我们简单介绍下使用,其它比较复杂的查询可以自己学习。我们将通过下面几个功能来学习查询语句

  • 使用WHERE列出某个学号的所有课程成绩
  • 使用SUM列出某个学号的成绩总和
  • 使用ORDER BY列出某个学号的成绩排序(从高到低)
  • 使用LIMIT取n条数据
所有课程成绩

SELECT cid, score的意思是查询只表出cid和score的值,中间的逗号是隔开多个字段,如果需要查询所有字段可以使有*代替(SELECT *)。 
FROM course_score的意思是从那张表查询,我们这里的表是course_score表。 
WHERE sid=9527的意思是查询条件,这里只设置了一个条件就是sid=9527,也可以使用多个条件,多个条件使用AND,OR来连接如:WHERE sid=9527 AND cid=1 这里是只这个学号的课程ID为1的分数。在条件中算术运算符有很多种=号只是其中一种(查看这里)。

成绩总和

SUM(score)计算查询结果条数的score字段的总和,这里查出来是6条那就是6个成绩的总和。

成绩排序

ORDER BY score DESC 是结果以score的降序输出,就是分数最高的排在前,如果DESC不写默认将是ASC以升序输出。

N条数据

LIMIT 3, 3的意思和一些程序语言函数功能差不多,LIMIT offset, length 将offset条丢弃取出length条。

Update(更新数据)

更新语法比较简单,它的where部分是和select语法一样的使用,它也可以使用limitorder by 只是一般不会这么使用。 
下面我们将更新某个学号的一门课程成绩改为100。

Delete(删除数据)

删除数据也是在项目中必不可少,删除的语法和update一样简单。下面我们将删除某个学号的英语课程。

Note: 
selectupdatedelete中不带where操作都对表中所有数据的操作。

这篇教程就到此为止,欢迎大家给我指正错误相互学习,互相进步。 
给大家推荐一本书籍:高性能MySQL

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin