设为首页 收藏本站
查看: 963|回复: 0

[经验分享] IT十八掌 Mysql-12416495

[复制链接]

尚未签到

发表于 2018-10-10 14:05:45 | 显示全部楼层 |阅读模式
  Day23 mysql
  
数据库简介
  什么是数据库
  数据库就是一个文件系统,但是访问的时候需要使用标准SQL语句来访问数据。如果我们在本地安装,其实我们本地也是一个服务器,这个服务器只能存储数据。
  关系型数据库
  存储的都是实体与实体之间的关系。(用户,订单,商品)
DSC0000.png

  可以通过ER模型图来描述之间的关系
DSC0001.png

  常见的数据库
  Oracle:甲骨文公司的数据库产品,大型的收费的数据库。
  SQLServer:微软公司的数据库产品,中型的收费的数据库。
  MySQL:是开源的,免费的数据库产品。在5.x版本是免费的,6.x是收费的。
  DB2:IBM公司的数据库产品,大型的收费的数据库。
  SyBASE:已退出了历史舞台,PowerDigener(数据库建模工具)
DSC0002.png

Mysql的安装与卸载
  卸载干净
  * 找到MySQL的安装路径,找到my.ini的配置文件。
  * basedir="C:/Program Files (x86)/MySQL/MySQL Server 5.5/" 安装的路径
  * datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"MySQL存储数据的路径
  * 通过控制面板卸载MySQL
  * 找到上面的两个路径,删除就ok了。
  MySQL数据库的安装和配置(参考安装文档)
  * 安装路径不要有中文(*****)
  * MySQL默认端口是3306,不要修改。
  * 设置MySQL的编码集(采用UTF-8的编码)
  * 要把黑窗口的勾勾选上。
  * 设置用户名的密码:两行都是密码,第一行是密码,第二行是确认密码。
  * 安装完成。
  访问:
  cmd > 输入命令mysql -u root -p 回车
  输入密码 回车
MySQL数据库Root密码重置
  1.停止mysql服务:services.msc 进入到服务界面
  2.在cmd>输入一个命令:mysqld --skip-grant-tables(开启一个mysql服务,不需要进行认证.)
  3.新打开一个cmd窗口:mysql -u root -p  不需要输入密码.就可以进入.
  4.输入命令 show databases;查看数据库,输入命令 use mysql;使用mysql数据库。
  5.修改密码的语句:update user set password=password('root') WHERE user='root';
  6.将两个窗口都关闭.
  7.任务管理器中结束(mysqld)进程.
  8.重启mysql服务
  
  
服务器,数据库,表之间的关系
DSC0003.png

  语言解释
  (1)所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
  (2)为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。
  (3)数据库服务器、数据库和表的关系如图所示:
DSC0004.png

  数据在数据库中的存储方式
DSC0005.png

SQL语言
  SQL语言简介
  SQL:Structured Query Language, 结构化查询语言
  特点:非过程性语言
  过程性语言:当前的这条语句执行需要依赖于上一条或几条语句
  非过程性语言:可一条语句,就会执行一个结果。
  为加强SQL的语言能力,各厂商增强了过程性语言的特征
  如Oracle的PL/SQL 过程性处理能力
  SQL Server、Sybase的T-SQL
  SQL是用来存取关系数据库的语言,具有查询、操纵、定义和控制关系型数据库的四方面功能
  SQL分类
  DDL (数据定义语言)
  数据定义语言 - Data Definition Language
  用来定义数据库的对象,如数据表、视图、索引等
  比如创建数据库和创建表
  DML  (数据操纵语言)
  数据处理语言 - Data Manipulation Language
  在数据库表中更新,增加和删除记录
  如 update, insert, delete
  DCL (数据控制语言)
  数据控制语言 – Data Control Language
  指用于设置用户权限和控制事务语句
  如grant,revoke,if…else,while,begin transaction
  DQL (数据查询语言)
  数据查询语言 – Data Query Language
  Select
  今天要完成任务(数据库增删改查(CRUD),表的增删改查,数据的增删改查)
  它代表创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作。
  Curd
