MySQL笔记心得(持续更新)

Posted q1427094386

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL笔记心得(持续更新)相关的知识,希望对你有一定的参考价值。

一、什么是数据库

一、什么是数据库

保存数据发展方式:

1、绳子,打结法( 不容易记录内容、不易保存 ) --> 
2、石头、龟壳,甲骨文( 不易携带、象形 字 ) -->
3、竹简,文字( 材料不易获取、记录内容少 ) --> 
4、造纸术,文字( 容易携带、不易保存 ) -->
5、计算机、硬盘,文件( 不易查找数据 ) -->
6、数据库系统DBS database System ( 更便捷的查找数据 ) 

根据处理数据和数据之间关系将数据库划分:

  • 关系型数据库
  • 非关系型数据库**

关系型数据库: SQL所有的数据保存,都是以表的形式进行保存。一般用来保存文字数据

主流软件:MySQL  Oracle  SQLServer ( 学会一种,其他基本相同,每一种都会 有自己的方言 ) 	
有行 有列 , 
单表(一张表):一行中的数据,每一列都是相关联的;               
多表:一张表中的数据,使用的是其他表中的内容来进行编写的

非关系型数据库: NoSQL 数据与数据之间没有任何关系,保存 图片 音频 视频 等等

主流数据库:Redis MongoDB  每一种数据库都是一个独立的新数据库,没有任何相同点;

SQL : 结构化查询语言(Structured Query Language)

数据库: 查询数据、存储数据、修改数据等等; 对数据的增删改查 ; 

二.、为什么使用数据库

更加便捷的对数据进行管理、操作;

三、什么时间使用数据库

javaWeb Java的网页开发 ;            
页面中展示 html(静态资源文件) <-访问技术JavaWeb-> java程序 <- jdbc -> 数据 库获取新闻数据            
当页面中的数据会频繁变化的时候,通过访问数据库来进行修改; 

四、如何使用数据库 MySQL

  1. 安装
    安装mysql,详见安装文档;
  2. 卸载
1、打开控制面板找到mysql相关的进行卸载         
2、找到mysql的安装路径删除mysql的相关文件夹          
3、将文件夹的隐藏文件打开,在C盘找到programData文件夹,找到mysql文件夹 删除;        
4、搜索 注册表编辑器 --> Current_User:总用户--> SOFTWARE --> MYSQL相关的 删除  
Local_Machine:本地机器 --> SYSTEM   --> controlSet001 --> Service --> 搜mysql 相关 干掉 --> CurrentControlSet --> Service --> 
搜 mysql相关 干掉  重启电脑,服务会消失掉;            
5、如果上述操作不中,打开控制面板,卸载,将Microsoft visual c++ redistribution 干掉 之后重新安装; 

五、MySQL语句的分类
保存的数据都是以表的形式,进行存储;

**SQL语句的分类 **

    DDL: 数据定义语言 定义数据库中  数据库的名称  数据表的内容;           
    DCL: 数据控制语言 控制数据库、数据表 谁可以进行编辑、修改、查看、新增         
    DML: 数据操作语言 对数据表中的内容,进行 增加、修改、删除操作 ;       
    DQL: 数据查询语言 对数据表中的内容,进行查询 ;

六、操作MySQL

1、登录MySQL程序 ; 输入密码进入;     
    show databases;         展示当前数据库中所有的文件     
    use bank ;              使用当前所有文件中bank文件       
    show tables ;           展示当前文件中 有多少张表    
    select * from account ; 展示当前account表中的全部内容 

七、主机IP地址

	IP地址的组成 40~255 数字组成 IP会指定一台机器  
    内网ip: 192.168.xxx(网络字段).xxx     内网可以组成局域网     
    外网ip:由联通 电信 移动 分配给的网络ip   全球唯一  171.8.201.140       
    localhost 本机地址  192.168.15.51   等同 127.0.0.1 本机地址 

八、端口

  与一个程序进行绑定,每个机器中的应用端口都是唯一的; 192.168.15.51:110 

二、数据库、表

一、数据库的登录
三种方式

1、通过cmd进入之后,输入 mysql -uroot -p密码   想要使用这种方式,必须配置环境变量         window系统种, .exe文件,表示可执行程序,     
2、通过MySQL的客户端进行登录,输入密码即可进入;    
3、通过可视化工具,navicat 

二、数据语言分类:( 使用学生信息 做举例)

