2.MySql数据库

1.数据的存储方式有哪些?

特定的文件(少量的)/内存(临时的,运行速度是最快的)/第三方的云服务器/数据库服务器

2.什么是数据库

 数据库按照一定的形式来组织存放数据,目的是便于操作数据 —— 增删改查

 2.1数据库的发展历史

  网状数据库 -> 层次型数据库 -> 关系型数据库 -> 非关系型数据库(NoSQL)

 2.2关系型数据库逻辑结构(RDBMS)

Server  -> Database -> Table -> Row -> Column

数据库服务    数据库     数据表          

3.mysql

  • Oracle: mysql
  • 马丁: MariaDB

Xampp:是一个服务器套装,包含多款服务器软件,例如mysql,apache..

 3.1mysql部署结构

  服务器端:负责存储/维护数据 —— 银行的数据库服务器

   C:/xampp/mysql/bin/mysqld.exe    启动文件

   占用3306端口

  客户端:负责连接服务器端,对数据进行增删改查操作 —— ATM机

   C:/xampp/mysql/bin/mysql.exe   客户端文件

 3.2使用客户端连接服务器端

  mysql.exe  -h127.0.0.1  -P3306  -uroot  -p

 -h   host   IP地址/域名    127.0.0.1/localhost

   -P   port   端口

   -u   user   用户名    root 管理员账户

   -p   password   密码    xampp下root用户对应的密码是空

  mysql  -uroot   简写形式

注意:连接的结尾不能加分号

 3.3常用的管理命令

  quit;  退出连接

  show  databases;  显示当前所有的数据库

  use  数据库名称;  进入指定的数据库

show tables;   显示当前数据库下所有的数据表

desc 数据便名称; 描述数据表中都有那些列

所有命令都是以英文的分号作为结束

4.SQL命令

4.1概念

结构化查询语言,用于操作关系型数据库服务器,主要是对数据的增删改查

4.2执行方式

  • 交互模式:在客户端输入一行,点击回车,服务器端就会执行一行,适用于临时性的查看数据
  • 脚本模式:客户端把要执行的命令写在一个脚本文件中,一次性提交给服务器执行适用于批量的操作数据
    • 如何提交脚本文件:在连接之前     mysql -uroot<拖拽脚本文件过来  回车