创建数据库
DSC0006.png

  CHARACTER SET:指定数据库采用的字符集
  语法:create database  数据名称;
  create database 数据库名称 character set 编码
  练习:
  创建一个名称为mydb1的数据库。
  create database mydb1;
  创建一个使用utf8字符集的mydb2数据库。
  create database mydb2 character set 'utf8';
查看、删除数据库
DSC0007.png

  查看数据库show databases;
  查询数据库的定义show create database 数据库;
  show create database mydb2;
  删除数据库drop database 数据库名称;
  练习
  查看当前数据库服务器中的所有数据库
  show databases;
  查看前面创建的mydb2数据库的定义信息
  show create database mydb2;
  删除前面创建的mydb1数据库
  drop database mydb1;
  修改数据库与其他操作
DSC0008.png

  * 语法:alter database 数据库 character set 编码 ;
  * 练习:查看服务器中的数据库,并把其中某一个库的字符集修改为gbk
  alter database mydb2 character set 'gbk';
  其他的操作
  * 切换数据库(*****) use db_name;
  * 查看当前使用的数据库 select database();
创建表(基本语句)
DSC0009.png

  * 语法:
  create table 表名(
  字段1 类型(长度) 约束,
  字段2 类型(长度) 约束,
  字段3 类型(长度) 约束,
  字段4 类型(长度) 约束
  );
  注意:
  * 表名小括号,后面要有分号。
  * 每一行字段后面要有逗号,但是最后一行没有逗号。
  * 数据的类型后面有长度,如果是字符串类型,长度必须加。如果其他类型可以不加。默认长度。int 默认长度11
DSC00010.png


  public>
  int>  String name;
  String pass;
  String eamil;
  String nikename;
  }
  数据的类型
  
  字符串型 VARCHAR、CHAR
  * varchar和char区别:
  * varchar(经常使用) 长度是可变的。 name varchar(8) 存入数据hello,但是如果存入helloworld报错了。
  * char 长度不可变的。   name char(8) 存入的数据hello,如果不够用空格补全。
  * 效率高:char效果。
  大数据类型(一般不用)
  BLOB、TEXT
  BLOB:二进制文件
  TEXT:字符
  数值型 TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
  逻辑性 对应boolean(0和1)
  BIT
  日期型  DATE、TIME、DATETIME、TIMESTAMP
  * date只包含日期
  * time只包含时分秒
  * datetime和timestamp包含日期和时分秒区别:
  * datetime需要手动录入时间。
  * timestamp不传入数据,默认选择当前系统时间。
创建表练习
DSC00011.png

  create table employee(
  id int,
  name varchar(20),
  gender varchar(10),
  birthday date,
  entry_date date,
  job varchar(100),
  salary double,
  resume text
  );
  使用desc 表名; 查看表的信息
  
  
定义单表字段的约束
  * 主键约束
  * 标识标记该条记录。通过pramary key声明主键。(默认唯一、非空)
  * auto_increment数据库维护主键。自动增长。
  * 唯一约束
  * 值是唯一的。使用unique声明
  * 非空约束
  * 值不能为空not null
  练习
  创建新的标签employee2,把约束加上。
  create table employee2(
  id int primary key auto_increment,
  name varchar(20) unique not null,
  gender varchar(10) not null,
  birthday date not null,
  entry_date date not null,
  job varchar(100) not null,
  salary double not null,
  resume text not null
  );
  其他表操作
  数据表删除
  语法:drop table 表名;
  查看数据表结构
  desc 表名; 查看表结构
  show tables ; 查看当前库内所有表名
  show create table 表名; 查看建表语句和字符集
修改表
DSC00012.png

  alter table 表名 add 字段 类型(长度) 约束; -- 添加字段
  alter table 表名 drop 字段;-- 删除字段
  alter table 表名 modify 字段 类型(长度) 约束;-- 修改类型或者约束
  alter table 表名 change 旧字段 新字段 类型(长度) 约束-- 修改字段的名称
  rename table 表名 to 新表名;-- 修改表名
  alter table 表名 character set utf8;    -- 修改字符集
  练习
  在上面员工表的基本上增加一个image列。
  alter table employee add image varchar(20);
  修改job列,使其长度为60。
  alter table employee modify job varchar(60);
  删除gender列。
  alter table employee drop gender;
  表名改为user。
  rename table employee to user;
  修改表的字符集为utf8
  alter table user character set utf8;
  列名name修改为username
  alter table user change name username varchar(30);