DDL:数据定义语言;用来确定数据库的名称、数据表的结构内容 ; 
1、新建一个excel文件(电脑已经开机)  对应 新建一个数据库名称(数据已经安装并且启动—— 在我电脑右键——管理——服务——Mysql右键启动)  
    create database 数据库名称;  
2、打开创建的数据库   打开excel文件    
    USE students ;
3、设置一个表(表的名称、列的名称、每一列输入内容具体什么 )  创建数据表 
create table student(         
    id int PRIMARY key ,       
    `name`varchar(12) not null ,     
    sex varchar(1) ,    
    tel int(11) ,           
    address varchar(32)        
 ); 

创建数据表的基本语法

CREATE TABLE 表的名称 ( 
    列名1 当前列的数据类型 [约束] , 
    列名2 当前列的数据类型 [约束] ,
    列名3 当前列的数据类型 [约束] , 
    列名4 当前列的数据类型 [约束] ,
    列名5 当前列的数据类型 [约束]
 );

三、数据类型:

数字类型    长度 可以设置也可以不设置 ,大小按照类型的最大长度而定 
    整数型:int         
    小数型:double float 
    文字类型    varchar(65535)  char(255)   **必须要设置长度**         
    时间类型    timestamp 时间戳 = date(--) 日期 + time(:::毫秒) 时间 
在创建数据表的时候, 整数类型使用 int   小数型 double   文本类型 varchar(长度)   时间 类型 timestamp

四、约束:

约束: 限制这个列的内容   
    主键约束:pk primary key 一个表一个主键,唯一非空,
使用将 primary key 放在 (列名 类型) 之后  一般主键会和 自增 auto_increment 搭配使用( 必须是数字类型 ) 

    非空约束:not null 表示当前列中的内容不能够为空 ;可是空格 但不能不输入内容         
    唯一约束:unique 表示当前列中的内容全部唯一,输入的内容唯一,如果没有内容,则可以,即 可以有多个null值         
    外键约束:fk 

主键自增 pk primary key

# 使用主键自增约束
create table tab(
id int primary key auto_increment
);

非空 not null

# 使用非空约束
create table tab(
id varchar(30) not null 
);

唯一 unique

create table tab(
id varchar(30) unique 
);

五、sql中的注释

注释:在执行SQL语句的时候,会自动忽略不执行 ,两种分类 
    单行注释: 只能注释一行内容       
        #   : 后面任意输入都是注释的内容;         
        --  : 后面必须有一个空格,和#使用相同
   多行注释: 可以注释多行内容          
        /*      
           ...  被注释内容        
        */       
    -- 注释的快捷键  
        Ctrl +  / 快速注释     
        Ctrl + Shift + / 解除注释

六、编码格式问题:

编码格式就相当于 字典 (新华出版社 人民出版社 )       
张三 --> hashcode值(ASCII码表) 180012 123123 --> 00000010100110011001 0101001010101010101            
    CPU计算,将二进制转换成十进制,再按照字典去找字    
        
常见编码格式:            
    ISO-8859-1  标准版 英文版 不支持中文 其中1个字符就占1个字节 
    GBK 支持中文 其中英文占1个字节 中文占2个字节             
    万国编码 UTF-8  大部分国家的语言都支持  英文占1个字节 中文3个字节          
    十六进制 0 1 2 3 4 5 6 7 8 9 a b c d e f 

修改数据库中的编码
两种方式:

1、通过可视化操作;    
    将数据库的属性中 字符集修改为 utf8,然后将库中表删除之后,重新创建;  
2、指令      
    通过alter语句,修改每一列的字符集 编码格式 ; 
    alter table 表名 change 要修改的列名  要修改的列名 列类型 (character set utf8) charset =utf8 [约束] ; 


七、数据库的三范式
用来规范创建数据表的,不一定必须遵循,根据情况自己选择遵循与否;

一范式:不可分割     
    每一列中,要自己单独表示一个内容;设计数据库时,每一列的定义必须要保证最小;   
二范式:主键 (非空唯一)     
    在一范式的基础上,再保证数据库中每一条都是唯一的,并且当前行中所有内容都要和主键相关;  
三范式:设计多个表的情况下,除了主键之外,其他列不能和其他表产生关系     
    两个表之间,需要使用主键来建立关系;

数据库设计的三范式:

