MySQL基础知识(1)

			**

MySQL概述

**

1.什么是数据库
    数据库就是存储数据的仓库

2.都有那些公司在使用数据库
电商公司,游戏公司,金融机构,政府部门

3.提供数据库服务的软件
1.软件分类
MySQL,Oracle,SQL-Server,DB2,MongoDB,MariaDB,…
//fa
2.生产环境中,如何选择使用哪一种数据库软件
1).是否开源
1.开源软件:MySQL,MongoDB,MariaDB
2.商业软件:Oracle,DB2,SQL-Server  
2).是否跨平台
1.不跨平台:SQL-Server
2.跨平台:…
3).公司类型
1.商业软件:政府机构,金融机构
    2.开源软件:游戏公司,电商公司,论坛和贴吧网站,…

4.MySQL数据库特点
1.关系型数据库
1)关系型数据库的特点
    1.数据以行和列(表格)形式存储
2.表中每一行叫一条记录,每一列叫一个字段
    3.表与表之间的逻辑关联叫关系
2)实例:
1.关系型数据库存储数据:
表1 学生信息表
姓名 年龄 班级
星矢 25 三班
水冰月 25 六班
/f
表2 班级信息表
班级 班主任
三班  大空翼
  六班 松仁
/f
3).非关系型数据库存储数据
{“姓名”:“星矢”, “年龄”:“25”, “班级”:“三班”, “班主任”:“大空翼”}
{“姓名”:“水冰月”, “年龄”:“25”, “班级”:“六班”, “班主任”:“松仁”}
/f
2.跨平台
可以在Windows,Linux,Unix上运行
/f
3.支持多种编程语言
Python,Java,PHP,…

5.数据库软件,数据库,数据仓库的概念
1.数据库(database,简写:DB,db)
储存在计算机内的有组织,可共享的数据集合
2.数据库软件(数据库管理系统)
一个软件,看得见,可操作的工具,可以通过SQL语句操作数据库(SQL:结构化查询语句)
3.数据仓库(Data WareHouse, 简写:DW,DWH)
数据量要比数据库大的多,主要用于数据分析和数据挖掘
et:
  数据库:购物车表,用户信息表
  数据仓库:分析哪个时间段用户的访问量最大,哪个用户一年中购物最多

---------------------------------------------------
/f
MySQL安装

1.Ubuntu安装MySQL服务(命令行安装方式)
1.安装服务端
sudo apt-get install mysql-server
2.安装客户端
sudo apt-get install mysql-client
3.Ubuntu安装软件
1).sudo apt-get update
访问源列表中的每个网址,读取软件列表,保存到本地/var/lib/apt/lists
2).sudo apt-get upgrade
  把本地已安装软件与刚下载的软件列表进行比对,如果发现已安装软件的版本低,则
  更新软件
3).sudo apt-get -f install
 表示修复依赖关系

2.Windows安装MySQL
1.下载安装包
mysql-installer***5.7.24.msi
2.按照安装教程安装

3.Mac 安装MySQL
1.下载安装包(dmg --> pkg)
2.设置环境变量
1). vi.base_profile
2). 在末尾写入如下内容,保存并退出
export PATH= P A T H : / u s e r / l o c a l / m y s q l / b i n 或 者 P A T H = {PATH}:/user/local/mysql/bin 或者 PATH= PATH:/user/local/mysql/binPATH={PATH}:/user/local/mysql/bin
3.在命令行下执行:$source.base_profile
4.登录测试
mysql -uroot - p

4.启动和连接数据库
1.启动服务端(终端下)
1).查看MySQL状态
sudo /etc/init.d/mysql status
2).启动MySQL服务
sudo /etc/init.d/mysql start |stop|restart
2.客户端连接
1)命令格式:
mysql -h主机地址 -u用户名 -p密码
et:
mysql -hlocalhost -uroot -p123456
2)本地连接可以省略-h选项
mysql -uroot -p123456

