数据库——Mysql基础
MySql的基础概念
- 数据库:英文是DataBase,就是存储和管理数据的仓库
- 其本质是一个文件系统,还是以文件的方式将数据保存在电脑上
- 使用数据库的原因
-
- 内存存储方式,优点是速度快,缺点是不能够永久保存,数据是临时状态的
-
- 文件存储方式,优点是可以永久保存,缺点是使用I/O流操作文件,不方便
-
- 数据库:数据可以永久保存;方便存储和管理数据;使用统一的方式操作数据。缺点是占用资源,有些数据库需要付费(Oracle)
- 数据库可以实现对数据的增加,删除,修改和查询操作
- 常见的数据库:
-
- MySql:开源边飞的数据库,因为开元,运作简单的特点,常作为中小型的项目的数据库首选
-
- Oracle数据库:收费的大型数据库,Oracle公司的核心产品,安全性高,MySql和Oracle属于一家公司
-
- DB2:IMB公司的数据库产品,收费的超大型数据库是,常在银行系统中使用
-
- SQL Sever:微软公司收费的中型数据库,C#和.net等语言常常使用,但是这个数据库只能在Windows上运行,扩展性,稳定性和性能都平平
- 选择MySql的原因:功能强大,足以应付Web的应用开发;开源和免费
MySql的安装
- MySql安装
- MySql的删除,需要在控制面板中删除MySql之后,再手动去安装路径下,删除残留的文件
- 环境变量的配置
-
- 复制MySql的安装路径
-
- 此电脑——属性——高级设置——环境变量——新建系统变量(MYSQL_HOME)并粘贴路径,然后将路径粘贴到path中保存即可
-
- 确认配置成功的方式是,mysql -u用户名 -p密码,可登录
- mysql的启动和关闭
-
- windows的计算机管理中,找到mysql程序,在状态栏中修改mysql的状态即可(停止/启动),如下图
- windows的计算机管理中,找到mysql程序,在状态栏中修改mysql的状态即可(停止/启动),如下图
- 命令行方式关闭mysql
net stop mysql57#(157是版本号,请根据实际情况填写),停止
net start mysql57
- 命令行方式登录数据库
-
- mysql登录数据库需要用户名和密码,登录之后,他提供了一个root账号,使用安装时的密码即可登录
mysql -u 用户名 -p 密码#使用指定的用户名和密码登录当前计算机中的MySql数据库
mysql -h 主机IP -u 用户名 -p 密码 #-h指定IP方式进行登录
exit #退出命令
- SQLyog的介绍
-
- SQLyog时一款高洁见效,功能强大的图形话MySql数据库管理工具,使用SQLyog可以快速直观的让您从世界的任何角落通过网络来维护远程的MySQL数据库
-
- 安装方式:下载安装包,根据板闸u难过指引安装即可
- Mysql安装目录结构(Program Files)
-
- 打开mysql的安装目录后,会看到bin,docs,include,lib和share5个文件夹
-
- bin:放置一些可执行文件,例如.exe文件
-
- docs:文档
-
- include:包含(头)文件
-
- lib:依赖库文件
-
- share:用于存放字符集,语言等细腻下
- mysql的配置文件与数据库、数据表所在的目录,包含以下目录(ProgramData)
-
- Data:数据库和数据表的信息
-
- my.ini:mysql配置文件
数据库管理系统
- 数据库管理系统:是一种操作和管理维护数据库的大型软件,MySql那就是一个数据库管理软件,安装了MySql的电脑叫做数据库服务器
- 数据库管理系统的作用:用于建立、使用、维护数据库,对数据库进行统一的管理
- 数据库管理系统、数据库和表之间的关系
-
- mysql中管理者很多个数据库,在实际开发环境中,一个数据库一般 对应了一个应用,数据库当中保存着许多表,每个表对应不同的业务,表中保存着业务的数据信息
SQL
- SQL:结构化查询语言的简称,是一种特殊目的的变成语言,是一种数据库查询和程序设计语言,用于存储数据以及查询、更新和管理数据库系统
- SQL的作用:
-
- 是所有关系性数据库的统一查询规范,不同的关系型数据库都支持SQL
-
- 所有的关系型数据库都可以使用SQL
-
- 不同的数据库之间的SQL有一些区别方言
- SQL通用的语法
-
- SQL语句可以单行或者多行书写,以分号结尾,例如
show databases;
- SQL语句可以单行或者多行书写,以分号结尾,例如
-
- 可以使用空格和锁进来增加逾矩的可读性
-
- MySql中使用SQL不区分大小写,一般关键字大写,数据库名,表名,列名小写
-
- 注释方式:
-- 空格
,属于单行注释-
/* */
,多行注释
-
#
mysql特有的单行注释
- SQL的分类
-
- 数据定义语言:简称DDL,用来拿定义数据库对象,例如数据库,表,列等
-
- 数据操作语言,简称DML,用来对数据库中的表进行更新
-
- 数据查询语言:简称DQL,用来查询数据表中的记录
-
- 数据控制语言,简称DCL,用来定义数据库的访问权限,安全级别和创建用户
数据库操作
数据库创建和查看
- 方法一:
-
- 语法:
create database 数据库的名称;
- 语法:
-
- 例如:eg:创建前程贷的数据库:
create database future;
- 例如:eg:创建前程贷的数据库:
-
- 通过这种方式创建的数据库,编码是latinl 编码
- 通过这种方式创建的数据库,编码是latinl 编码
- 创建数据库之后,从上图可以看出,mysql有四个默认的数据库
-
- information_schema:信息数据库,主要保存的是其他数据库的信息
-
- mysql:mysql核心数据库,保存的是用户和权限
-
- performance_schema 保存性能相关的数据,监控mysql的性能
-
- sys:记录了DBA所需要的一些信息,更方面的让DBA快速了解数据库的运行情况(DBA:数据库管理员)
- 方法二:指定字符集的方式创建数据库(utf-8)
create database 数据库的名称 character set utf8;
- 查看数据库
-
- 切换数据库:
use 数据库名称;
- 切换数据库:
-
- 查询当前正在使用的数据库:
select database();
- 查询当前正在使用的数据库:
-
- 查询mysql中有哪些数据库:
show database();
- 查询mysql中有哪些数据库:
数据库修改和删除
- 修改数据库的字符集语法格式:
alter database 数据库名 character set utf8;
#查询当前数据库的信息
show create database 数据库名;
- 删除数据库:
drop database 数据库名称
-
- 将数据库从mysql中永久的删除
数据表操作
数据表的创建
- 数据表的创建,语法
create table <表名> (<字段名1><类型1>,<字段名2><类型2>,......<字段名n><类型n>) DEFAULT CHARSET=utf8
- 例:创建一张表member,字段名有ID int型;reName char型和mobliephone int型
- 快速创建一个和表1的表结构相同的表
-
- 语法:
creat table 新表名称 like 旧表名称;
- 语法:
-
- 查看表结构,语法:
desc 表名;
- 查看表结构,语法:
-
- 查看数据库中所有的数据表:
show tables;
- 查看数据库中所有的数据表:
-
- 查看创建表的sql语句:
show creat table 表名;
- 查看创建表的sql语句:
mysql的数据类型
- 整型
-
- tinyint 占一个字节的整型
-
- ikb=1024个字节 -128~127
-
- int 占4个字节
- 字符串型:既可以代表单个字符,也可以代表字符串
-
- char(n):固定长度的一个字符串型,n代表多少个字符,最多为255个
-
- varchar(n):可变长度的字符串类型,n代表多少个字符,最多可有65535,可变长度
- 时间和日期类型
-
- date :日期,格式
(yyy[年份]-mmm[月份]-dd[天数])
eg:2016-08-22)
- date :日期,格式
-
- time : 时间,格式
(hh[小时]:mm[分钟]:ss[秒])
eg:2016-08-22 18:41:27
- time : 时间,格式
- 4>浮点型:小数
-
- float(m,d) :单精度浮点型,m代表总位数(小数点前面和小数点后面的总位数,不包括小数点),d为小数位(代表小数点后面的位数) eg:99.99声明的类型为float(4,2)
-
- double(m,d):双精度浮点型,64bit,m代表总位数,d代表小数位
-
- decimal(m,d):m代表总位数,d代表小数位,decimal数据类型用于精度要求非常高的计算中,例如decimal(7,3)规定了存储值不会超过7位数字,并且小数点后面不超过3位
-
- 【三者间的区别】从上打下,数据精度越来越高
char与varchar的区别
存储hello字符串,使用char(10)去存储字符串,hello实际的存储长度为10;
使用varchar(10)去存储hello字符串,实际类型键的长度为5。
具体来说,使用char类型来存储是以n来决定字符串的长度,
而varchar来存储时,是根据字符串的实际长度来进行存储的,n是创建表的时候自己规定的长度
主键和主键的特征
- 主键字段存储的值不能重复,因此主键可以唯一标识一行数据
- 一个表只能有一个主键
- 主键是非必须的,也就是说一个表可以不声明主键字段
- 设置主键的语法:
<字段名><类型> primary key;
- 注意:主键值生成策略:(不能重复)
- 输入相同的主键数据信息,会出现以下提示,这个提示代表主键是不能重复的
- 要主键的原因是,在对数据库进行增删改查的时候,可以通过唯一的标识去寻找
自动增长 auto_increment
- 自动增长的表,自动在当前主键字段值最大的基础上加上1,详见下图
- 例题:
-
- 1.创建一个表student2 ,表的字段有:ID,类型为int,主键;Sname,类型为char;phone,类型为int;address,类型为varchar(50)
-
- 2.创建一个表member3,表的字段有:ID,类型为int,主键,自动增长;regName,类型为char;mobilephone,类型为int
- 2.创建一个表member3,表的字段有:ID,类型为int,主键,自动增长;regName,类型为char;mobilephone,类型为int
注释 comment
- 在sql中,中文为字符串,需要加英文的单引号
- 例子:创建一个表member4 ,表的字段有:id 类型为int,主键,自动增长,注释为学号;regName,类型为char,注释为姓名;mobilephone,类型为int,注释为电话
null与not null 空与非空
- 字段默认为null,当字段写明非空(not null)的时候,在插入数据的时候,不能不插入数据
总结
- 创建表声明字段的时候,字段之间以什么符号进行分隔?符号用中文的可以吗?
答:使用英文输入法“,”进行分隔,不能使用中文 - 建表声明字段的时候,最后一个字段后面需要注意什么?
答:需要加上小括号和分号 - 主键的特征是什么?
答:标识唯一性 - 如果表需要支持中文数据存储,需要怎么做?
答:DEFAULT CHATSET=utf8 - 创建了表,发现表没有出现,可以刷新一下表
- navicat里sql写完了丢失,是因为没有保存
- 学会分析错误:err
例题
- 写出下面5张表的创建表语句:
删除表
- 从数据库永久删除一张表:语法:
drop table 表名;
- 判断表是否存在,如归存在就删除,不存在,不执行
-
- 语法:drop table if exists 表名
- 语法:drop table if exists 表名
数据表数据的删除
- 删除表中所有的数据,语法1:
delete from 表名 ;
-
- 不推荐使用此种方式,因为是逐条删除表中的数据,效率比较慢
-
- 如果要清空表中所有数据,建议使用:
truncate table 表名;
- 如果要清空表中所有数据,建议使用:
-
- 这个命令的意思是:删除整张表,然后再创建一个一模一样的新表
- 删除表中的某条数据,语法2:
delete from 表名 where 条件;
drop与delete的区别
drop database A
会将数据库A删除,因此库中所有的数据都会一并删除drop table B
会将表B删除,因此B中的数据也删除了;delete只能去删除表的数据,不能去删除表的结构- drop 作为一种删除命令,他不仅会测数据结构(库/表)而且可以测数据
- 简单说:drop删除结构且删除数据,因此drop命令要慎用
数据表本身的修改
- 修改表的名称,语法:
rename table 旧表名 to 新表名;
- 修改表的字符集,语法:
alter table 表名 character set gbk;
- 修改表中的某一列(例如列的类型或者长度),语法:
alter table 表名 modify 字段名称 字段类型;
- 向表中增加一列,语法:
alter table 表名 add 字段名 字段类型(长度)
- 删除表中的某一列,语法:
alter table 表名 drop 列名;
- 修改列的名称:
alter table 表名 change 旧列名 新列名 类型(长度);
数据表中数据的插入
- 创建数据库的前提:创建数据库,语言不分大小写,不过如果是大写的话,全部大写,小写的话全部小写
- 关键词:
insert into
- 插入一条数据,对所有字段都赋值
-
- 语法:
insert into <表名> vaules (值A,值B,值C,....,值F)
- 语法:
- 插入一条数据,且只对一部分字段进行赋值
-
- 语法:
insert into <表名> (字段A,字段B,字段C) values (值A,值B,值C)
- 语法:
- 批量插入,一次性插入多条数据
-
insert into <表名> values (值1,值2,值3......),(值1,值2,值3....)
- 批量插入,对部分字段进行赋值时需要去指定字段
-
insert into <表名> (字段名1,字段名2,字段名3)values (值1,值2,值3......),(值1,值2,值3....)
- 修改数据表数据的注意事项:
-
- 1.值和字段必须对应,也就是说输入的value和设置字段的个数必须相等
-
- 2.输入的值必须和表中的数据类型、长度也需要对应
-
- 3.插入varchar/char/data类型时,必须使用单引号、双引号进行包裹
-
- 4.如果插入空值,可以忽略不写,也可以写NULL
-
- 5.关于不设置时的默认值
-
-
- 当创建表的时候输入DEFAULT 0.00 时,不赋值的时候,数据库中默认的数值为0.00
-
-
-
- 当字段数据类型为int/float/double型时,如果int型指定为非空的话,他的默认值就是0/0.00/0.00
-
数据表中数据的修改
- 关键词:update
- 修改一个表中的所有数据(慎用)
-
- 语法:
update 表名 set 字段名1 = 新值1, 字段名2=新值2.....;
- 语法:
- 修改表中的其中一条数据:条件修改
-
- 语法:
update 表名 set 字段名1 = 新值1, 字段名2=新值2.....where 条件表达式1and(or)条件表达式2
- 语法:
-
- 修改多个字段的时候,则需要在set后面加上多个字段的值,以逗号隔开
-
- 多个条件的时候,使用or关键字,代表分别满足;使用关键字and,表示多个条件需要同时满足
- 多个条件的时候,使用or关键字,代表分别满足;使用关键字and,表示多个条件需要同时满足
- 注意:
-
- 插入数据时,至初始化部分字段还是初始所有字段时sql的不同点提现在什么地方?
-
- 答:初始化部分部分字段的时候需要提前去指定它对应的字段,初始化所有字段时则不需要
-
- 赋值时,对于varchar类型的字段,需要注意什么?
-
- 答:需要加英文的引号varchar,char ,日期,时间也需要
-
- 字段声明了长度,赋值的时候应注意什么?插入数据的长度长了会有问题吗?
-
- 答:例如varchar(50),如果插入数据超长,会自动截断;char类型也会自动截断
-
- 插入一条数据可多条数据的语法区别是?多条数据时,中间需以什么符号隔开?
-
- 答:以多个括号进行插入并以逗号进行隔开
插入表的例题
1.新增用户表(member)数据,按照截图里给出的对应的表数据,使用insert语句往对应的表里插入对应【多条插入】
2.使用insert语句在项目表(loan)中新增两条标信息,要求:
- 新增一个借款期限为30天,年化收益为15%,竞标时间为5天,一次性还款的项目(标),标的名称为“借款赎楼”,标id为2001,标的状态为审核中,借款金额为200000
- 新增一个借款期限为6个月,年化收益为15%,竞标时间为5天,每月付息到期还本的项目(标),标的名称为“生意周转”,标id为2002,标的状态为审核中,借款金额为10000
3.使用SQL删除会员表Peter的会员信息
4.使用SQL更新会员Nick的可用余额为400000.00元
5.Tommy和Nick分别都投资了两个标,投标信息如下面invest表,请使用SQL语句往invest表插入下图表中的数据