一范式:数据库设计时,每个字段()必须是单独,不可再分的; 
二范式:数据库设计时,每个表要有主键,每个列必须和主键有关系; 
三范式:数据库设计时,如果需要和其他表创建关系,必须通过主键;
三范式在数据库设计中,不是必须要遵循的;除非一些特殊情况,一般都要遵循

八、在电脑中 数据的大小问题

1024 *1024 kb = 1024 MB = 1 GB

电脑由二进制组成 0101010101

byte  1字节  -128~127 大小 256 28次方 00000011 硬盘中占8short 2字节  216次方 00000000 00000000 65536 -32768 ~32767
int   4字节  232次方 00000000 00000000 00000000 00000000 10-1xxx~(1xxx-1)
long  8字节  264次方 老大了

三、 MySQL操作数据表记录

一、MySQL语句的分类

DDL:数据定义语言

包含的关键字:
	create增 
	drop删 
	alter改

DML 数据操作语言

数据库中两个概念

表结构:
	通过DDL,进行对数据表的增、删、改;不会对数据的个数产生影响;   
表记录:
	实际保存在表中的内容,通过DML进行操作 增加表记录、删除表记录、修改表记录   

新增

增:        
    关键字:insert 
    
使用语法:            
插入的内容是固定的列:
    insert into 表名(列名1,列名2,列名3.... ) values (1对 应值1 ,2对应值2 ,3对应值3 ...) ;       
插入全部列:
    insert into 表名 values (按照建表的顺序填写对应列的值) ; 

删除

删:       
    关键字: delete       
使用语法:    
删除当前表中的全部数据 
    delete from 表名 ;  
删除一条、几条数据:  
    delete from 表名 where 条件( 列名 符号 具体值 ) ; 
条件:          
    符号:    
        判断符: = != > < >= <= 
        特殊单词:   列名 in (xx,xx) ;  列名 between xx and xx ; 
删除分两种:    
    delete删除:单纯的删除掉所有的表记录,主键的自增序列任然存在; —— 表记录 删除           
    truncate删除:不仅删除表记录,还删除自增序列;                —— 表结构 删除( drop table ; create table ) 
删库跑路; rm -rf 

修改

改:  
    关键字: update  
    使用语法: 
        update 表名 set 列名 =; 修改当前数据表中的一个列的内容为其他值; 影响全部记 录 
修改一条、几条数据: 
        update 表名 set 列名 = 值 where 条件(同删除) ;          
修改多个列的内容:   
        update 表名 set 列名=, 列名 = 值 where 条件 ;

案例


# create database db123 ; 创建一个数据库  
-- create database db123 ;  创建一个数据库  

/*
	这是多行注释
*/

-- 注释的快捷键  Ctrl +  / 快速注释     Ctrl + Shift + / 

-- 使用之前已经创建过的数据库 
-- use db4 ;
-- 创建学生信息表  
/*
create table student (
		id int primary key auto_increment ,
		name varchar(12) not null ,
		sex varchar(2) ,
		tel varchar(11) unique ,
		address varchar(32) ,
		major varchar(12) ,
		class varchar(12) ,
		bir timestamp ,
		balance double 
	);
*/

-- 展示创建表 student的 sql语句 
-- show create table student ;
/*
CREATE TABLE `student1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(12) NOT NULL,
  `sex` varchar(2) DEFAULT NULL,
  `tel` varchar(11) DEFAULT NULL,
  `address` varchar(32) DEFAULT NULL,
  `major` varchar(12) DEFAULT NULL,
  `class` varchar(12) DEFAULT NULL,
  `bir` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `balance` double DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `tel` (`tel`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
*/
--  latin 表示西欧编码格式  
/*
CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(12) CHARACTER SET latin1 NOT NULL,
  `sex` varchar(2) CHARACTER SET latin1 DEFAULT NULL,
  `tel` varchar(11) CHARACTER SET latin1 DEFAULT NULL,
  `address` varchar(32) CHARACTER SET latin1 DEFAULT NULL,
  `major` varchar(12) CHARACTER SET latin1 DEFAULT NULL,
  `class` varchar(12) CHARACTER SET latin1 DEFAULT NULL,
  `bir` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `balance` double DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `tel` (`tel`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
*/

-- DDL 删除数据库 删除表
-- drop database db6 ;
-- drop table student1 ;

# 通过sql语句 修改数据库、数据表的编码 
-- ALTER table student character set utf8 ;