数据库CRUD语句
  Insert语句    (增加数据)
  Update语句  (更新数据)
  Delete语句   (删除数据)
  Select语句 (查找数据)
添加数据
DSC00013.png

  * insert into 表名 (字段1,字段2,字段3..) values(值1,值2,值3...);有几列就插入多少的值。
  * insert into 表名 values(值1,值2,值3...);插入所有的列
  * 注意:
  数据与字段的类型相同。
  字段长度需要控制。
  字符串或者日期类型需要使用' '
  向user表中插入数据
  insert into user values (1,'xiaofeng','1994-10-10','2011-1-1','HR',19000,'aaa','abc');
  insert into user values (2,'美美','1994-10-10','2011-1-1','HR',19000,'aaa','abc');
  insert into user values (3,'小风','1994-10-10','2011-1-1','WORKER',21000,'aaa','abc');
  insert into user values (4,'芙蓉','1994-10-10','2011-1-1','HR',1000,'aaa','abc');
  insert into user values (5,'班长','1994-10-10','2011-1-1','HR',100,'aaa','abc');
  insert into user values (5,'班长',null,'2011-1-1','HR',100,'aaa','abc');
  解决中文乱码的问题
  [client]
  port=3306
  [mysql]
  default-character-set=gbk
  修改完需要重新启动服务
  
  
Update语句
DSC00014.png

  * 语法:update 表名 set 字段=值,字段=值... [where ]
  * 如果没有where条件,默认更新所有的记录。
  * 有where提交,选择某一条或者多条记录。
  将所有员工薪水修改为5000元。
  update user set salary=5000;
  将姓名为’班长’的员工薪水修改为3000元。
  update user set salary=3000 where username='班长';
  将姓名为’美美’的员工薪水修改为4000元,job改为BOSS。
  update user set salary=4000,job='BOSS' where username='美美';
  将班长的薪水在原有基础上增加1000元。
  update user set salary = salary+1000 where username='班长';
Delete语句
DSC00015.png

  如果不使用where子句,将删除表中所有数据。
  Delete语句不能删除某一列的值(可使用update)
  使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。
  同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。
  外键约束
  删除表中数据也可使用truncate table 语句,它和delete有所不同,参看mysql文档。
  delete
  语法:delete from 表名 [where ];删除数据
  truncate 表名; 删除所有的数据
  * truncate 和 delete的区别:
  * truncate删除数据,先删除整个表。再创建一个新的空的表。(效率)
  * delete删除数据,一条一条删除的。(*****)
  练习
  删除表中名称为’班长’的记录。
  * delete from user where username='班长';
  删除表中所有记录。
  * delete from user;
  使用truncate删除表中记录。
  * truncate user;
Select语句
DSC00016.png

  select 指定查询哪些列的数据。
  column指定列名。
  *号代表查询所有列。
  from指定查询哪张表。
  DISTINCT可选,指显示结果时,是否剔除重复数据
  * 语法:
  select * from 表名;查询所有(字段)
  select 字段名1,字段名2,字段名3 from 表名;    显示查询字段名
  select DISTINCT 字段名 from 表名;    去除重复的数据。
  create table stu(
  id int primary key auto_increment,
  name varchar(20),
  math int,
  english int,
  chinese int
  );
  insert into stu values (null,'班长',18,11,62);
  insert into stu values (null,'小风',98,91,92);
  insert into stu values (null,'美美',68,81,52);
  insert into stu values (null,'芙蓉',78,89,66);
  insert into stu values (null,'班长',46,90,65);
  查询表中所有学生的信息。
  select * from stu;
  查询表中所有学生的姓名和对应的英语成绩。
  select name,english from stu;
  过滤表中重复数据。(面试题)
  select distinct english from stu;
  Select语句
