MySQL学习目录

  • 前言
  • 一、MySQL是什么?
  • 二、MySQL的好处
  • 三、数据库的概念
    • 1. DB(database)
    • 2.DBMS(Database Management System)
    • DBMS分为两类
    • 3.SQL(Structure Query Language)
      • SQL的优点
  • 四、数据库的特点
  • 五、MySQL的安装
    • 1.MySQL下载
    • 2.MySQL安装
    • 3.配置环境以及遇到问题的解决方案
  • 六、MySQL的常规命令
  • 七、MySQL的语法规范
  • 八、IDEA 添加MySQL的图形访问界面
  • 九、DQL(Data Query language)语言的学习
    • 1.基础查询
    • 2.条件查询
    • 3.排序查询
    • 4.常见函数
      • 4.1 单行函数(可嵌套使用)
      • 4.2 分组函数
    • 5.分组查询
    • 6.连接查询
    • 7.子查询
    • 8.分页查询
    • 9.联合查询
  • 十、DML语言
    • 1.插入语句
    • 2.修改语句
      • 2.1 修改单表的记录
      • 2.2 修改多表的记录
    • 3.删除语句
  • 十一、DDL语言(数据定义语言)
    • 1. 库的管理
      • 1.1 库的创建
      • 1.2 库的修改
      • 1.3 库的删除
    • 2. 表的管理
      • 2.1 表的创建
      • 2.2 表的修改
      • 2.3 表的删除
      • 2.3 表的复制
    • 3. 常见的数据类型
      • 3.1 数值型
      • 3.2 字符型
      • 3.3 日期型
  • 十二、常见约束
    • 1. 约束类型
    • 约束分类
    • 2. 标识列
  • 十三、 事务(ACID)
  • 十四、 视图
  • 完结感言

前言