# 单独修改每一列的编码格式
-- alter table student change major major varchar(12) CHARACTER SET utf8 NOT NULL ;

-- 查询专业为法学的
-- select * from student where major = '法学' ;


-- 直接创建编码格式为 utf8的数据库
CREATE DATABASE db9 CHARACTER SET utf8;

-- create database db10 charset = utf8 ;
-- 使用数据库
USE db9;

-- 创建数据库 
CREATE TABLE student (
	id INT PRIMARY KEY auto_increment,
	NAME VARCHAR (12) NOT NULL,
	sex VARCHAR (2),
	tel VARCHAR (11) UNIQUE,
	address VARCHAR (32),
	major VARCHAR (12),
	class VARCHAR (12),
	bir TIMESTAMP,
	balance DOUBLE
);

-- 向student表中添加一条数据 id:3 name:赵四 tel :110  
-- 使用语法:	
insert into 表名(列名1,列名2,列名3.... ) values (1对应值1 ,2对应值2 ,3对应值3 ...) ;
INSERT INTO student (NAME, tel) VALUES	('赵四', 123121);

-- 添加全部列的内容
INSERT INTO student VALUES(3,'尼古拉斯','男','17612341234','河南郑州','Java','4','2021-3-5 15:36:20',1000000);

-- 删除数据
DELETE FROM	student;

-- 带条件的删除 ,删除名称为赵四的数据
DELETE FROM	student WHERE	NAME = "赵四";

-- 删除余额多余10000元的 
DELETE FROM	student WHERE	balance > 10000;

-- 删除 性别不是男的数据
DELETE FROM	student WHERE	sex != '男';
-- 删除 没有性别的数据  is null  
DELETE FROM	student WHERE	sex IS NULL;
-- 删除 性别不是男的数据(null)
delete from student where sex !="男" or is null ;

-- 特殊单词:	列名 in (xx,xx) ;  列名 between xx and xx ; 
-- 删除id为910 11 的数据 
delete from student where id in (9 ,10 ,11 );
-- 删除余额在 10k~100k之间的  包含头和尾的内容;
delete from student where balance between 10000  and 100000 ;

-- 使用修改语句 将余额都设置为10000 ;
update student set balance = 10000 ;
-- 将尼古拉斯 的余额设置为100000 ;
update student set balance = 100000 where name = "尼古拉斯" ;
-- 将赵二 余额减少9999 并且性别改为女 
update student set balance = balance -9999 , sex = '女' where name = "赵二";

-- 删除自增记录
truncate table student ;

二、数据库的修改:

1、修改数据库的字符集

语法:alter database 库名 default character set 字符集;

修改数据库字符集:

alter database database_name default character set utf8 COLLATE utf8_general_ci;

2、修改表的字符集

语法:alter table 表名 convert to character set 字符集;

修改数据库表字符集

alter table database_name default character set utf8 collate utf8_general_ci;

3、修改字段的字符集

语法:alter table 表名 modify 字段名 字段属性 character set gbk;

修改字段字符集

alter table table_name change tid tid varchar(64) character set utf8 collate utf8_ge

4、查看数据库建表语句查询到使用的字符集:

show create table table_name

时间日期类型:

Datetime:时间日期,格式是YYYY-mm-dd HH:ii:ss,表示的范围是从10009999年,有0值:0000-00-00 00:0000Date:日期,就是datetime中的date部分。
Time:时间段,指定的某个区间之间,-时间到+时间。
Timestamp:时间戳,只是从1970年开始的YYYY-mm-dd HH:ii:ss 格式与datetime完全一致。
Year:年份,两种格式, year(2)year(4)19012156

四、 MySQL查询

一、DQL :数据查询语言

关键字:select
基础语法:       
    select 列名1 as '当前列的别名', 列名2 , 列名3 ,... from 表名 ;  
        as 是可以省略的     
    查询全部列的数据: select * from 表名 ;

条件查询

带条件查询: selct * from 表名 where 条件 ;            
条件 :                 
    精确条件: = > <  in between..and                   
    模糊条件: like 必须搭配 通配符使用                    
        通配符:                        
          % : 匹配0~n个字符                         
          _ : 仅匹配1个字符

除重查询

关键字:distinct 
    select distinct 列名1 , 列名2 ,... from 表名 ;

排序查询:按照数据进行升降序显示

