学习来源与:明日科技的《MySQL从入门到精通》
学习平台为Windows平台
MySQL命令说明:
MySQL命令和SQL Server命令一样,都是不区分大小写的,这里统一采用了小写形式,更方便阅读
考虑到一篇文章太长了,分成了几篇文章来分别书写各部分内容,本部分内容为基础知识,为简单语句的使用
后半部分内容(存储过程、触发器、事务、索引、数据库备份、数据库安全性、数据库优化等)
点击跳转
三级模式指的是:模式、外模式、内模式
模式:(即空白表的结构,一个数据库只有一个模式)
数据的逻辑结构(数据项的名字、类型、取值范围等)
数据之间的联系
数据有关的安全性、完整性要求
外模式:(表建好了,拿去给应用程序用,添加了数据)
对于同一个模式下出来的表,不同外模式下,表会不一样,所以一个模式可以对应多个外模式
内模式:(一个数据库只有一个内模式)
是数据物理结构和存储方式的描述
是数据在数据库内部的表示方式,包括:
记录的存储方式(顺序、聚簇)
索引的组织方式( B+树、HASH索引)
数据是否压缩存储
数据是否加密
数据存储记录结构的规定—如定长/不定长、记录是否跨页存放等
二级映像
外模式/模式映像:
当模式改变时,DBA对外模式/模式映像作相应改变,使外模式保持不变;
应用程序是依据外模式编写的,应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性
模式/内模式映像:
当数据库的存储结构改变了,DBA修改模式/内模式 映像,使模式保持不变;
模式不变,则应用程序不变,保证了数据与程序的 物理独立性,简称数据的物理独立性
独立性:
物理独立性
指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的。当数据的物理存储改变了,应用程序不用改变
逻辑独立性
指用户的应用程序与数据库的逻辑结构是相互独立的。数据的逻辑结构改变了,用户程序也可以不变
安装 MySQL zip版本(即解压即可使用,不用安装程序),可以参考另一篇文章
https://blog.csdn.net/qq_59001784/article/details/124664127
安装MySQL,有很多版本,一般根据msi程序(即安装程序)直接下一步即可,再配置一下环境变量即可使用
下载链接:
链接:https://pan.baidu.com/s/1anTG-xLuGPkFxdqiZZVJyg
提取码:0925
安装教程在网上很多的,基本上按照下一步走即可
为了方便使用,一般都会再安装一个图形化界面,直接安装Navicat就行
下载链接:
链接:https://pan.baidu.com/s/1-VdbyZOu1Y8NEWbH7KveiQ
提取码:0925
环境变量的配置十分简单(比Java还简单,只需要加一下路径,即可在任意位置打开MySQL命令
在环境变量的path路径下加上文件目录即可
C:\software\mysql-5.6.24-winx64\bin //找到你们自己放的位置
找到和打开环境变量设置的地方非常的简单:在此电脑目录下(即可以看到C盘、D盘的那个页面),点击右键选择属性即可,找到高级系统设置
编辑,然后新建一个,直接将目录复制进去即可
然后一个个都确定,然后就可以发现mysql命令可以在任意目录下用了
如果设置了密码的话,则需要输入密码,没有设置密码的话,则不用输入
方法一:
直接使用:mysql -uroot -p(密码) //输入完按回车即可直接登录
方法二:
使用:mysql -uroot -p //输入完会弹出输入密码的一行,输入密码后可登录
注释:这个mysql -u root -p 是可以分开的,不用连在一起
如果是本机的话则 -h localhost 是默认的,不用输入,也可以选择IP进行输入
mysql -u root -h 127.0.0.1 -p
一般连接远程服务器则会使用IP进行连接
创建数据库:
create database if not exists test_db;
简洁形式:create database test_db;
查看数据库:
show databases like '%db%';
简洁形式:show databases;
删除数据库:
drop database if exists test_db;
简洁形式:drop database test_db;
查看系统支持的数据库引擎:
show engines;
查看数据库引擎
show variables like '%storage_engine%';
各数据库引擎之间的区别(主要看常用的InnoDB、MyISAM、MEMORY)
两种方式(相较来说第二种方式更为简洁)
直接在控制台未登录情况:(需要配置环境变量)(sql文件的位置会不同,可以自己修改,一般推荐不带中文,经测试,有中文也是没问题的)
注意:符合 "<" 不能写成 ">" ,不然会报错的,执行出错(自己的密码自己修改一下)
书写时,不能多空格,不能再句尾加分号
mysql -u root -p0925 < D:/test.sql //这样会显示说直接输入密码会被看到,安全性不高,所以可以采用下面这种方式
mysql -u root -p < D:/test.sql //输入完后按回车,会提示你要输入密码(当然如果有密码的话),这样安全性会高一些
已登录到MySQL内部
mysql -u root -p 登录之后,在MySQL的控制台下输入以下命令即可,这时是不需要输入密码的
source D:/test.sql;
test.sql文件内容如下
use test_db;
create table test_table(
id int auto_increment primary key
); -- 记住分号不能少,不然则会执行出错,MySQL是以分号作为语句结束的标识的,与SQL Server不同,没有分号,语句则无法执行
查看表结构:(以下三个语句功能基本一致,当然最后一句更为简洁)
show columns from test_table;
describe test_table;
desc test_table;
创建表格:(需要先使用(选择)数据库,后续操作才更为简便)
use test_db;
create table if not exists test_table (
id int auto_increment primary key
);
简洁形式:
create table test_table (
id int auto_increment primary key
);
增加表格字段及修改字段类型:(增加新字段 username 及修改 ID 字段数据类型,修改类型后,
就自动将原本的自增性质删除了,猜测是因为char类型不能够进行数值计算)
alter table test_table add username varchar(10) not null, modify ID char(10);
更改字段名称:(将字段 username 改为 newUserName )
alter table test_table change column username newUserName varchar(20) not null;
删除字段:(删除 newUserName 字段)
alter table test_table drop newUserName;
修改表格名称:(两种方式)
alter table test_table rename as table_one;
rename table table_one to table_bbyh;
复制表格:(由一个表格直接创建新的一个表格,结构与原表格一样)
create table table_bbeh like table_bbyh; //只能创建结构,数据不会复制过去
create table table_bbsh as select * from table_bbyh; //会同时将数据复制过去
删除表格:
drop table if exists table_bbeh;
简洁形式:drop table table_bbeh;
算术运算符:(括号内代表效果是一样的,书写形式不一样)
+
-
*
/(DIV):如果除数为 0 了,则计算结果为空值(NULL),写SQL语句的时候要注意
%(MOD)
比较运算符:(会在后续例子中用到一些运算符,MySQL里面的运算符使用和其他编程类语言很类似)
大多返回布尔值(符合则为1,不符合则为0)
=
>
<
>=
<=
!=(<>)
is null
is not null
between and
in
not in
like
not like
regexp //正则表达式的简单使用,与一般的JS正则表达式语法类似,可以看这篇文章
https://www.runoob.com/mysql/mysql-regexp.html
或者这篇:https://blog.csdn.net/qq_59001784/article/details/124664315
示例如下:(只演示了一些比较抽象的,其余常用的没有都演示)
注释:这里采用变量的方式进行演示,就没有采用 select 语句选择数据表中的内容了
(MySQL里面声明(定义)变量的方式还有通过declare的方式)
select 2+3;
select 1/2;
select 2/0;
select 20%6;
set @x = 8;
select @x between 2 and 10;
select @x in(1,2,3,4);
set @str = 'hello';
select @str regexp 'el';
set @str = 'hello el elo lo';
select @str regexp 'lo$';
select @str regexp '^hello';
select @str regexp 'o{1,2}';
逻辑运算符(与一般语言的逻辑运算符不同,因为有NULL值的存在)
运算规则如下:
&&(AND):所有数据不为0且不为空则返回1,存在0则返回0,不存在0存在NULL则返回NULL
||(OR):存在非0的数字则返回1,存在NULL则返回NULL,两个都为0则返回0
!(NOT):一元操作,原数据为非0数字则返回0,原数据为0则返回1,原数据为NULL则返回NULL
XOR:存在NULL则返回NULL,两个数都为0或都为非0的数则返回0,一个数为0,一个数为非0的数则返回1
示例如下:
-- &&运算
select 2 && 3;
select 0 && 3;
select 0 && NULL;
select NULL && 3;
select null && 3;
select NULL && NULL;
-- ||运算
select 4 || 3;
select 0 || 2;
select NULL || 2;
select NULL || NULL;
select NULL || 0;
select 0 || 0;
-- !运算
select !0;
select !2;
select !NULL;
-- XOR运算
select NULL XOR 3;
select NULL XOR NULL;
select NULL XOR 0;
select 1 XOR 3;
select 0 XOR 0;
select 1 XOR 0;
注意:函数和存储过程的参数需要用反引号 "`" 进行包裹,据说是MySQL的转义字符,不包裹则会报错
-- 函数的定义(创建)
CREATE DEFINER = CURRENT_USER FUNCTION TestFunc(`@x` integer)
RETURNS integer
BEGIN
#Routine body goes here... -- 这里面的内容为自己修改
CASE @x
WHEN 20 THEN
return 1;
WHEN 30 THEN
return 2;
ELSE
return 0;
END CASE;
END;
-- 存储过程的定义(创建)
create procedure TestPro(in `@x` INTEGER)
begin
#Routine body goes here... -- 这里面的内容为自己修改
CASE @x
WHEN 10 THEN
select 1 as result;
WHEN 20 THEN
select 2 as result;
ELSE
select 0 as result;
END CASE;
end
-- 函数的使用(需要注意的是要先对参数进行赋值,这里并不同别的语言一样是进行参数传值,
-- 和SQL Server也不一样,MySQL需要直接对参数进行赋值)
set @x = 2;
SELECT TestFunc(@x);
-- 函数的删除
drop function TestFunc;
-- 存储过程的使用
set @x = 1;
CALL TestPro(@x);
-- 存储过程的删除
drop PROCEDURE TestPro;
包括以下语句:(一般都用于函数和存储过程内)
if:介绍了三种使用形式,表达式、iFNULL、流程控制语句
case
while
loop
repeat
if语句的使用:(MySQL里面有三种使用方式)
表达式:
IF(expr1,expr2,expr3),类似三元表达式,expr1为判断条件,成立则返回expr2,不成立则返回expr3
ifnull:
IFNULL(expr1,expr2),此时expr1为判断条件,expr1不为空则返回expr1,expr1为空则返回expr2
作为流程控制语句:(只能用在函数或存储过程中,当然在触发器里面也是可以用的)(这个当然最为复杂)
示例如下:
set @x=10; -- 定义(赋值)一个变量
SELECT IF(@x%3=1,1,0) as result;
set @x=