学习视频的链接:
[B站](https://www.bilibili.com/video/BV12b411K7Zu)

一、MySQL是什么?

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

二、MySQL的好处

  1. 实现数据持久化
  2. 使用完整的管理系统统一管理,易于查询

三、数据库的概念

1. DB(database)

数据库:存储数据的“仓库”,它保存了一系列有组织的数据。

2.DBMS(Database Management System)

数据库管理系统:数据库是通过DBMS创建和操作的容器。

DBMS分为两类

  • 基于共享文件系统的DBMS(Access)
  • 基于客户机—服务器的DBMS(MySQL、Oracle、SQLServer)

3.SQL(Structure Query Language)

结构化查询语言:专门用来与数据库通信的语言。

SQL的优点

  1. 几乎所有的DBMS都支持SQL。
  2. 简单易学
  3. 是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。

四、数据库的特点

  1. 将数据放到表中,再将表放入到库中。
  2. 一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性。
  3. 表具有一些特性,这些特性定义了数据在表中如何存储,类似“Java”中的设计。
  4. 表有列组成,也可称为字段。所有的表都是由一个或者多个列组成的,每一列类似“Java”中的属性
  5. 表中的数据是按行存储的,每一行类似“Java”中的对象

五、MySQL的安装

1.MySQL下载

MySQL下载链接

2.MySQL安装

MySQL下载可以有两个选择
  • MySQL ZIP Archive(压缩包):压缩版本,需要自己打开ini文件写入配置信息。(我使用的安装方式
  • MySQL MSI Installer:安装版本,在安装过程中,通过将用户的各项选择自动写入ini(配置文件),即自动配置。(推荐使用

3.配置环境以及遇到问题的解决方案

  1. 下载好压缩包后,放到你喜欢的盘解压。
  2. 创建一个my.ini的配置文件,记住后缀名是ini。然后就是不需要创建data的文件夹,因为后面操作时会创建,如果你手动创建data文件夹,可能MySQL运行时会出现问题。所以建议不要手动创建data文件夹。

    my.ini文件的配置内容如下:
在这里插入代码片
#  MySQL Server Instance Configuration File
#----------------------------------------------------------------------------
#  Generated by the MySQL Server Instance Configuration Wizard
#通过使用MySQL服务配置向导生成
#  Installation Instructions#客户端参数配置
#  CLIENT SECTION
#----------------------------------------------------------------------------
[client]
#客户端通过3306端口连接MySQL数据库服务器,如果需要修改端口号,可以直接修改。
#Port=3306
#default-character-set=utf8
loose_default_character_set=utf8
[mysql]
#客户端的默认字符集。
default-character-set=utf8#服务端参数配置
#  SERVER SECTION
#-----------------------------------------------------------------------------
[mysqld]
#服务器端口号。
port=3306
#MySQL数据库服务器的安装目录
basedir="D:\mysql-5.7.30-winx64"
#MySQL数据库文件目录
datadir="D:\mysql-5.7.30-winx64\data"
#忽略软件客户端的字符集,使用服务器的字符集
character-set-client-handshake=FALSE
#MySQL软件端的字符集
character-set-server=utf8
#MySQL软件的存储引擎
default-storage-engine=INNODB
#  Set the SQL mode to strict
#MySQL软件的SQL模式
sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
#MySQL软件的最大连接数
max_connections=200
#MySQL软件的查询缓存
query_cache_size=0
#MySQL软件中可以打开的总表数
table_open_cache=256
#MySQL软件内存中可以存储临时表的最大值。
tmp_table_size=34M
#MySQL软件内存中可以保留的客户端连接线程数
thread_cache_size=8
#MySQL软件中重建索引时允许的最大临时文件的大小
myisam_max_sort_file_size=50G
#MySQL软件重建索引时允许的最大缓存大小
myisam_sort_buffer_size=68M
#MySQL最大关键字缓存大小.
key_buffer_size=54M
#MySQL软件全扫描MyISAM表时的缓存大小
read_buffer_size=64k
#MySQL软件可以插入排序好数据库的缓存大小
read_rnd_buffer_size=256k
#MySQL软件用户排序时缓存大小
sort_buffer_size=256k
#join 连表操作的缓存大小,根据实际业务来设置,默认8M
join_buffer_size=32M#关于INNODB存储引擎参数设置
#关于提交日志的时机
innodb_flush_log_at_trx_commit=1
#存储日志数据的缓存区的大小
innodb_log_buffer_size=1M
#缓存池中缓冲区的大小
innodb_buffer_pool_size=17M
#日记文件的大小
innodb_log_file_size=10M
#允许线程的最大数
innodb_thread_concurrency=8
#跳过密码验证
#skip_grant_tables

#跳过密码验证(在确定安装成功并且可以登录MySQL后,可以取消或者注释,这个需要与否可以看你个人喜好)
skip_grant_tables

配置环境变量:此电脑->属性->高级系统设置->环境变量->新建
然后变量值设置为你的mysql的安装路径,确定


然后在系统变量Path添加:

然后打开Windows的管理员命令提示窗口,输入命令,例如我的命令是:

在这里插入代码片
#路径
cd D:\mysql-5.7.30-winx64\bin
#进入到安装MySQL路径bin里面
D:
#执行下面的初始化命令后会生成data文件夹的内容,接下来就可以执行启动命令了
mysqld install
mysqld --initialize  #注意是两个“-”
#启动MySQL服务
net start mysql
#进入MySQL
mysql -uroot -p
#修改密码
UPDATE mysql.user SET authentication_string=PASSWORD(‘新密码’)WHERE user=’root’ ;
flush privileges;

出现的问题可能会有:

问题1:ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)

解决方法:手动创建data文件夹就会出现此问题,把data文件夹删除,重新运行我上面的命令,即可。

问题2:初次登录mysql需要初始密码
解决方法 :查看MySQL初始密码并修改

六、MySQL的常规命令

在这里插入代码片
#1.查看所有数据库
show databases;#2.创建数据库
create database 库名;#3.删除数据库
drop database 库名;#4.选择数据库
use 库名;#5.查看当前所选择的数据库
select database();
#6.查看当前数据库的所有表
show tables;#7.创建一个表
create table 表名(
列 列类型,
列 列类型,
列 列类型,
...
);#8.删除表
drop table 表名;#9.查询表的所有信息
select * from 表名;#10.查看表的结构
desc 表名;#11.查询其它数据库的所有表(依旧在当前选择的数据库中)
show tables from 库名;#12.查看MySQL的版本
-登录到mysql服务端
select version();
-未登录到mysql服务端(Windows命令提示窗口下)
mysql --version
或者
mysql -V

七、MySQL的语法规范

  1. 不区分大小写,但建议关键字大写。
  2. 命令结尾可以 \g 或者 ; 结尾,建议使用分号结尾。
  3. 根据命令可以进行缩进或者换行。
  4. 注释
    单行注释:#注释文字
    或者
    单行注释:– 注释文字(注意:两个-后面加一个空格然后再加注释文字,没有空格就不是注释文字
    多行注释: /* 注释文字 */

八、IDEA 添加MySQL的图形访问界面

详细请参考该位博主的博客:
Idea添加mysql的图形访问界面

如果连接MySQL时出现这个问题:Server returns invalid timezone. Need to set ‘serverTimezone’ property.

解决方法:
找到上图我圈出来的单词,然后找到 “serverTimezon"属性值,在Value里面写上 Asia/Shanghai。

详细步骤请参考:
https://blog.csdn.net/ITMan2017/article/details/100601438

九、DQL(Data Query language)语言的学习

1.基础查询

语法:

select 查询列表 from 表名;

特点:
查询列表可以是:表中的字段、常量值、表达式、函数
查询的结果是一个虚拟的表格

#1.查询表中的单个字段
select 字段 from 表名;#2.查询表中的多个字段
select 字段1,字段2,... from 表名;#3.查询所有字段
select * from 表名;#4.查询常量值
select 100;#5.查询表达式
select 100%98;#6.查询函数
select version();#7.起别名(若别名涉及到 关键字 空格 以及特殊符号等 别名则需要单引号或者双引号引起来)
方式一:使用as
select 字段 as 别名 from 表名;
方式二:使用空格
select 字段 别名 from 表名;#8.去重
select distinct 字段 from 表名;#9.字符串的拼接
9.1 在MySQL中,+代表的仅仅是运算符,字符串的拼接需要用concat
9.2 在MySQL中,如果两个操作数都是数值型,则做加法运算。例: select 1+2;
9.3 在MySQL中,只要有一方为字符型,在运行时会将字符型数值转换成数值型如果转换成功,则会继续做加法运算。例: select '123'+1;如果转换失败,则会把字符型数值转换成0,然后进行加法运算。例: select 'rrrr'+90;
9.4 在MySQL中,只要一方为null,结果则为null。

2.条件查询

语法:

select 列表查询 from 表名 where 筛选条件

筛选条件:

  1. 按条件运算符筛选:<,>,=, != 或者 <>,>=,<=
  2. 按逻辑运算法筛选:&&,||,!或者 and,or,not
  3. 模糊查询:like,between and ,in ,is null 或者 is not null
模糊查询
#1.like
特点:一般与通配符使用
%:任意多个字符,包含0个字符
_:任意单个字符
若遇到查询下划线的字段时,需要加上 \ 或者  ESCAPE '$';
例:
select name from 表名 where name like '_\_%';
或者
#不规定是$符号,可以是a,b等其他
select name from 表名 where name like '_$_%' escape '$';#between and
特点:- 包含临界值- 两个临界值不能相互换位置#in:就是判断某字段的值是否属于in列表的某一项- in列表的值类型必须一致或兼容- in列表中不支持通配符#is null 或者 is not null 1. =或<>不能用于判断null值2. is null或is not null 可以判断null值

3.排序查询

语法:

select 查询列表 from 表 [where 筛选条件] order by 字段 asc(升序)或者desc(降序);

特点:

  1. 默认排序是升序
  2. order by子句可以支持单个字段、多个字段、表达式、函数、别名
  3. order by子句一般是放在查询语句的最后面,limit子句除外。

4.常见函数

概念:类似于Java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名好处: 1.隐藏实现细节2.提高代码的重用性
分类:1.单行函数2.分组函数(统计函数、聚合函数、组函数)

4.1 单行函数(可嵌套使用)

4.1.1 字符函数

#1.length(获取参数的字节个数)
select length(字段)
#2.caocat(拼接字符串)
select concat(字段1,字段2) from 表名;
#3.upper(转大写)、lower(转小写)
select upper(字段) from 表名;
#4.substr,substring(截取字符串)
#索引从1开始
select substr('字符串',指定索引值,结束索引);
#5.instr(返回子串第一次出现的索引值)
select instr('字符串','子串');
#6.trim(去除前后空格)
select trim('   字符串  ');
#7.lpad(用指定的字符指定左填充指定的长度)
select lpad(str,len,padstr);
#8.rpad(用指定的字符指定右填充指定的长度)
#9.replace 替换
select replace(字符串,被替换的字符串,替换的字符串);

4.1.2 数学函数

#1.round (四舍五入)
select round(1.65);  #2
select round(1.657,2) #1.65
#2.ceil(向上取整,返回>=该参数的最小整数)
select ceil(1.02); #2
select ceil(-1.02); #-1
#3.floor (向下取整,返回<=该参数的最大整数)
select floor(1.65); #1
select floor(-1.65); #-2
#4.truncate 截断
select truncate(1.6666,2) #1.66
#5.mod 取余
#mod(10,3) : 10-10/3*3
select mod(10,3);  #1

4.1.3 日期函数

#1.now 返回当前系统的日期加时间
select now();
#2.curdate 返回当前系统日期,不包含时间
select curdate();
#3.curtime 返回当前系统的时间,不包含日期
select curtime();
#4.可以获取指定的部分,年(year),月(month),日(day),时(hour),分钟(min),秒(second)
select year(now()); #2020
#5.str_to_date 将字符通过指定的格式转换成日期
select str_to_date('9-1-2020','%c-%d-%Y') as "out";
![格式图片](https://img-blog.csdnimg.cn/20200901155426164.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxOTExNTk5,size_16,color_FFFFFF,t_70#pic_center)
#6.date_format 将日期转换成字符
select date_format('2020-9-1','%Y年%m月%d天') as "out";

4.1.4 其他函数

#1.version 查看当前mysql的版本号
select version();
#2.database 查看当前所使用的表
select database();
#3.user 查看当前用户
select user();

4.1.5 流程控制函数

#1.if函数
select if(条件表达式,表达式1,表达式2);
#如果条件表达式成立,执行表达式1,反之,执行表达式2;
#2.case 类似 switch语句
语法:
case 要判断的字段或者表达式
when 常量1 then 要显示的值1或者语句1;(语句加上分号结尾)
when 常量2 then 要显示的值2或者语句2;
when 常量3 then 要显示的值3或者语句3;
...
else 要显示的值n或者语句n;
end
#3.case 类似 多重if
语法:
case
when 条件1 then 要显示的值1或者语句1;(语句加上分号结尾)
when 条件2 then 要显示的值2或者语句2;
when 条件3 then 要显示的值3或者语句3;
...
else 要显示的值n或者语句n;
end

4.2 分组函数

#1.sum 求和
select sum(字段);
#2.avg 求平均值
select avg(字段);
#3.max 求最大数
select max(字段);
#4.min 求最小数
select min(字段);
#5.count 求总个数
select count(字段);

特点:

  1. sum,avg 只处理数值型数据
  2. max,min,count 可以处理任意类型
  3. 以上分组函数都忽略null做计算
  4. 可以搭配distinct关键字做去重计算
  5. 一般使用count(*)用来计算行数
  6. 和分组函数一同查询字段要求是group by后的字段,其他字段一同查询有限制,结果无意义;

5.分组查询

语法:

select 分组函数[,分组后的字段] from table [where 筛选条件] group by 分组的字段 [order by 排序的字段]

特点:
1.和分组函数一同查询的字段必须是group by后出现的字段
2.筛选分为两类:分组前筛选和分组后筛选

针对的表 位置 连接的关键字
分组前筛选 原始表 group by 前 where
分组后筛选 group by 后的结果集 group by 后 having
3.分组函数筛选不能放在where后面
4.能用分组前筛选的,尽量使用分组前筛选,提高效率
5.分组可以按单个字段也可以按多个字段
6.可以搭配着排序使用
1.分组前筛选的案例
#案例1:查询邮箱中包含a字符的 每个部门的最高工资
select max(salary),department_id    #salary工资,department_id部门编号
from employees
where email like '%a%'
group by department_id;2.分组后筛选的案例
#案例1:每个工种有奖金的员工的最高工资>12000的工种编号和最高工资
select max(salary),job_id   #job_id 工种编号
from employees
where commission_pct is not null #commission_pct 奖金
group by job_id
having max(salary);#综合案例
#查询每个部门每个工种的员工的平均工资,并且奖金不为空,平均工资要大于10000,然后进行高低排序
select avg(salary),department_id,job_id
from employees
where commission_pct is not null
group by department_id,job_id
having avg(salary)>10000
order by desc;

6.连接查询

1.按年代分类:SQL92:只支持内连接内连接:1.等值连接2.非等值连接3.自连接SQL99:支持内连接、外连接、交叉连接内连接:1.等值连接2.非等值连接3.自连接外连接:1.左外连接2.右外连接3.全外连接(mysql不支持)

SQL92:

等值连接语法:
select 查询列表 from 表1,别名1,表2,别名2
where 表1.key = 表2.key
[and 筛选条件]
[group by 分组字段]
[having 分组后的筛选]
[order by 排序]非等值连接语法:
select 查询列表 from 表1,别名1,表2,别名2
where 非等值连接条件
[and 筛选条件]
[group by 分组字段]
[having 分组后的筛选]
[order by 排序]自连接语法:
select 查询列表 from 表1,别名1,表1,别名2
where 等值连接条件
[and 筛选条件]
[group by 分组字段]
[having 分组后的筛选]
[order by 排序]特点:
1.一般为表起别名
2.多表的顺序可以调换
3.n个表连接至少需要n-1个连接条件
4.等值连接的结果是多个表的交集部分

SQL99:

语法:
select 查询列表
from 表1 别名 [连接类型]
join 表2 别名
on 连接条件
[where 筛选条件]
[group by 分组字段]
[having筛选条件]
[order by 排序]
#连接类型
1.内连接:inner
2.外连接:left [outer] 或者 right[outer] 或者 full[outer]
3.交叉连接:cross
内连接特点:
1.可以添加排序、分组、筛选
2.inner 可以省略
3.连接条件放在on后面,筛选条件放在where后面,提高了分离性,便于阅读
4.inner join 连接和sql92中的等值连接效果是一样的,都是查询多表的交集部分
外连接特点:
1.外连接的查询结果为主表中的所有记录
如果从表中有匹配的,显示匹配的值
如果从表中没有匹配的,则显示null
2.左外连接,left join 左边的是主表右外连接,right join 右边的是主表

7.子查询

含义:出现在其他语句中的select语句,称为子查询或者内查询
外部的查询语句,称为主查询或者外查询

分类:
一、按子查询出现的位置:
1.select后面:仅仅支持标量子查询
2.from后面:支持表子查询
3.where或者having后面: 标量子查询、列子查询、行子查询
特点:
-子查询放在小括号内
-子查询一般放在条件的右侧
-标量子查询,一般搭配着单行操作符使用
<、>、>=、<=、=、<>
-列子查询,一般搭配着多行操作符使用
in、any/some、all
-子查询的执行优先于主查询执行,主查询的条件用到子查询的结果

4.exists后面: 表子查询
相当于布尔类型,语法exists(完整的查询语句),返回的结果是1或者0。

二、按结果集的行列数不同
1.标量子查询(单行子查询)(结果集只有一行一列)
2.列子查询(结果集只有一列多行)
3.行子查询(结果集有一行多列)
4.表子查询(结果集一般多行多列)

8.分页查询

语法:

select 查询列表
from 表1
[连接类型 join 表2]
[on 连接条件]
[where 筛选条件]
[group by 分组字段]
[having 分组后的筛选]
[order by 排序]
limit offset,size;   #offset要显示条目的起始索引(从0开始)#要显示的条目个数

特点:

  1. limit语句在查询语句的最后,执行顺序也是最后执行
  2. limit (offset - 1)* size

9.联合查询

应用场景:要查询的结果来自与多个表,且多个表之间没有直接的连接关系,但查询的信息一致。

语法

查询语句1
union
查询语句2
union
....

特点

  1. 要求多条查询语句的查询列数是一致的
  2. 要求多条查询语句的每一列的类型和顺序最好一致
  3. union关键字默认去重,如果使用union all 可以包含重复项

十、DML语言

1.插入语句

语法

#方式一:
insert into 表名(列1,...) values(值1,...);
#特点:#1. 字段类型和值类型一致或兼容,而且要一 一对应#2. 可以为空的字段,可以不用插入值,或用null填充#3. 不可以为空的字段必须插入值#4. 字段个数要和值的个数一致#5. 字段可以省略不写,但默认所有字段,并且顺序和表中的顺序时一样的#方式二
insert into 表名
set 列名=值,...;区别:方式一和方式二
1.方式一可以支持多行插入
2.方式一可以支持子查询

2.修改语句

2.1 修改单表的记录

语法

update 表名  ①
set 列=新值,... ③
where 筛选条件; ②执行顺序:① -> ② -> ③

2.2 修改多表的记录

语法

SQL92:
update 表1 别名,表2 别名
set 列=值,...
where 连接条件
and 筛选条件;SQL99:
update 表1 别名
inner|left|right join 表2 别名 on 连接条件
set 列=值,...
where 筛选条件;

3.删除语句

语法

#方式一:
1.单表删除
delete from 表名 where 筛选条件;
2.多表删除
SQL92:
delete 表别名
from 表1 别名,表2 别名
where 连接条件
and 筛选条件;SQL99:
delete 表 别名
from 表1 别名
inner|left|right join 表2 别名 on 连接条件
where 筛选条件;
#方式二:
truncate table 表名; #清空表格所有数据delete与truncate的区别:1. delete删除语句可以用where,但truncate不可以2. truncate删除效率比delete删除效率高3. truncate无返回值,delete有返回值4. truncate删除不能回滚,delete删除能回滚5. 若删除的表中有自增列,truncate删除后,再插入数据,是从1开始的delete删除后,再插入数据,是从断点开始的

十一、DDL语言(数据定义语言)

1. 库的管理

1.1 库的创建

语法

create database [if not exists] 库名;
#注意
if not exists是判断数据库在是否含有相同的库名,没有就创建。

1.2 库的修改

语法

alter database 库名;
#注意:
可以修改其数据库的编码集

1.3 库的删除

语法

drop database [if exists] 库名;

2. 表的管理

2.1 表的创建

语法

create table [if not exists] 表名(
列 列类型(长度)[约束],
列 列类型(长度)[约束],
...
列 列类型(长度)[约束]
);

2.2 表的修改

语法:

#1. 修改列名
alter table 表名 change column 旧列名 新列名 新类型(旧类型);
#2. 修改表名
alter table 表名 rename to 新表名;
#3. 修改列的类型或者约束
alter table 表名 modify column 列 新类型或者新约束;
#4. 添加列
alter table 表名 add column 列 列类型;
#5. 删除列
alter table 表名 drop column 列;

2.3 表的删除

语法

drop table [if exists] 表名;

2.3 表的复制

语法

#1. 仅仅复制表的结构
create table 表 like 被复制的表;
#2. 复制表的结构和数据
create table 表 select * from 表名;
#3. 复制表的部分数据
create table 表 select 查询列表 from 表名 where 筛选条件;
#4. 仅仅复制表的某些字段
create table 表 select 查询列表 from 表名 where 0;
#注意
0 相当于 false

3. 常见的数据类型

3.1 数值型

1.整型

特点
1.在定义整型时,默认是有符号,如果想设置成无符号在类型后面加入unsigned关键字
2.如果插入的数值超过了整型的范围,会报out of range异常,并插入整型临界值
3.如果不设置长度,会有默认长度。zerofill关键字是显示出长度,如果不够会用0填充

2.小数:定点型、浮点型

特点

  1. 小数类型(M,D),M:整数加小数部位的长度 D:小数部位,超过范围就会插入临界值
  2. M,D可省略,float,double 无默认值,但加上会使数据更加具有精度,定点数decimal,则有默认值,一般为M为10,D为0;
  3. 定点数类型的精度较高。

3.2 字符型


特点
1.char 可以省略M,默认为1 ;varchar不可以省略
2.char 是不可变,varchar是可变的
3.char空间消耗比较大,但效率高;varchar空间消耗小,但效率低

3.3 日期型


特点
1.timestamp受时区影响,datetime不受时区影响

十二、常见约束

1. 约束类型

  1. not null :非空,保证该字段的值不能为空
  2. default:默认,用于保证该字段有默认值
  3. primary key :主键,用于保证该字段具有唯一性,且非空
  4. unique :唯一,用于保证该字段具有唯一性,可以为空
  5. check :检查约束 [mysql中不支持]
  6. foreign key :外键,用于两个表的关系,用于保证该字段的值必须来自主表的关联列的值
    在从表中添加外键约束

约束分类

1.列级约束:6种约束从语法上都支持,但外键没有效果
2.表级约束:除了非空,默认,其他都可以

语法

create table 表名(字段名 字段类型 列级约束,字段名 字段类型,[constraint] 表级约束
);create table 表名(字段名 字段类型 not null #非空字段名 字段类型 primary key #主键字段名 字段类型 unique #唯一字段名 字段类型 default #默认值constraint 约束名 foreign key(字段名) references 主表(被引用的表)
);

主键与唯一的区别(重要):
1.两个都有唯一性,主键不可以为空,唯一可以为空
2.唯一值不能有相同值

外键特点:
1.要求在从表设置外键关系
2.从表的外键列的类型和主表的关联列的类型要求一致或者兼容,名称无要求
3.主表的关联列必须是一个key(一般是主键)
4.插入数据,先插入主表,在插入从表
删除数据,先删除从表,在删除主表

修改表的约束
#1.添加列级约束
alter table 表名 modify column 字段名 字段类型 新约束;
#2.添加表级约束
alter table 表名 add constraint 约束名 外键;

2. 标识列

自增长列
auto_increment

特点:

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

十三、 事务(ACID)

事务的特性:

  1. 原子性:一个事务不可再分割,要么都执行,要么都不执行
  2. 一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态
  3. 隔离性:一个事务执行时不受其他事务的干扰
  4. 持久性:提交事务后,会永久改变其数据库的数据
语法:
#1.开启事务
set autocommit = 0; #关闭其自动事务提交功能(仅限当前事务)
#2.编写SQL语句
语句1 ...
#3.结束事务
commit; #提交事务
rollback; #回滚事务

十四、 视图

语法:
create view 视图名 as 查询语句;
然后调用其视图名特点:1. 重复使用SQL语句2. 简化复杂的SQL操作3. 保护数据,提高安全性

完结感言

学习完MySQL已经有段时间了,写这边博客就是想让自己忘记的时候回来看看,其实做的这些笔记也不是很全,有些也没有多写。下次做些进阶点MySQL笔记。

MySQL自学笔记详细版(从安装到入门)相关推荐

  1. 史上最详细版Centos6安装详细教程

    镜像CentOS-6.8-x86_64-bin-DVD1.ISO 将下载好的镜像上传到服务器,并选择该镜像(详情请看上篇exsi镜像上传文章) 一.安装开始 开机选择第一项 这里询问我们是否要对光盘进 ...

  2. MySQL自学笔记2--select的5个子句

    MySQL自学笔记 使用的MySQL自带命令客户端,其中具体的操作是在自建的数据库下room303表中进行的,表中的列有:id.name.age.email.tel.salary.riqi.class ...

  3. Docker超详细版教程通俗易懂 -之- 入门篇

    前言 学习Docker,你可以熟练的操作命令,能够把你的项目构建成Docker镜像! 是后端开发人员必备的技能!下面是自己的学习笔记,希望能帮助到需要的你! 特别感谢哔哩哔哩狂神:[狂神说Java]D ...

  4. 一些mysql自学笔记1

    ##关于一些快捷键 win+R打开cmd win+shift+S局部截屏 mspaint打开画板 F12对sqlyog自动格式化 F9执行 代码错误是因为中英文错误,笔者在写的时候为了效率并没有仔细管 ...

  5. mysql 8.XXX zip版的安装使用

    1,去官网下载好mysql的安装包https://dev.mysql.com/downloads/file/?id=479669地址我复制过来了,是最新版的 2,将安装包解压到D盘,在进入解压的目录新 ...

  6. scons 手册_SCons笔记(详细版)

    http://andylin02.iteye.com/blog/850341 1. 基本使用 SConstruct文件就功能而言相当于Makefile文件,就内容而言则是Python脚本,scons读 ...

  7. 老杜 mySql自学笔记34道例题

    1.取得每个部门最高薪资的人员 第一步:取出每一个部门当中薪资最高的人(按部门分类,找出每一组当中的最大值) mysql> select deptno,max(sal) as maxsal fr ...

  8. MySQL自学笔记(二)

    二.数据库管理 2.1 外键(FOREIGN KEY) MySQL 外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列.一个表可以有一个或多个外键. 外键对应的是参 ...

  9. mysql基础操作(详细版)--增删改查

    文章目录 1.数据类型 2.运算符 3.正则表达式 4.多表关系 5.常用的逻辑关键字 ---------- 1.数据库常用操作 表常用操作 2.创建表 3.数据插入 4.数据修改 5.数据删除 6. ...

最新文章

  1. 最长公共子序列_Java恶意序列化背后的历史和动机
  2. yolov3训练loss为0
  3. showModalDialog跨域访问的解决
  4. Ultra96_v2实现交通标示识别
  5. matlab遗传算法拟合,基于遗传算法的数据拟合在MATLAB环境中的实现
  6. 请勿在计算机室吃带果壳的食品英语,双语者如何在两种语言间切换?
  7. SQL Server数据库 - 安装教程
  8. 学习sift算法的原理和步骤_大白话人工智能算法-第32节集成学习之通俗理解XGBoost原理和过程
  9. Revisiting Time Series Outlier Detection: Definitions and Benchmarks
  10. 机器人核心期刊及会议
  11. 用 JAVA 开发游戏连连看(之二)实现游戏的算法
  12. 吴枫 python小课账号_吴的解释|吴的意思|汉典“吴”字的基本解释
  13. Flutter 实现风车加载动画组件
  14. 华为校园编码达人秀(第二季) 查找家谱
  15. SpringBoot + uniApp实现的掌上生鲜超市购物微信小程序系统 附带详细运行指导视频
  16. 谁若97岁死,奈何桥上等三年。
  17. 深度学习实验总结:PR-曲线、线性回归、卷积神经网络、GAN生成式对抗神经网络
  18. 线性表-链式存储结构
  19. 40隐式构造函数和隐式转换,还有explicit关键词的确切含义【C++学习笔记】
  20. 数据结构与算法 知识点总结,超全!!!

热门文章

  1. Elasticsearch 索引模板
  2. TFT LCD屏接口芯片-通达LT7381(SSD1963)
  3. Elliptic Curve Cryptography (ECC) and Pairings 椭圆曲线密码学与配对
  4. 亚利桑那州立大学在线计算机硕士录取,亚利桑那州立大学计算机科学(信息保障)理科硕士入学条件及实习就业...
  5. 运载火箭飞行控制系统设计
  6. 通常所说微型计算机中的奔3,《计算机应用基础》复习资料
  7. 蓝桥杯2017年第八届C/C++ B组省赛习题题解
  8. x86服务器与arm服务器
  9. 大数据学习之路 JUC篇
  10. JS 报错getElementsByClassName.appendChild报错“Uncaught TypeError: s.appendChild is not a function”