DSC00017.png

  * 查询的列可以运算
  * 可以使用别名:使用as 别名并且as可以省略。
  练习:
  在所有学生分数上加10分特长分。
  select name,math+10,english+10,chinese+10 from stu;
  统计每个学生的总分。
  select name,math+english+chinese from stu;
  使用别名表示学生分数。
  select name,(math+english+chinese) as sum from stu;
  使用where条件过滤
  查询姓名为班长的学生成绩
  select * from stu where name='班长';
  查询英语成绩大于90分的同学
  select name,english from stu where english < 15;
  查询总分大于200分的所有同学
  select name,math+english+chinese from stu where (math+english+chinese) > 200;
  常用的符号
DSC00018.png

  >   <   =   =    (不等于)
  in(范围内取内容)
  like-- 模糊查询写法:like '张_或者%';_和%区别:占位符。_只一个%可以有多个
  %的写法like '%张';结果XXX张
  like '张%';结果张XXX
  like '%张%';只要有张就行
  is null-- 判断是否为null
  and-- 并且
  or-- 或者
  not-- 不成立
  练习
  查询英语分数在 80-90之间的同学。
  select * from stu where english >80 and english =80 and english 80或语文分>80的同学。
  select * from stu where math >80 or chinese > 80;
  使用order by 子句排序查询结果
DSC00019.png

  使用order by 升序默认的(asc)/降序(desc)
  * 出现select的语句末尾。
  练习
  对数学成绩排序后输出。
  select name,math from stu order by math;
  对总分排序按从高到低的顺序输出
  select name,math+english+chinese from stu order by (math+english+chinese) desc;
  对学生成绩按照英语进行降序排序,英语相同学员按照数学降序
  select * from stu order by english desc,math desc;
  对姓美的学生成绩排序输出
  select * from stu where name like '美%' order by english desc;
  聚集函数-count
  
   DSC00020.png
  练习:
  统计一个班级共有多少学生?
  select count(*) from stu;
  统计数学成绩大于90的学生有多少个?
  select count(*) from stu where math > 90;
  统计总分大于150的人数有多少?
  select count(*) from stu where (math+english+chinese) > 150;
  聚集函数-SUM
DSC00021.png

  注意:sum仅对数值起作用,否则会报错。
  注意:对多列求和,“,”号不能少。
  ifnull(xxx,0) 如果为null,则值是0
  sum求和(忽略null值)可以同ifnull(xxx,0)
  统计一个班级数学总成绩?
  select sum(math) from stu;
  统计一个班级语文、英语、数学各科的总成绩
  select sum(math),sum(english),sum(chinese) from stu;
  统计一个班级语文、英语、数学的成绩总和
  select sum(ifnull(math,0)+english+chinese) from stu;
  select sum(math)+sum(english)+sum(chinese) from stu;
  统计一个班级语文成绩平均分
  select sum(chinese) / count(*) from stu;
  avg平均数
  练习:
  求一个班级数学平均分?
  select avg(math) from stu;
  求一个班级总分平均分
  select avg(ifnull(math,0)+english+chinese) from stu;
  max最大值
  select max(math) from stu;
  min最小值
  select min(math) from stu;
DSC00022.png

  create table orders(
  id int,
  product varchar(20),
  price float
  );
  insert into orders(id,product,price) values(1,'电视',900);
  insert into orders(id,product,price) values(2,'洗衣机',100);
  insert into orders(id,product,price) values(3,'洗衣粉',90);
  insert into orders(id,product,price) values(4,'桔子',9);
  insert into orders(id,product,price) values(5,'洗衣粉',90);
  insert into orders(id,product,price) values(6,'电视',900);
  group by分组(一起使用)条件过滤需要是having,不能使用where
  练习:对订单表中商品归类后,显示每一类商品的总价.
  select product,count(*),sum(price) from orders group by product;
  练习:查询购买了几类商品,并且每类总价大于100的商品
  select product,sum(price) from orders group by product having sum(price) > 100;
  小结 select 语句 : S-F-W-G-H-O 组合 select ... from ... where ... group by... having... order by ... ;
  顺序不能改变


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-620038-1-1.html 上篇帖子: window下mysql数据备份与还原 下篇帖子: IT十八掌 Mysql 多表查询
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表