4.3SQL命令的语法规范

  • 一条SQL命令可以跨越多行,以英文的分号作为结束
  • SQL命令不区分大小写,习惯关键字大写,非关键字小写
  • 假设某一条SQL命令出现语法错误,则此条命令及以后的命令不再执行
  • 分为单行注释(#...)和多行注释(/*...*/),注释的内容不被服务器执行

4.4常用的SQL命令

4.4.1丢弃(删除)数据库,如果存在

drop database if exists 数据库名称;

4.4.2创建新的数据库

create database 数据库名称;

 4.4.3进入数据库

use 数据库名称;

4.4.4创建数据表

create table student(
  id int,  #整型
  name varchar(8),    #可变化的字符串型,必须指定最大长度
  sex varchar(1),   #M-男  W-女
  score int
);

 4.4.5插入数据 

 insert  into  student  values(‘1’, ’tao’, ’M’, ’61’);

 4.4.6查询数据

  select * from student;

4.4.7删除数据

  •   delete  from  user  where  uid=’2’;

 4.4.8修改数据

  update  user  set  upwd=’666666’,isOnline=’n’ where  uid=’3’;

5.计算机如何存储字符

 5.1如何存储英文字符

  • ASCII:总共有128个,对英文字母及其符号进行了编码
  • Latin-1:对欧洲字母及其符号进行了编码,总共有256,兼容ASCII

 5.2如何存储中文字符

  GB2312:对常用的6千多汉字进行了编码,兼容ASCII

  GBK:对两万的汉字进行了编码,兼容GB2312

  BIG5:台湾繁体字编码

  Unicode:对世界上主流国家常用的语言进行编码,具体分为三种存储方案,分别是utf-8,utf-16,utf-32

 5.3mysql中文乱码产生的原因

  Mysql默认使用Latin-1编码,没有解决中文的存储

 5.4解决mysql中文乱码

  脚本文件另存为的编码为UTF-8

  客户端连接服务器端的编码为UTF-8

  服务器端创建数据库,存储的编码为UTF-8

  

6.列类型

 创建数据表的时候,指定的列所能存储的数据类型

create  table  news(
    nid  列类型
);

 6.1数值型 —— 可以不加引号

6.1.1整型

  •  tinyint  微整型,占1个字节,范围-128~127
  •  smallint  小整型,占2个字节,范围-32768~32767
  •  int  整型,占4个字节,范围-2147483648~2147483647
  •  bigint  大整型,占8个字节

6.1.2浮点型

  •  float   单精度浮点型,占4个字节,最大的制3.4E38,以牺牲小数点后的若干位为代价,存储的数字越大精度越低
  •  double   双精度浮点型,占8个字节,存储的数字越大精度越低
  •  decimal(M,D)   定点小数,小数点的位置不会发生变化,M代表总的有效位数,D代表小数点后的有效位数

6.1.3布尔型

  •   boolean   布尔型,通常只有两个值,分别是true和false,代表真和假,往往用于保存只有两个值的数据,例如:性别、是否在线…
  • 布尔型在使用的时候会自动转换为tinyint,true转为1,false转为0,可以执行插入1或者0

true和false属于关键字,在使用的时候不能加引号

 6.2日期时间型 —— 必须加引号

  date   日期型    ‘2021-6-2’

  time   时间型     ’15:19:30’

  datetime   日期时间型    ‘2021-6-2  15:19:30’

 6.3字符串型 —— 必须加引号

  varchar(M)  变长字符串,几乎不会产生空间浪费,数据的操作速度相对慢,M的最大值是65535,常用于存储变化长度的数据,例如:标题、内容、姓名…

  char(M)   定长字符串,可能会产生空间浪费,数据的操作速度相对快,M的最大值是255,常用于存储固定长度的数据,例如:手机号码、身份证号码…

  text(M)   大型变长字符串,M的最大值是2G

char(5)

varchar(5)

a

a\0\0\0\0

a\0

ab

ab\0\0\0

ab\0

一二三

一二三\0\0

一二三\0

create  table  user(
    head  varchar(32)   #tao.jpg
);

选择合理的列类型

Create  table  t1(
  id  int,
  age  tinyint,
  phone  char(11),
  sex  Boolean,
  price  decimal(6,2),   #9999.99
  detail  varchar(5000),
  ctime  datetime
);

练习:选择合理的列类型,编写脚本文件02_xuezi.sql,先丢弃再创建数据库xuezi,设置编码为utf-8,进入数据库,创建保存商品数据的表laptop,包含编号lid,标题title,价格price,库存量stockCount,上架时间shelfTime,是否在售isOnsale;插入若干条数据。

7.列约束

 mysql可以对要插入的数据进行特定的验证,只有符合条件才允许插入

 create  table  t1(
lid  int  列约束
);

 7.1主键约束 —— primary key

  声明了主键约束的列,不允许插入重复的值,一个表中只能有一个主键约束,通常加在编号列,可以加快数据的查找速度。

null:表示一个暂时无法确定的值,例如:暂时无法确定商品的价格,暂时无法确定商品库存量…

null属于关键字,使用的时候不能加引号

  声明了主键约束的列不允许插入null

  练习:给商品的库存量和上架时间设置值为null  

  练习:给编号列设置值为null

 7.2非空约束 —— not null

  声明了非空约束的列上禁止插入null

  练习:给商品的价格添加非空约束

 7.3唯一约束 —— unique

  声明了唯一约束的列不允许插入重复的值,允许插入null,甚至多个null,一个表中可以出现多个唯一约束

  练习:给商品的标题添加唯一约束,并插入数据测试

 7.4默认值约束 —— default

  可以使用default关键字来设置默认值,具体有两种应用方式

 Insert  into  laptop  values(4, ‘tpe470’,default…);
  Insert  into  laptop(lid, title)  values(5, ‘apple’);  #没有出现的列自动应用默认值

  练习:删除family表中fname列当前的约束,添加默认值约束,设置默认值为’未知’,使用两种方式应用默认值。

 7.5检查约束 —— check

  也称为自定义约束,用户可以自己制定约束的条件

  create  table  student(
    score  tinyint  check(score>=0  and  score<=100)
);

  mysql不支持检查约束,认为会极大的影响数据的插入速度,后期需要通过JS来实现。

 7.6外键约束

  声明了外键约束的列称为外键列,这一个列取值范围到另一个表的主键中,目的是为了让两个表建立关联

  外键列和对应的主键列的列类型保持一致

  foreign  key(外键列)   references  另一个表(主键列)

8.自增列

 auto_increment:自动增长,声明了自增列,插入数据的时候只需要赋值为null,就会获取最大值然后加1插入

 注意事项:

  •   自增列必须应用在整数形式的主键列
  •   声明了自增列允许手动赋值

 9.练习

编写脚本文件tedu.sql,先丢弃再创建数据库tedu,设置编码为utf8,进入数据库,创建保存部门数据的表dept,包含编号did(主键、自增),部门名称dname(唯一约束),插入以下数据

  10  研发部    20  运行部    30  市场部     40  测试部

  创建保存员工数据的表emp,包含编号eid(主键、自增),姓名ename(非空约束),性别sex(默认值为1),生日birthday,工资salary,所属部门编号deptId(外键约束),插入若干条数据

10.简单查询(以上面练习为实例)

 10.1查询特定的列

  示例:查询所有员工的编号和姓名

  select eid,ename from emp;

  练习:查询出所有员工的姓名、性别、生日、工资

  select ename,sex,birthday,salary from emp;

 10.2查询所有的列

 select eid,ename,sex,birthday,salary,deptId from emp;
  select * from emp;

 10.3给列起别名

  示例:查询出所有员工的编号和姓名,使用汉字别名

  select eid as 编号,ename as 姓名 from emp;

  练习:查询出所有员工的姓名,生日,工资,使用汉字别名

  select ename as 姓名,birthday 生日,salary 工资 from emp;

  练习:查询出所有员工的姓名,工资,使用一个字母作为别名

  select ename a,salary b from emp;

as关键字可以省略,保留空格即可

 10.4显示不同的记录

  示例:查询出都有哪些性别的员工

 select  distinct sex  from emp;

  练习:查询出员工都分布在哪些部门

  select  distinct deptId  from emp;

 10.5查询时执行计算

  示例:计算2+3+4+5-6+8*7.3

  select  2+3+4+5-6+8*7.3;

  练习:查询出所有员工的姓名及其年薪

 select ename,salary*12 from emp;

  练习:假设每个员工的工资增加1000,年终奖20000,查询出所有员工的姓名及其年薪,使用汉字别名

 select ename 姓名,(salary+1000)*12+20000 年薪 from emp;

 10.6查询的结果排序

  示例:查询出所有的部门,结果按照编号升序排列

 select * from dept order by did asc;  #ascendant 升序的

  示例:查询出所有的部门,结果按照编号降序排列

 select * from dept order by did desc;

    describe  描述

    descendant  降序

  练习:查询出所有员工的数据,结果按照工资降序排列

  select * from emp order by salary desc;

  练习:查询出所有员工的数据,结果按照年龄从大到小排列(生日从小到大)

  select * from emp order by birthday;

  练习:查询出所有员工的数据,结果按照姓名升序排列

  select * from emp order by ename;

不加排序规则默认是按照升序排列

按照字符串排序是按照首个字符的Unicode码

  练习:查询出所有员工的数据,结果按照工资的降序排列,如果工资相同按照姓名排列

  select * from emp order by salary desc,ename;

  练习:查询出所有员工的数据,结果按照年龄从小到大,要求所有女员工显示在前边。

  select * from emp order by sex,birthday desc;

 10.7条件查询

  示例:查询出编号为5的员工

  select * from emp where eid=5;

  练习:查询出姓名为king的员工

  select * from emp where ename='king';

  练习:查询出20号部门的员工有哪些

  select * from emp where deptId=20;

  练习:查询出工资在6000以上的员工有哪些

  select * from emp where salary>6000;

比较运算符:>  <  >=  <=   =   !=(不等于)

  练习:查询出不在20号部门的员工有哪些

  select * from emp where deptId!=20;

  练习:查询出没有明确部门的员工有哪些

  select * from emp where deptId is null;

  练习:查询出有明确部门的员工有哪些

  select * from emp where deptId is not null;

  练习:查询出工资7000以上的男员工有哪些

 select * from emp where salary>7000 and sex=1;
  select * from emp where salary>7000 && sex=1;

  练习:查询出工资在5000~8000之间的员工有哪些

  select * from emp where salary>=5000 && salary<=8000;
  select * from emp where salary between 5000 and 8000;

  练习:查询出工资在5000以下或者8000以上的员工有哪些

  select * from emp where salary<5000 or salary>8000;
  select * from emp where salary<5000 || salary>8000;
  select * from emp where salary not between 5000 and 8000;

  练习:查询出1993年出生的员工有哪些

  select * from emp where birthday>='1993-1-1' && birthday<='1993-12-31';
  select * from emp where birthday between '1993-1-1' and '1993-12-31';

  练习:查询出20号部门或者30号部门的员工有哪些

  select * from emp where deptId=20 || deptId=30;
  select * from emp where deptId in(20,30);

  练习:查询不在20号部门并且不在30号部门的员工有哪些

  select * from emp where deptId!=20 and deptId!=30;
  select * from emp where deptId not in(20,30);

 10.8模糊条件查询

  示例:查询出姓名中含有字母e的员工有哪些

  select * from emp where ename like '%e%';

  练习:查询出姓名中以e结尾的员工有哪些

  select * from emp where ename like '%e';

  练习:查询出姓名中倒数第2个字符是e的员工有哪些

select * from emp where ename like '%e_';

%  匹配任意个字符  >=0

_  匹配任意1个字符   =1

以上两个匹配符结合着like关键字使用

 10.9分页查询

  查询的结果中有太多的数据,一次显示不完可以做成分页显示

  需要两个已知的条件:当前的页码、每页的数据量

开始查询的值 = (当前的页码 - 1) * 每页的数据量

 select * from emp  limit 开始查询的值,每页的数据量;

  练习:假设每页显示5条数据,分别查询出前3页

  第1页:select * from emp limit 0,5;
  第2页:select * from emp limit 5,5;
  第3页:select * from emp limit 10,5;

注意事项:开始查询的值和每页的数据量在SQL命令中,必须是数值型,不能加引号,否则报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱿鱼G

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值