MySQL基础
一、数据库概念
1,网友装备信息、论坛帖子信息、QQ好友关系信息、学籍管理系统中的学生信息等都要“持久化”的保存到一个地方,
如果通过IO写到文件中,那么会非常麻烦,而且不利于多人共享数据
2,我们开发大部分软件、网站都要大量用到书库,甚至开发游戏、手机App也要用到数据库,公司面试的时候数据库的考核在三分之一以上
3,数据库(DataBase)是保存数据的仓库,可以方便的把数据放进去,并且把数据根据各种需要取出来。
数据库管理系统(Database Management SYSTEM,DBMS)是对数据库进行管理(增删改查等)的软件,
常用的DBMS有MYSQL、Oracle、DB2、MSSQLServer等。
MYSQL是开源、免费的,因此应用最广泛
4,不同的DBMS用法大同小异,掌握了一个也就基本等于掌握了其他DBMS
二、数据库、表、列
1,Table(表):存放数据的“书架的格子”
2,两种叫法:列(column)/字段(Field)
三、MYSQL环境安装
1,下载
http://www.mysql.com/downloads/ MySQL Enterprise Edition (commercial)、MySQL Cluster CGE (commercial)都是收费版;MySQL Community Edition 是开源免费版。
2,添加系统服务
以管理员身份运行命令行,cd到mysql的bin文件夹,执行“mysqlld -install”
卸载服务:mysql -remove
四、MYSQL管理工具
1,MYSQL管理工具用于对DBMS进行数据库创建、表创建等管理。开发人员必装。管理工具不是DBMS,DBMS不可少
2,管理工具有很多:Navicat、Workbench(官方)、phpMyAdmin、SQLyog、MySQL-Front,用法大同小异。
NaviCat lite是免费版,功能学习够用了。
3,安装后在开始菜单的“PremiumSoft”中。
主菜单“文件”→“新建连接”→“MYSQL”,“连接名”随意,“主机名或IP地址”填MYSQLServer的IP地址或者主机名,
装在本机填127.0.0.1(本地回环地址),用户名密码都是root(生产环境中密码要改的复杂一点)。
4,如果连接不报错,说明MYSQLServer和管理工具都安装没有问题
五、主键(PrimaryKey)
1,主键就是数据行的唯一标识。不会重复的列才能当主键。一个表可以没有主键,但是会非常难以处理,
因此没有特殊理由表都要设定主键
2,主键有两种选用策略:
业务主键和逻辑主键
业务主键就是使用有业务意义的字段做主键,比如身份证号、银行账号等
逻辑主键是使用没有任务业务意义的字段做主键,完全是给程序看的,业务人员不会看的数据。
因为很难保证业务主键不会重复(身份证号重复)、不会变化(账号升位),因此推荐用逻辑主键
六、表间关联、外键(ForeignKey)
1,一张表中的一个字段是指向了另一张表的主键,这样就将两张表的信息连接在一起了
2,可以多张表“串联”,也可以“多对多”的在两张表之间存在一张关系表
七、建库建表
1,根节点点右键,新建数据库,数据库名字取得有意义,比如“study1”,字符集建议用UTF-8。
2,在study1下的“表”节点下右键“新建表”,“栏位”其实指的就是列。
Id(主键,潜规则的名称,int、不允许为空、点右键“主键”)
Name(nvarchar,长度为10,不允许为空)
Gender(bit,不允许为空)
保存为“T_Persons”
3,建表常见错误:
列名/表名不要用可能的关键字,不要有空格(包括前后)、不要有特殊字符
4,MYSQL的存储引擎有很多,最常用的是InnoDB和MyISAM,MyISAM效率较高,但是不支持事务、外键约束等特性,
因此一般建议用InnoDB,新版本默认也是InnoDB。
怎么设:建表时“选项”→“引擎”。建好了如何看引擎:表上点右键“对象信息”。
5,常用的数据类型
文本:
CHAR(*):最多255个字节的定长字符串,它的长度必须在创建时指定
VARCHAR(*):最多255个字节的可变长度字符串,它的长度必须在创建时指定
TEXT:最大长度为64K字符的变长文本
TINYTEXT:最大长度为255字符的变长文本
MEDUIMTEXT:最大长度为16K字符的变长文本
LONGTEXT:最大长度为4GB字符的变长文本
整数:(考虑数据取值后选择尽可能小的类型)
tinyint:1字节。有符号值:-128 到127;无符号值:0到255
smallint:1字节。有符号值:-32768 到32767;无符号值:0到65535
mediumint:3字节。
int:4字节
bigint:8字节
小数:(需要指定长度和小数点,也就是显示宽度和小数位数):
decimal:精确存储的小数,在内部用字符串存储,适合金额等要求精确的类型。别名:NUMERIC
float:4字节,单精度。会近似存储(*),效率比decimal高。
double:8字节,双精度。会近似存储(*),效率比decimal高。
日期时间:
DATE:4字节。范围:1000-01-01——9999-12-31
TIME:3字节。范围:-838:59:59——838:59:59
DATETIME:8字节。范围:1000-01-01 00:00:00——9999-12-31 23:59:59
二进制大数据:
TITYBLOB:最大长度为255字节
BLOB:最大长度为64KB
MEDIUMBLOB:最大长度为16MB
LONGBLOB:最大长度为4GB
八、SQL语句入门
1,不能总是用鼠标点来点去手动管理数据,要能够通过语言和数据库自动交流,SQL语句就是和数据库“交谈”专用的语句
2,SQL语句中字符串一般用单引号
3,SQL语句是大小写不敏感的
4,NavCat中找到执行SQL语句的地方“查询”——“新建查询”,编写SQL后点击“运行”执行SQL语句
5,最简单的SQL:
查看一个表的全部数据:select * from T_Persons
6,Insert
简单的插入数据的SQL语句:
insert into T_Persons (Id,Name,Age,Gender) values(5,'jim',20,1)
Insert语句可以省略表名后的列名,但是强烈不推荐
如果插入的行中有些字段的值不确定,那么Insert的时候不指定那些列即可。“不允许为空”的列在插入的时候不能省略
自动递增/自增(Auto Increment):字段自增可以避免并发等问题,不要程序员代码控制自增。用自增字段在Insert的时候不用指定值。
7,修改表结构的方法:点“设计表”
1,把“允许为空”的字段修改为“不允许为空”,需要先给旧数据默认值(用Update语句),
如果之前是测试数据无所谓,可以把旧数据都删除(增加Height字段)
2,修改列的数据类型要注意旧数据能否兼容转换为新类型;修改数据的长度的时候也是如此
8,数据更新
更新一个列:
update T_Persons Set Age=30
更新多个列:
update T_Persons s Set Age=30,Name='tom'
表达式:UPDATE T_Persons Set Age=Age+1
9,条件数据更新
更新一部分数据:
UPDATE T_Persons Set Age=30 where Name='tom',用where语句表示只更新Name是'tom'的行,
注意SQL中等于判断用单个=,而不是==。
Where中还可以使用复杂的逻辑判断UPDATE T_Persons Set Age=30 where Name='tom' or Age<25,or相当于Java中的||
where (Age>20 and Age<30) or(Age=80)
Where中可以使用的其他逻辑运算符:or、and、not、<、>、>=、<=、!=(或<>)等
10,数据删除
删除表中全部数据:
DELETE from T_Persons
删除表中部分数据
Delete from T_Persons where Age>20
DELETE只是删除数据,表还在,
11,删除表
Drop table T_Persons
九、数据检索
1,简单的数据检索:Select * from T_Persons
2,只检索需要的列:
SELECT Number FROM T_Employees 、
SELECT Name,Age FROM T_Employees
3,列别名
SELECT Number AS 编号,Name AS 姓名,Age AS Age111 FROM T_Employees
写不写AS都行
4,计算列
SELECT Number 编号,Name 姓名,Age Age111,Age+10 十年后的年龄,1+1,now() FROM T_Employees
5,使用where检索复合条件的数据:
SELECT Name FROM T_Employees WHERE Salary<5000
6,还可以检索不与任何表关联的数据:
select 1+1;
select now();
十、数据汇总
1,SQL聚合函数:
MAX
MIN
AVG
SUM
COUNT
2,大于25岁的员工的最高工资 :
SELECT MAX(Salary) FROM T_Employees WHERE Age>25
3,最低工资和最高工资:
SELECT MIN(Salary),MAX(Salary) FROM T_Employees
4,大于25岁的员工人数:
SELECT COUNT(*) FROM T_Employees WHERE Age>25
5,全体员工的工资总和平均工资:
SELECT SUM(Salary),AVG (Salary) FROM T_Employees
十一、数据排序
1,Order by子句位于Select语句的末尾,它允许执行按照一个列或者多个列进行排序,还可以指定排序方式是升序(ASC)还是降序(DESC)
2,按照年龄升序排序所有员工信息的列表:
SELECT * FROM T_Employees ORDER BY Age ASC
3,按照年龄从大到小排序,如果年龄相同则按照工资从大到小排序 :
SELECT * FROM T_Employees ORDER BY Age DESC,Salary DESC
4,ORDER BY子句要放到WHERE子句之后 :
SELECT * FROM T_Employees WHERE Age>23 ORDER BY Age DESC,Salary DESC
十二、通配符过滤
1,通配符过滤使用like
2,单字符匹配的通配符为半角下划线“_”,它匹配单个出现的字符。
以任意字符开头,剩余部分为“erry”:
Select * from T_Employees where Name like '_erry'
3,多字符匹配的通配符为半角百分号“%”,它匹配任意次数(0或者多个)出现的任意字符。
k% 匹配以k开头、任意长度的字符串
检索姓名中包含字母n的员工信息:
select * from T_Employees where name like '%n%'
4,like性能较差,很容易造成全表扫描,谨慎使用。
后面会讲数据库优化(索引等),项目中做搜索用全文索引
十三、空值处理
1,数据库中,一个列如果没有指定值,那么值就为null,数据库中的null表示“不知道”,而不是表示没有。
因此select null+1结果是null,因为“不知道”加1的结果还是“不知道”
2,Select * from T_Employees where name = null;
select * from T_Employees where name!=null;
都没有任何返回结果,因为数据库“也不知道”
select name+"a" from T_Employees
3,SQL中使用is null、is not null 来进行空值判断
SELECT * FROM T_Employees WHERE NAME is null ;
SELECT * FROM T_Employees WHERE NAME is not null ;
十四、limit
limit关键字用来限制返回的结果集,limit放在select语句的最后位置,
语法为:limit 首行行号,要返回的结果集的最大数目
比如下面的SQL语句将返回Name不为空的、按照工资降序排列的从第二行开始(行号从0开始)的最多五条记录
select 8 from T_Employees
where Name is not null
order by Salary desc
limit 2,5
注意:limit一定要放到所有的语句的最后
使用场景:开发网站、开发手机程序的时候分页用的非常多
十五、group by
1,数据分组用来将数据分为多个逻辑组,从而可以对每个组进行聚合运算。
SQL语句中使用group by子句进行分组,使用方式为“group by 分组字段”。
分组一般和集合函数一起使用,group by子句负责将数据分成逻辑组,而聚合函数则对每个组进行统计计算
2,查看公司员工有哪些年龄段的:
select Age from T_Employees group by Age
3,将Age相同的数据行放到一组,分组后的数据可以看作一个临时的结果集,而SELECT Age语句则取出每组的Age字段的值,
这样我们就得到上表的员工年龄段表了。
4,如果SELECT语句有WHERE子句,则GROUP BY子句必须放到WHERE语句的之后
5,group by子句将检索结果划分为多个组,每个组是所有记录的一个子集。
十六、group by与聚合函数
1,分组后就可以对组内的数据采用聚合函数进行统计了;
计算每个分组中员工的平均工资:
select Age,avg(salary) from T_Employees
group by Age
查看每个年龄段的员工的人数:
select Age,count(*) from T_Employees
group by Age
十七、join
1,真是的业务系统中,各个表之间都存在这种联系,很少存在不与其他表存在关联关系的表,
而在实现业务功能的时候也经常需要从多个表中进行数据的检索,而进行多表检索最常用的技术就是表连接
2,如果没有表连接,那么查询每张订单的客户姓名就要先查询订单,再去查询客户表,麻烦而且效率低
3,SQL中使用JOIN关键字来进行表连接。
表连接有多种不同的类型,被主流数据库系统支持的有交叉连接(CROSS JOIN)、内连接(INNER JOIN)、外连接(OUTTER JOIN)
外连接分为:left join、right join。
十八、外键约束
1,如果删除/更新T_Customers一行记录,那么就可能会导致T_Orders中存在CustomerId为非法值的数据,使得程序逻辑错误。
一般不会更新主键Id的值,所以谈外键约束的时候只谈“删除T_Customers时”
2,外键约束:当删除T_Customer中一条数据的时候,如何处理T_Orders等存在指向T_Customers外键的行。外键约束建立在外键字段***Id的表上
3,建外键约束的方法:新建或者修改表的时候“外键”→“添加外键”。
名字:自动命名即可;栏位名:CustomerId;参考表:t_customers;外栏位名:Id;
删除时、更新时:一般默认RESTRICT(CASCADE:删除T_Customers一行时把它的订单也删除了;
SET NULL:删除T_Customers一行时把它的订单CustomerId设置为NULL;NO ACTION/RESTRICT:拒绝删除)。
十九、扩展学习资料
1,DDL:
2,存储过程、触发器、约束、子查询、处理left join之外其他的join
分享到:
相关推荐
这份"Mysql基础学习笔记"的压缩包很可能包含了关于MySQL基础知识的详细教程和实践指南。以下是一些可能涵盖的重要知识点: 1. **安装与配置**: - MySQL的安装过程,包括Windows、Linux和Mac OS等不同平台的安装...
自己写的用VS Code打开
总之,MySQL基础学习涉及数据库的基本概念、安装卸载流程、服务管理和SQL语句的使用。掌握这些基础知识是成为合格的MySQL用户的关键,对于日常的数据管理与分析工作至关重要。通过不断实践和深入学习,可以更熟练地...
MySQL安装启动,简单的数据库查询、表查询、以及表中数据的增删改。 适用于学习MySQL学习与记忆使用,
mysql基础学习笔记
这份"MYSQL基础知识-学习笔记"涵盖了对MySQL的初步介绍以及基础概念,是初学者入门的理想资源。 首先,我们从MySQL的简介开始。MySQL是由瑞典的MySQL AB公司开发的,后被甲骨文公司收购。它是一款开源、免费的...
这份"超经典mysql DBA学习笔记"涵盖了成为一名优秀DBA所需掌握的众多知识点,旨在帮助学习者深入理解MySQL数据库的运维与优化。 一、MySQL概述 MySQL是一种开源、免费的关系型数据库管理系统,广泛应用于互联网应用...
这份“MySQL个人学习笔记”涵盖了从基础到进阶的多个方面,旨在帮助学习者全面理解MySQL的使用。 1. **安装与配置**: 在开始学习MySQL之前,你需要了解如何在不同的操作系统上安装MySQL服务器,如Windows、Linux...
学习mysql时整理的笔记。文件是用markdown写的,格式清晰,最好用markdown查看。
通过阅读这份“大神写的MySQL DBA学习笔记”,不仅可以系统地学习MySQL的基础知识,还能获取到作者在实践中积累的宝贵经验,这对于成为一名合格的MySQL DBA至关重要。无论你是初学者还是有一定经验的数据库管理员,...
一、MySQL基础知识 在学习MySQL DBA之前,首先需要了解MySQL的基本概念,包括数据库、表、字段、索引等。理解SQL语言的基础语法,如SELECT、INSERT、UPDATE、DELETE等操作,以及JOIN、子查询等高级用法。同时,了解...
MySQL是世界上最受欢迎的关系型数据库管理系统之一,尤其在Web应用...学习MySQL不仅涉及理论知识,还需要大量的实践操作来熟悉其语法和功能。掌握MySQL能让你在数据管理、Web开发和系统集成等领域具备更强的竞争力。
### MySQL核心技术学习笔记 #### 一、为什么要学习数据库 学习数据库的重要性主要体现在以下几个方面: 1. **持久化数据到本地**:数据库能够将应用程序产生的数据持久化存储在磁盘上,即使系统重启也不会丢失...
#### 三、MySQL基础操作 - **数据库的基本操作**: - **增**: 插入数据(insert) - **删**: 删除数据(delete) - **改**: 更新数据(update) - **查**: 查询数据(select) - **高级操作**: - **视图**: 创建虚拟表...
这份“MySQL学习笔记”将引导我们深入理解其核心概念和实用技能。 一、MySQL简介 MySQL是一个开源、免费的数据库系统,由瑞典的MySQL AB公司开发,后被Oracle公司收购。它的设计目标是速度、可移植性和简洁性,支持...
记的视频来自于:...我在视频的基础上做了一些修改:比如说视频中可能有些不是太严谨但是被我发现了的,或者在弹幕中我看到有人提出疑问的,再或者一些我自己的见解,我都会有说明
本学习笔记聚焦于MySQL这一广泛使用的开源关系型数据库管理系统,为有志成为DBA或者希望提升MySQL技能的读者提供了丰富的知识资源。以下是笔记中可能涵盖的主要知识点: 1. **MySQL简介**:MySQL的历史、特性、版本...
MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) 包含了我学习 MySQL 过程中的笔记和资源,从入门到进阶的内容都有涉及。通过...
首先,"mysql学习笔记.doc"很可能是核心的学习资料,它可能包含了MySQL的基础概念、安装与配置、SQL语言基础、数据类型、数据库设计、表的创建与管理、索引、视图、存储过程、触发器、事务处理、备份与恢复、性能...
MySQL学习笔记基础版