关键字: order by    
使用语法:        
    select * from 表名 order by 列名 desc(降序)/asc(升序,默认值) ;        
多个列进行排序            
    select * from 表名 order by 列名1 desc , 列名2 desc ,... ;

分组查询:将相同的数据归为一组,进行合并展示

分组查询:将相同的数据归为一组,进行合并展示

关键字:group by     
使用语法:        
    select * from 表名 [where 条件] group by 列名 [having 条件];        
分组条件:            
    1、条件使用的列是表的原始列 ,使用where 作为条件关键字             
    2、条件使用的列是聚合函数生成的列 ,使用 having 作为关键字      
                   
搭配 聚合函数 使用        
    聚合函数: 数学算法,包含 求和 求平均数 求总数count(*) ,单独使用时,只会出现 1 行数 据            
        SUM(列名)     求当前 列 的总和值,只能对数字列进行操作            
        AVG(列名)     求当前 列 的全部数据的平均值,只能对数字列进行操作            
        MAX(列名)     求当前 列 中数据的最大值,如果是数字直接比大小,如果是字符则使用是 hashcode值
        MIN(列名)     求当前 列 中数据的最小值,如果是数字直接比大小,如果是字符则使用是 hashcode值
        COUNT(列名)   求有多少 行 数据;                
当聚合函数和分组搭配使用:数据可能会变成多行;        
    求的不再是当前列,而是当前组内的列 ;      

分页查询:MySQL分页

 关键字:limit        
 基本语法:            
     select * from 表名 limit 开始数据编号(不包含开始编号) , 显示条数 ;                
         如果剩余的数据不够显示条数,则有多少显示多少;

利用现有的表创建新的表

基础语法:        
  CREATE TABLE 新表名 AS SELECT 列名 FROM 旧表名;

总结

MySQL查询语句的汇总:        
  select  列名1,列名2,...           用展示的列        
  from 表名                         用来获取数据的表        
  where 条件(原表中的列作为条件)      用来设置查询条件        
  group by 列名                     用来设置分组        
  having 条件(聚合函数的值条件)      用来设置分组的聚合函数条件        
  order by 列名 asc/desc            用来进行数据排序的        
  limit 开始编号 , 显示条数 ;        用来进行数据切割

案例

-- 查询练习 
use mydb2 ;
create table exam(
		id int primary key auto_increment,
		name varchar(20) not null,
		chinese double,
		math double,
		english double
	);
	insert into exam values(null,'关羽',85,76,70);
	insert into exam values(null,'张飞',70,75,70);
	insert into exam values(null,'赵云',90,65,95);
	insert into exam values(null,'云',90,65,95);
	insert into exam values(null,'赵云云',90,65,95);
	insert into exam values(null,'赵赵云',90,65,95);
	insert into exam values(null,'赵赵云云',90,65,95);
	insert into exam values(null,'刘备',97,50,50);
	insert into exam values(null,'曹操',90,89,80);
	insert into exam values(null,'司马懿',90,67,65);

-- 查询表中全部数据 ;
-- select 列名1, 列名2 , 列名3 ,... from 表名 ;
select id ,name , chinese from exam ;
-- 查询表中全部列的数据
select * from exam ;

-- 查询 姓赵的 学生考试成绩 
select * from exam where name like "赵%";

-- 查询 名字中带有云的 
select * from exam where name like "%云%"  ;
-- 查询 名字以云结尾的
select * from exam where name like "%云" ; 
-- 查询名字第二位为 云的;
select * from exam where name like "_云%" ;
-- 查询名字第三位为 云的;
select * from exam where name like "__云%" ;
-- 查询名字倒数第二位为 云的;
select * from exam where name like "%云_" ;
--查询所有姓刘两个字的学生成绩。
 SELECT * FROM exam where name like "刘_";

-- 查询全部的语文成绩 ( 不带重复的 )
select distinct chinese , math from exam ; 

-- 排序查询 
-- 查询学生id name math ,并且按照数学成绩进行排名
select * from exam order by chinese desc ;

-- 查询学生全部信息,按照语

以上是关于MySQL笔记心得(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章

JavaScrip笔记心得(持续更新)

JavaScrip笔记心得(持续更新)

JavaScrip笔记心得(持续更新)

jQuery笔记心得(持续更新)

jQuery笔记心得(持续更新)

jQuery笔记心得(持续更新)