5.基本SQL命令
1.SQL命令的使用规则
1).SQL命令不区分大小写,但是区分中英文的标点符合,yi律使用
英文标点符号"":空格
2).每条命令以;结尾
3).使用\c终止当前命令的执行
/f
2.库的管理
1)库的基本操作
    1.查看已有库
show databases;
2.创建库
create database 库名;
创建的同时指定字符集
create database 库名 character set utf-8;
3.查看创建库的语句(字符集)
show create database 库名;
    4.查看当前所在库
select database();
5.切换/选择库
use 库名;
6.查看当前库中所有的表
show tables;
7.删除库
drop database 库名;
/f
2)库名的命名规则
1.库名由数字,字母,下划线组成,不能使用纯数字
   2.库名区分大小写,SQL命令不区分大小写
et:
1.SQL命令不区分大小写
CREATE DATABASE TESTDB;
等价于
create database TESTDB;
/f
2.库名区分大小写
create database TESTDB;
create database testdb;
以上是分别创建了两个库:TESTDB, testdb
/f
    3.不能使用特殊字符和MySQL的关键字
/**
3.表记录管理**
1).表的管理
1. 表的基本操作
1. 创建表
create table 表名(字段名 数据类型,字段2 数据类型,…);
创建的同时制定字符集
create table 表名(字段1 数据类型,字段2 数据类型,…)character set utf8;
2. 查看已有表的字符集
show create table 表名;
3. 查看表结构
desc 表名;
4. 删除表
drop table 表名;
/f
注意 :
1. 如果涉及多个库切换操作表,一定不要忘了切换数据库
2. 所有的数据在数据库中都是以文件的形式存储的,存放目录为:
/var/lib/mysql
/f
2).表记录管理(操作数据)
1.插入数据(insert)
1.insert into 表名 values(值1),values(值2),…;
注意:()括号中的值实际代表的是一行,一条记录,不能分开写
例:insert into stuinfo values(1,‘刘备’,2000),(2,‘关羽’,1998);
2.insert into 表名(字段1,字段2,…) values(值1),(值2),…;
et:
insert into stuinfo(name,age) values(‘张飞’,1996),(‘吕布’,2002);
/f
2.查询数据(select)
1.select * from 表名; //查询所有数据
2.select * from 表名 where 条件 //查询表中满足条件的数据
3.select 字段1,字段2,… from 表名 [where 条件];
  //注意:[]里内容可选择省略
/f
4.更改默认字符集
1).方法:修改mysql的配置文件
  2).步骤:
1.获取root权限 sudo -i //回到终端执行,不能在mysql中执行
2.cd /etc/mysql/mysql.conf.d/
3.备份(相当重要) cp mysqld.cnf mysqld.cnf.bak //.bak表示备份
4.修改: //使用sublime修改
subl mysqld.cnf
  找到中括号[mysqld]
添加 character_set_server = utf8
/f
//使用vi修改命令
vi mysqld.cnf
找到中括号[mysqld]
添加 character_set_server = utf8
5.重启mysql服务
sudo /etc/init.d/mysql restart //sudo可省略
    6.连接客户端
mysql -uroot -p123456
7.MAC电脑
文件路径
/etc/my.cnf
[mysqld]
添加 character_set_server = utf8

6.数据类型
1.数值类型
1)整型
1.int 大整型(4个字节)
取值范围:0 ~ 2(32)-1
2.tinyint 微小整型(1个字节)
1.有符号整型(默认)
取值范围:-128 ~ 127
id tinyint signed
2.无符号整型(unsigned)
取值范围:0 ~ 255
age tinyint unsigned
3.smallint 小整型(2字节)
4.bigint 极大整型(8个字节)
/f
2)浮点型
1.float (4个字节,最多显示7个有效位) //单精度(精度即准确度)
1.用法
字段名 float(m,n)
m表示总位数,n表示小数位的位数
et:
score float(3,1)
2.double(8个字节) //双精度
误差稍小,在mysql内部运算时,都采用double双精度运算
/f
3.dicimal(最多可显示28个有效位)
用法:(和double一样)
    decimal(m,n)
m表示总位数,n表示小数位的位数
/f
注意:1.浮点型,插入整数时,小数位会自动补0;
2.小数位如果多于指定位,会自动对指定位的下一位四舍五入
      3.
/f
3)数值类型占用的存储空间
整数和小数分开存储的,需要各自计算所需的字节数
规则:
将9的倍数包装成4个字节
余数占用字节对照表
余数 字节
0 0
1~2 1
3~4 2
5~6 3
7~8 4
et:
decimal(19,9)
计算存储空间:
整数位数 除以 9, 商都占用4个字节
余数,根据对照表判断占用几个字节
10 / 9 商 1 余数 1
占用字节数: 4 + 1 = 5个字节
小数位数 除以9
9 / 9 商 1 余数 0
占用字节数:4 + 0 = 4个字节
/f
2.字符类型
1)char(m)
m指定最大显示宽度,同时也指定最大字符个数
取值范围1 ~ 255
特点:
定长存储
例:char(10)
固定分配10个字符的空间存储数据
2)varchar(m)
m指定最大显示宽度,同时也指定最大字符个数
取值范围1 ~ 65535
特点:
变长存储
例:varchar(10)
根据数据的实际长度分配空间,小于10个字符,按照实际的字符数分配空间,
最大可分配10个字符的空间,超过10个字符,无法存储,会报错
3)text / longtext(4G) / blob / longblob(4G)
text相关的类型可以用来存储大批量的文本数据(博文等)
blob相关的类型是用于二进制数据的存储(图片等)
   注意:
1.定长和变长字符类型在存储空间上区别较大
char 定长存储:浪费存储空间,性能高
varchar 变长存储:节省存储空间,性能较低
    2.字符类型的显示宽度与数值类型宽度的区别:
et:
int(11)
char(10)
1,数值类型的宽度为显示宽度,用于select查询是显示结果,和占用存储空间无关
即使超出显示宽度,只要没有超出当前数据类型的取值范围,都可以插入成功
2.字符类型的宽度不仅是显示宽度,还是最大字符个数,超出就无法存储
3.数值类型如果指定显示宽度,而数据长度小于宽度,会自动补0,填充显示宽度
结合zerofill属性查看效果
id int(5) zerofill;
/f
区别:定长存储,会直接分配固定的存储空间;
    变长存储,会根据实际的字符数,分配存储空间
/f
3.枚举和集合类型
1).枚举 enum,是一个字符串对象,可以将一些不重复的字符串存储成一个预定义的集合;
字段值必须从这个集合中选取,才是合法值.最多可以列举65535个值,枚举经常用来
实现单选:
et:
create table userinfo(id int,name char(10),sex enum(‘男’,‘女’,‘保密’));
特点:
  枚举集合中的数据,从左到右会自动分配索引,从1开始,查询数据时,可以
  根据字符串值进行查询,也可以根据索引值查询
et:
select * from userinfo where sex=‘男’;
等价于:
select * from userinfo where sex=1;
/f
2).集合
集合是一种特殊的枚举类型,可以指定一个选项列表,但是字段值可以取范围内的多个
  值。可以实现多选。类型名使用set表示
    et:
create table couseTab(sportcouse set(‘篮球’,‘足球’,‘乒乓求’,‘星际争霸’));

/f
4.日期和时间类型
1).date:“YYYY-MM-DD”
2).time:“hh:mm:ss”
3).datetime:“YYYY-MM-DD hh:mm:ss”
4).timestamp:“YYYY-MM-DD hh:mm:ss”
注意:
    1.datetime:给NULL,默认返回NULL
2.timestamp:给NULL,默认返回系统当前时间
3.日期格式:
“2000/11/11 10:10:10”
“20181111111111”
/f
5.日期时间函数
1).now()返回当前系统时间
2).curdate()返回当前日期(年月日)
3).curtime()返回当前时间(时分秒)
4).year(date)返回指定日期的年份
5).date(date)返回指定日期的年月日
6).time(date)返回指定日期的时分秒
练习:
1.往表中插入3条数据
2.查找2018-10-10有那些用户充值了?
3.查找2018年11月的充值信息
4.查找2018年8月30日10:00-12:00的充值信息
/f
6.日期时间运算
1)语法格式
select * from 表名 where 字段名 运算符 (时间-interval 时间单位)
时间单位:
et: 1 day | 1 hour | 1 minute | 1 year | 1 month
练习:
1.查询1天内的充值记录
2.查询1年前的充值记录
3.查询1天以前,3天以内的充值记录
/f
3)表示未来的时间节点
et:
从当前系统时间向后推算一年,明年now()-interval -1 year

一.表结构操作(操作字段)
    1.语法:alter table 表名 执行动作;
2.添加字段(add)
//直接在最后一列的位置添加新的字段
alter table 表名 add 字段名 数据类型;
    //在第一列的位置添加新的字段
alter table 表名 add 字段名 数据类型 first;
//在指定字段的后面添加新的字段
alter table 表名 add 字段名 数据类型 after 指定字段名;
3.删除字段(drop)
alter table 表名 drop 字段名;
4.修改数据类型(modify)
alter table 表名 modify 字段 新数据类型;
5.表的重命名(rename)
alter table 表名 rename 新表名;
练习:
1.创建库 studb;
2.在库中创建表t1,字段:name char(10),age tinyint unsigned,phnumber char(11);
3.查看表结构
4.在表中第一列的位置插入一个id字段
5.修改phnumber的数据类型为int
6.在最后一列的位置插入address字段
7.删除age字段
8.查看表结构
9,把表名修改为tab1;

二.表记录管理
1.插入数据 insert into 表名 values(),(),…;
2.查询数据 select * from 表名 where 条件;
3.删除数据
1.delete from 表名 where 条件;
2.如果省略where条件,
delete from 表名;
表示清空所有记录
4.更新数据
1.update 表名 set 字段1=值,字段2=值,…where 条件;
2.update 必须写where条件

三.运算符
1.数值比较/字符比较
1.数值比较: = != > >= < <=
2.字符比较: = !=
3.练习:
  1.查找攻击力超过150的英雄的名字和攻击值
     2.将赵云的攻击值设置为360,防御值设置为450
/f
2.逻辑运算符
1. 条件1 and 条件2; //(查询同时满足两个条件的数据)
2. 条件1 or 条件2; //(查询满足条件1或满足条件2的数据)
练习:
  1.找出攻击值高于200的蜀国英雄的名字和攻击力
  2.将吴国英雄攻击值为110对应的英雄,改为攻击力100,防御值60
  3.查找蜀国和魏国的英雄信息
/f
3.范围内比较
1.between 值1 and 值2
//设置范围在值1和值2之间
2.where 字段名 in(值1,值2,值3,…)
//匹配字段值在in给出的范围内的数据
et:
where age in(22,23,24,25);
3.where 字段名 not in(值1,值2,值3,…)
//匹配字段值不在指定范围内的数据
练习:
  1.查找攻击值在100~200之间的蜀国英雄信息
  2.查找蜀国和吴国以外的国家中,女英雄的信息
  3.查找id=1,3,5范围内的蜀国英雄和貂蝉的信息

4.匹配空,非空
1.匹配空:where 字段 is null;
2.匹配非空:where 字段 is not null;
注意:
1.is null和is not null 主要用来匹配字段值等于NULL的数据
2.空字符串可以直接使用 =

  1. List item

来匹配
    et:
where name=’’;
where name is null;
/f
5.模糊查询
1.格式:where 字段名 like 表达式
2.表达式:
1). _ :表示匹配一个字符
2). % :表示匹配0到多个字符
3.示例:
  1.查找姓名包含2个字符(含2个字符)以上的数据
select * from sanguo where name like ‘%’;
2.匹配所有数据
select name from sanguo where name like ‘%’;
注意:
    NULL值不会被匹配出来
  空字符串表示0个字符,会被正常匹配
  3.匹配姓名为3个字符的数据
where name like ‘’;
 4.匹配姓赵的数据
where name like '赵%
’;
et:
select name from sanguo where name like '赵%
’;
更改查询结果中的显示字段
select name as n from sanguo where name like '赵%
’;

四.SQL查询
1.完整的查询语句由以下关键字组成
顺序为书写顺序,序号是mysql执行顺序:
3.select
1.where //条件
2.group by //分组,可以对查询结果分组
4.having //判断having
5.order by //查询结果按照一定顺序显示
6.limit //分页查询
2.order by:对查询结果进行排序
1.格式:…order by 字段名 ASC(升许)/DESC(降序)
2.示例:
1).将英雄按照防御值从高到低排列
select * from sanguo order by fangyu DESC;
    2).将蜀国英雄按照攻击值从高到低降序排列
select * from sanguo where country=‘蜀国’ order by gongji DESC;
    3).将魏国和蜀国英雄中名字为3个字的,按防御值升序排列
select * from sanguo where country=‘魏国’ or country=‘蜀国’ and name like ‘___’ order by fangyu ASC;
3.limit分页查询
永远放在SQL语句的最后书写
分页用来控制显示多少条结果中的数据
1.语法:
1).limit n; 表示显示n条数据
2).limit m,n; 表示从第m+1条记录开始显示n条数据
et:
limit 2,3; //显示第3,4,5三条数据
    3).示例:
1.查找蜀国英雄中,防御值倒数第2名至倒数第4名的英雄记录
select * from sanguo where country=‘蜀国’ order by fangyu ASC limit 1,3;
2.查找蜀国英雄中,攻击值前3名且名字不为NULL的英雄信息
select * from sanguo where country=‘蜀国’ and name is not null order by gongji DESC limit 0,3;
3.如果想要显示查询结果中第20到25条数据
limit 19,6;
4.select查询
select *
select 字段
select 聚合函数 where …   //条件可省略
1.聚合函数
最大值 最小值 求和 平均值 计数

练习:
1. 创建库studb,指定字符集为utf8
create database studb character set utf8;
2. 进入studb库中
use studb;
3. 查看当前所在库
select database();
4. 创建库studb2,指定字符集为latin1
create database studb2 character set latin1;
5. 进入studb2中
use studb2;
6. 查看当前库的字符集
show create database studb2;
7. 删除创建好的两个库
drop database studb;
drop database studb2;

练习2:
1.创建库studb
create database sudb character set utf8;
2.在库中创建stuinfo表,指定字符集为utf8,指定字段id name age;
3.查看创建表stuinfo的语句
4.查看表结构
5.在库中创建score表,
6.删除表,删除库
注意:1.如果涉及到多个库切换操作表,一定不要忘了切换数据库
     2.所有的数据在数据库中都是以文件的形式存储的,存放目录为:/var/lib/mysql

练习3:
1. 创建库studb2
create database studb2;
2. 在库中创建表stuinfo,要求 :
id 大整型
name 字符型,宽度是15
age 微小整型,不能为负数
height 浮点型,小数位为2位(float(5,2))
money 浮点型,小数位为2位(decimal(5,2))
et :
use studb2;
create table stuinfo(id int,name char(15),age tinyint unsigned,height float(5,2),money decimal(5,2));
/f
3. 查看表结构
desc stuinfo;
4. 查看表的字符集
show create table stuinfo;
5. 插入1条完整记录,在表中id,name两个字段中插入两条记录
insert into stuinfo values(1, ‘Jack’,10,121.34,100.23);
insert into stuinfo(id,name) values(2,‘Rose’),(3,‘liming’);
6. 查询所有记录
select * from stuinfo;
7. 查询所有学生的id和姓名
select id,name from stuinfo;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值