关于MySQL的笔记

本文目录

1 MySQL

1.1 连接mysql服务器

1、下载并安装mysql或者maraiadb ,过程省略。

2、连接mysql服务器:mysql -u root -p 密码

3、修改密码:mysqladmin -u root -p flush-privileges password “new_pwd”

4、连接mysql服务器并指定IP和端口:
mysql -uroot -proot -h127.0.0.1 -P3306
-h:后面给出的127.0.0.1是服务器主机名或ip地址,可以省略的,默认连接本机;
-P:(大写的P)后面的3306是连接端口,可以省略,默认连接3306端口。

5、退出客户端命令:quit 或 exit 或 \q

6、常见问题:
关于MySQL的笔记
原因:环境变量没有配置或配置路径不对。
解决方法:复制mysql安装目录下的bin目录的路径,将bin目录的路径添加到path环境变量
中!! 可以在cmd中通过 echo %path% 检查path环境变量的值。

7、扩展内容:
1)在cmd中连接mysql服务器之后,可以使用 #、/**/、–(空格)等符号添加注释,例如:
关于MySQL的笔记
2)在cmd中连接mysql服务器之后,在书写SQL语句时,可以通过 \c 取消当前语句的执行。

3)命令要以分号(;)或斜线+g(\g)结尾。你用的是\G,会是另一种格式:它导致结果不以表格形式展示,而是使每条记录都分成多行来展示。

1.2 数据库概述

1.2.1 什么是数据库

1、MySQL 是一个开源、多线程、关系型数据库管理系统,它稳定可靠、性能高、功能强大

2、数据库:“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、
有组织的、可共享的、统一管理的大量数据的集合。

3、好处:1.可以持久化数据到本地;2.结构化查询

4、数据库的分类:
1.早期: 层次式数据库、网络型数据库
2.现在:关系型数据库、非关系型数据库

5、关系型数据库:底层以二维表的形式保存数据的库就是关系型数据库。

6、什么是数据库服务器
数据库服务器就是一个软件(比如mysql软件)将数据库软件安装在电脑上,当前电脑就是
一个数据库服务器。就可以对外提供存取数据的服务。

在一个数据库服务器中可以创建多个数据库(dataBases),每一个数据库都是一个单独的仓
库。

7、什么是表
一个数据库中可以创建多张表,每张表用于存储一类信息(数据库)。
表名具有唯一性。

表记录:一张表中可以包含多行表记录,每一行表记录用于存储某一个具体的数据。

1.2.2 什么是SQL语言

1、SQL是一门用于操作关系型数据库的通用的语言.

DB:数据库–保存一些列有组织的数据
DBMS:数据库管理系统–数据库是通过DBMS创建和操作的容器
SQL:结构化查询语言–专门与数据通信的的语言

2、SQL语句对大小写不敏感。推荐关键字使用大写,自定义的名称(库名,表名,列名、别名等)使用小写。

并且在自定义名称时,针对多个单词不要使用驼峰命名,而是使用下划线连接。(例如:tab_name,而不是 tabName )

1.3 数据库及表操作

1.3.1 创建、删除、查看数据库

1、查看mysql服务器中所有数据库:
SHOW DATABASES; – 查看当前数据库服务器中的所有库

CREATE DATABASE mydb1; – 创建mydb1库
DATABASE 和SCHEMA结果一样:CREATE SCHEMA database_name

2、进入某一数据库(进入数据库后,才能操作库中的表和表记录)
use test; – 进入test数据库

3、show tables; – 查看test库中的所有表

4、删除mydb1库:drop database mydb1; – 删除不存在的库,这种写法会报错!

drop database if exists mydb1; – 如果存在mydb1,则删除;

5、重新创建mydb1库,指定编码为utf8
语法:CREATE DATABASE 库名 CHARSET 编码;
需要注意的是,mysql中不支持横杠(-),所以utf-8要写成utf8;
create database mydb1 charset utf8; – 建库时,最好指定编码,如果不指定,这个库的编码有可能是latin1

create database if not exists mydb1 charset utf8; 如果不存在则创建mydb1;

6、查看建库时的语句(了解, 并验证数据库库使用的编码)

语法:SHOW CREATE DATABASE 库名;

7、其他
COLLATE latin1_bin;告诉MySQL 数据的存储方式是二进制拉丁字符。

1.3.2 创建、删除、查看表

1、进入mydb1库,删除stu学生表(如果存在)
use mydb1;
drop table if exists stu; – 如果存在则删除

2、创建stu学生表(编号[数值类型]、姓名、性别、出生年月、考试成绩[浮点型]),建表的语法:

use mydb1;
create table stu(
id int,
name varchar(50), -- 50表示name这一列,最多能存50个字符
gender varchar(10),
birthday date,
score double
);

3、查看stu学生表结构 – 语法:desc 表名

1.3.3 新增、修改、删除表记录

1、往学生表(stu)中插入记录(数据)
语法:INSERT INTO 表名(列名1,列名2,列名3…) VALUES(值1,值2,值3…);

insert into stu(id,name,gender,birthday,score)
value(1,'小黄','male','2000-1-1',85);
-- 如果插入的有中文数据,在cmd中,先 set names gbk; 再插入,可
以防止中文乱码(或者中文数据插入失败)
insert into stu value(2,'小红','female','2001-2-3',90);
insert into stu value(3,'小明','male','2002-3-4',78);

提示:
方式一支持插入多行,以及子查询,方式二不支持插入多行,也不支持子查询;
方式二:insert into 表名 set 列名=值,列名=值,…;

1)当为所有列插入值时,可以省写列名,但值的个数和顺序必须和声明时列的个数和顺序保持一致!
2)SQL语句中的值为字符串或日期时,值的两边要加上单引号(有的版本的数据库双引号也可以,但推荐使用单引号)。
3)(针对cmd窗口)在插入数据之前,先设置编码:set names gbk;
或者用以下命令连接mysql服务器:mysql --default-character-set=gbk -uroot -proot
等价于:
mysql -uroot -proot
set names gbk;

2、查询所有信息
select * from stu; – *号是通配符,表示查询所有列

3、修改stu表中所有学生的成绩,加10分特长分
修改语法: UPDATE 表名 SET 列=值,列=值,列=值…[WHERE子句];
update stu set score=83 where id=1;

修改多表的记录:
update 表1 别名 inner|left|right join 表2 别名 on 连接条件 set 列=值,…where 筛选条件

4、删除stu表中所有的记录
DELETE FROM 表名 [where子句]
delete from stu where id>1;

多表删除:
delete 表1的别名, 表2的别名 from 表1的别名 inner|left|right join 表2 别名 on 连接条件 where 筛选条件

方式二:truncate table 表名;–效率要高一丢丢

truncate和delete的区别
1.假如要删除的表中有自增长列,用delete删除后,再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列的数据从1开始
2.truncate删除没有返回值,delete删除有返回值,可以返回受影响的行数
3.delete可以加where条件,truncate不能加
4.truncate删除不能回滚,delete删除可以回滚。

5、MySQL 和MariaDB 是不关注列的排位的。若想将新列加在最前面,要用FIRST,而不是 AFTER。FIRST 后不需要带列名
ALTER TABLE birds_new ADD COLUMN wing_id CHAR(2) AFTER family_id;

6、修改列的大小,就需要用到CHANGE COLUMN 子句。 或者在添加新列的时候指定
CHANGE COLUMN common_name common_name VARCHAR(255);

CHANGE COLUMN 子句中,第一次指示要改哪一列。第二次给该列指定一个新名字。不过即使没打算改列名,你还是要写上一个名字,否则会报错,并拒绝执行。接下来指定数据类型。即使你只打算改名而没打算改类型,你还是要写上一个类型。

在使用CHANGE COLUMN 时,就算只想修改该列的某一方面,服务器也需要你完整地声明整个新列。

7、标识列:又称自增长列,可以不用手动的插入值,系统提供默认的序列值

特点:

  1. 标识列必须和主键搭配吗?不一定,但要求是一个key
  2. 一个表至多有一个标识列
  3. 标识列的类型只能是数值型
  4. 标识列可以通过set auto_increment=3;设置步长
  5. 可以通过手动插入值,设置起始值。

修改表时设置标识列:
alter table emp modify column id int primary key auto_increment;

1.3.4 复制表记录

1、 复制表的结构、数据和设定。
INSERT INTO birds_new SELECT * FROM rookery.birds;

2、

1.4 查询表记录

视图

1、视图(mysql从5.0.1开始的的功能)
一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,且是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果。
应用场景:多个地方用到同样的查询结果 或 该查询结果使用的sql语句较复杂
示例: create view v1 as select name,job from emp e inner join dept p on e.‘deptid’=p.‘id’;
select *from v1 where name like ‘张%’;

好处:重用sql语句;简化复杂的sql操作,不必知道它的查询细节;保护数据,提高安全性。

视图的修改:
方式一:create or replace view 视图名 as 查询语句;
方式二:alter view 视图名 as 查询语句;

视图的删除:drop view 视图名 , 视图名,…

查看视图:desc v1; 或 show create view v1;

视图的更新:1.插入:insert into v1 values(‘zhangfei’,‘zf@qq.com’);
2.修改:update v1 set name=‘张飞’where 筛选条件
3.删除:delete from v1 where name = ‘张飞’;

以下类型视图是不能更新的:
1.包含以下关键字的sql语句:分组函数,distinct、group by、having 、union或者union all;
2.select中包含子查询;
3.join;
4.from一个不能更新的视图;
5.where 子句的子查询引用了from子句中的表。

存储引擎和JVM调优

存储引擎:在mysql中的数据用各种不同的技术存储在文件(或内存)中。

  1. 通过show engines;来查看mysql支持的存储引擎;
  2. 在mysql中用的最多的存储引擎有:innodb, myisam, memoryd等。其中innodb支持事务,而myisam, memoryd等不支持事务。

创作不易,转载请注明出处

备注

BLOB是二进制大对象的意思。我们可以将一张图像文件,如JPEG 文件,放进BLOB 列。但这种做法通常是不好的,因为它会使得表变大,导致备份困难。更好的做法是将图像文件放在文件系统中,然后将其文件路径或URL 地址存进数据库,以指示如何找到该文件。

ADD COLUMN endangered BIT DEFAULT b’1’ AFTER bill_id,
BIT 数据类型,只占一位,状态有两种:1 代表有设值,0 代表没设值。用DEFAULT 指定了该列的默认值。还有,为了给位类型设值,我们需要将值用引号包围,并在前面加上字母b。这种数据类型有个问题。它确实有保存值,但就是显示不出值。如果有设值,则查询时不会显示任何东西,导致ASCII 形式的结果集会在该位置有一个向左的缩进。
对于BIT 类型的列来说,endangered 的意思等同于endangered = 1。如果想选取没设置endangered 的行,则可使用NOT 运算符:
SELECT bird_id, scientific_name FROM birds_new WHERE endangered \G SELECT * FROM birds_new WHERE NOT endangered \G
SHOW COLUMNS FROM birds_new LIKE ‘endangered’ \G
用SHOW COLUMN 语句加上LIKE 子句,结果仅显示endangered 列的设定:

上一篇:springboot导出Excel报表


下一篇:如何用python提取Excel中指定列名的数据