MySQL数据库随笔
提示:本文章仅供个人学习使用,如有错误请及时私信通知
文章目录
- 前言
- 一、MySQL的基本操作命令
- (1)连接数据库
- (2)修改用户密码
- (3)刷新权限
- (4)查看所有数据库
- (5)查看数据库中所有的表
- (6)更改当前查看的数据库
- (7)显示数据库中所有表的信息
- 二、MySQL的注释
- (1)单行注释
- (2)多行注释
- 三、数据库的列类型
- (1)数值
- (2)字符串
- (3)日期时间
- (4)其他
- 四、数据库的字段属性
- (1)unsigned
- (2)autoincrease
- (3)zerofill
- (4)not null
- (5)default
- 五、数据库的常用命令
- (1)显示创建数据库的sql语句
- (2)显示创建表的sql语句
- (3)显示表的结构
- (4)设置数据表的字符编码
- (5)修改、删除表
- 1)修改表名
- 2)增加表的字段
- 3)修改表的字段
- 4)删除表
- 5)删除表的字段
- 六、数据表的类型
- 七、MySQL数据管理
- (1)插入数据
- (2)更新数据
- (3)删除数据
- 八、DQL查询数据
- (1)select查询
- (2)去重
- (3)数据库表达式
- 九、where子句和逻辑表达式
- (1)逻辑运算符
- (2)where语句的应用
- 十、模糊查询
- (1)like模糊查询
- (2)in模糊查询
- 十一、joinOn联表查询
- (1)左连接查询
- (2)右连接查询
- (3)内连接查询
- (4)三者的区别
- 十二、分页和排序
- (1)排序
- (2)分页
- 十三、子查询
- 十四、MySQL的常用函数
- (1)常用函数
- 1)数学函数
- 2)字符串函数
- 3)日期和时间函数
- (2)聚合函数
- 1)分组和过滤
- 十五、数据库级别的MD5加密
- (1)什么是MD5加密
- 十六、事务
- (1)事务执行的四个基本特性
- (2)脏读、幻读、不可重复读
- 十七、索引
- (1)索引的分类;
- 十八、插入一百万条数据
- 十九、数据库的三大范式
- (1)第一范式-1nf
- (2)第二范式-2nf
- (3)第三范式-3nf
- 总结
前言
MySQL数据库作为一种主流的数据库管理系统,在我们日常的编程生活中不可或缺。我们在没有接触到这个系统之前,总是苦于Java的原生链接数据库的烦恼,以及对数据库进行IDUS操作的繁杂性。而MySQL则为我们解决了这一苦恼。接下来我就要对MySQL进行深入的学习与了解,争取能在一段时间后能对各种数据的查询了如指掌。
一、MySQL的基本操作命令
(1)连接数据库
连接到数据库一般都是通过命令行的方式进行操作登录,相比可视化操作来说一般都是运用在Linux系统中
示例代码mysql -u root -p 123
(2)修改用户密码
在我们觉得之前所设置的密码过于复杂或难以记住的时候,我们就可以使用下面的代码来修改数据库的登录密码
示例代码update mysql.user set authentication_string=password('123') where user='root' and host='127.0.0.1';
(3)刷新权限
示例代码
flush privileges;
(4)查看所有数据库
通过该代码在命令行查看已在内存中的所有数据库
示例代码show databases;
(5)查看数据库中所有的表
在选择某数据库后我们可以使用指令来查看数据库中所有的表
示例代码show tables;
(6)更改当前查看的数据库
比如说我当前在1号数据库中,而我想要切换到2号数据库中
示例代码use database2
(7)显示数据库中所有表的信息
当我们使用了这个数据库后,我们根据任务的需要所以需要查看表中的所有数据,此时我们有两种方法来查看所有的数据,第一种是通过sql查询语句,第二种是通过命令语句,这两种方法都可以来查看表中的所有数据,依据个人喜好来使用就好。
示例代码(1)-sqlselect * from table_name
示例代码(2)-命令语句
describe table_name
二、MySQL的注释
(1)单行注释
示例代码--在这里插入sql代码
(2)多行注释
示例代码/*在这里插入sql代码
*在这里插入sql代码
*在这里插入sql代码
*/
三、数据库的列类型
(1)数值
1)tinyint 十分小的数据 1字节
2)smallint 比较校的数据 2字节
3)mediumint 中等大小的数据 3字节
4)int 正常大小的数据 4字节 常用类型
5)bigint 较大的数据 8字节
6)floa 浮点类型(单精度) 4字节
7)double 浮点类型(双精度)8字节
8)decimal 字符串型的浮点数
(2)字符串
1)char 不可变长度 ,长度固定 0-255
2)varchar 可变长度 0-65535 常用string
3)tinychar 微型文本 2^8-1
(3)日期时间
1)data YYYY-MM-DD
2)time HH:mm:ss
3)datatime YYYY-MM-DD HH:mm:ss 最常用的时间格式
4)timestamp 时间戳
5)year
(4)其他
1)null 一般为数据库的表种没有内容的时候填写的类型
四、数据库的字段属性
(1)unsigned
无符号整数,标明改列不能为负数
(2)autoincrease
自动增加1或用户设置的增长梯度,适用于唯一主键
(3)zerofill
0填充,当需要填充数据的时候使用这个就能将要填充的地方填上0
(4)not null
不为空,表明该列的数据不能为空
(5)default
默认值,表明该列的默认值一旦不更改就是根据设置的默认值显示
五、数据库的常用命令
(1)显示创建数据库的sql语句
示例代码
show create database `database_name`
(2)显示创建表的sql语句
示例代码
show create table `table_name`
(3)显示表的结构
示例代码
desc table_name
(4)设置数据表的字符编码
示例代码
charset=utf8
(5)修改、删除表
1)修改表名
示例代码
alter table table_name rename as new_table_name;
2)增加表的字段
示例代码
alter table table_name add need_name TYPE();
3)修改表的字段
示例代码
alter table table_name modify need_name TYPE();--修改约束,不能修改字段名字alter table table_name change need_name change_name TYPE();--修改字段名
4)删除表
示例代码
drop table table_name
5)删除表的字段
示例代码
alter table able_name drop need_name
注意事项:可以在删除表的前面添加一个if exists
六、数据表的类型
| myisam | innodb | |
|---|---|---|
| 事务支持 | 不支持 | 支持 |
| 数据行锁定 | 不支持 | 支持 |
| 外键约束 | 不支持 | 支持 |
| 全文引索 | 支持 | 不支持 |
| 表空间大小 | 较小 | 较大 |
七、MySQL数据管理
(1)插入数据
往表中插入一条或多条数据
示例代码insert into table_name(value1,value2,...,valuen) value(a,b,...,n)--插入一行数据insert into table_name(value1,value2,...,valuen) value(a,b,...,n),...,(a,b,...,n)--插入多行数据
(2)更新数据
更新表种的数据
示例代码--更新一个值
update table_name set colnum_name=value where condition=...[条件]
--更新多个值
update table_name set colnum1_name=value1,...,colnumn_name=valuen
where condition=...[条件]
| 操作符 | 含义 | 范围 | 结果 |
|---|---|---|---|
| = | 等于 | 5=6 | false |
| <>或!= | 不等于 | 5!=6或5<>6 | true |
| > | 大于 | 5>6 | false |
| < | 小于 | 5<6 | true |
| <= | 小于等于 | 5<=5 | true |
| >= | 大于等于 | 5>=5 | true |
| between and | 处于一个范围内 | ||
| and | |||
| or |
(3)删除数据
示例代码
#第一种删除方式
delete from table_name where [条件]
#第二种删除方式(清空表)
truncate table_name
两种方式的区别
相同点:都能删除数据,且都会保留表结构
不同点:truncate能让自增列的计数器归零且不会影响事务
八、DQL查询数据
(1)select查询
该语句是所有查询语句的开始,不论是简单查询还说复杂查询
示例代码#简单查询
select * from table_name where [条件]
#复杂查询
select value_name,value_name from table_a a left join table_b b where [条件]
(2)去重
当我们查询一个数据的时候难免会有重复的数据,而此时我们可以使用以下代码来进行去重
示例代码select *from table_name #查询表中的全部数据
select * from table_name where [条件] #根据某条件来进行查询
select [值] from table_name where [条件] #根据某条件来进行查询报表中的某值
#但是前面的三种都会出现重复的数据,而下面的这一种则会去重
select distinct [值] from table_name where [条件]
(3)数据库表达式
有时候在数据库里面不一定全都是sql类型的语句也有使用函数,表达式,变量的形式展示出来。就入下面的代码所示
示例代码#查看系统版本
select version();
#使用select语句来进行计算
select 123*56-12 as 计算结果
#使用select来查询变量
select @@auto_increment_increment #查询自增的步长
#当我们需要将数据库中的某一行的数据全部加1或者其他数值
select [值]+1 from table_name where [条件];
九、where子句和逻辑表达式
(1)逻辑运算符
| 运算符 | 语法 | 描述 |
|---|---|---|
| && and | a and, b a&&b | 逻辑与 两个都为真 结果为真 |
| 11 or | a or b, a11b | 逻辑或 其中一个为真 结果为真 |
| !not | not a, !a | 逻辑非 真为假、假为真 |
(2)where语句的应用
使用where语句来增加查询条件,这样查询出来的结果就会有个初步的筛选。
示例代码#逻辑与条件查询
select [值] from table_name
where [条件A] =[条件值] and [条件A]=[条件值]
或者
where [条件A] between [条件值1] and [条件值2]
#逻辑或查询
select [值] from table_name
where [条件A] =[条件值] or [条件A]=[条件值]
或者
where [条件A] between [条件值1] or [条件值2]
#逻辑非查询
select [值] from table_name
where [条件]!=[条件值]
十、模糊查询
| 运算符 | 语法 | 描述 |
|---|---|---|
| is null | a is null | 如果操作符为空则结果为真 |
| is not null | a is not null | 如果操作符不为空则结果为真 |
| between | a between a and c | 若a在b和c之间则结果为真 |
| like | a like b | SQL匹配如果a匹配到b则结果为真 |
| in | a in (a1,a2…an) | 如果a在a1~a2这个集合中,则结果为真 |
(1)like模糊查询
示例代码
##有一个学生表,其中的属性有学生id,学生名字
#比如说需求要求查找名字以孙开头的所有名字
select student_name from student_table where student_name like '孙%'
#上面的这种方法可以查询孙以后0~n个字符的名字
#但是如果需要只查询孙字后面只带一个字的就不能使用%而是使用_
select student_name from student_table where student_name like '孙_'
#当然如果要指定只有两个字的那么就以此类推,需要指定几个就用几个_
#而需要查询比如书名或者什么作品名只知道中间名的时候,那么只需要将_或者%的位置放到关键字的前面或者后面即可
select gName from galgame where gName like '%千恋万花%'
(2)in模糊查询
示例代码
#当我们所需要查询的值是在某一个范围的时候我们就可以使用in关键字来进行模糊查询
select student_id from studen_table where student_id in(101,102,103)
十一、joinOn联表查询
(1)左连接查询
示例代码
SELECT a.*,b.role_name FROM sch_colleges_process_config a LEFT JOIN sch_colleges_process_audit_config b ON a.`sch_config_id`=b.`sch_config_id` WHERE school_id=#{school_id}
(2)右连接查询
示例代码
SELECT a.*,b.role_name FROM sch_colleges_process_config a RIGHT JOIN sch_colleges_process_audit_config b ON a.`sch_config_id`=b.`sch_config_id` WHERE school_id=#{school_id}
(3)内连接查询
示例代码
SELECT process_name,audit_level,`role_name` FROM sch_colleges_process_config a
INNER JOIN sch_colleges_process_audit_config b ON a.`sch_config_id`=b.`sch_config_id``sch_colleges_process_config``sch_colleges_process_config`
(4)三者的区别
示例代码
| 查询语句 | 描述 |
|---|---|
| 内连接查询 | 只有当两张表都有同一个数据的时候,才会查询出结果 |
| 左连接查询 | 比对判断条件如果条件不成立,则任然会显示出左表的数据 |
| 右连接查询 | 比对判断条件如果条件不成立,则任然会显示出右表的数据 |
十二、分页和排序
(1)排序
关键字:order by 。升序关键字:ASC ,降序关键字:DESC
示例代码#通过升序排序将数据查询出来
select * from students
where student_score >60
order by student_score ASC#通过降序排序将数据查询出来和升序一样只不过是将ASC换成DESC
select * from students
where student_score >20
order by student_score DESC
(2)分页
语法:limit 起始值 页面大小
分页分n页的规律 limit (n-1)*页面大小
示例代码SELECT a.*,b.role_name FROM sch_colleges_process_config a
LEFT JOIN sch_colleges_process_audit_config b
ON a.`sch_config_id`=b.`sch_config_id` AND school_id=1
LIMIT 1,2
#从第一页开始,每页两条数据
十三、子查询
查询分数大于80分的学生学号和姓名,并且查出高等数学的编号
示例代码
十四、MySQL的常用函数
(1)常用函数
1)数学函数
示例代码
#绝对值
select abs();
#向下取整
select FLOOR();
#向上取整
selec CEILING();
2)字符串函数
示例代码
#查询字符串的长度
select LENGTH()
#替换字符串函数
SELECT INSERT('Football',2,4,'Play') AS col1
#转换成大写
select UPPER()
#转换成小写
select lower()
3)日期和时间函数
示例代码
#获取系统当前日期
select CURRENT_DATE()
#获取系统当前时间
select CURRENT_TIME()
#获取本地时间
select LOCALTIME()
#获取当前时间
select NOW()
(2)聚合函数
| 函数名 | 描述 | 使用方法 |
|---|---|---|
| count | 计数 | select count(列名)、select count(*)、select count(1) |
| sum | 求和 | select student_name,sum(student_score) as ‘总成绩’ from student |
| max | 最大值 | |
| min | 最小值 | |
| avg | 平均值 |
三种count的区别
1、指定列名,但是在计数时忽略掉列中的null值
2、计数所有的行数,不会忽略掉null值
3、计数所有的行数,不会忽略掉null值,和上一种*方法几乎没有区别
1)分组和过滤
示例代码图

十五、数据库级别的MD5加密
(1)什么是MD5加密
MD5是一种被广泛使用的密码散列函数,可以产生一个128位的散列值,用于保存信息的完整性。且一旦加密,整个过程就不可逆转。
## (2)测试MD5加密
上图为创建测试数据库的代码,以下面sql语句进行MD5加密测试
示例代码#插入数据
insert into testmd5 values(1,'张三','2113'),(2,'李四','2121'),(1,'王五','2411')
#对已插入的数据中的密码进行MD5加密
update testmd5 set pwd =MD5(pwd)
#对未插入的数据中的密码进行MD5加密
insert into testmd5 values(4,'嘉庆',MD5('2116'))
#和前端传入的用户名和密码在后台进行比对
select name,pwd from testmd5 where name=${name} and pwd = MD5(${pwd})
十六、事务
(1)事务执行的四个基本特性
1)原子性:要么都完成,要么一个也不完成
2)一致性:不论经过何种的操作,总量与操作之前的总量是一样的,是相同的,是不会改变的。
3)隔离性:多个用户之间同时操作并不会影响各个的操作。
4)持久性:若事务没有提交,则恢复到原状。若事务已提交,则保持不变。
(2)脏读、幻读、不可重复读
1)脏读:指读取到了一个未提交的数据
2)幻读:指一个事务在读取的时候,突然发现读取到的行数不正确
3)不可重复读:在一个事务内多次读取到的事务不相同
十七、索引
(1)索引的分类;
1)主键索引:primary key
2)唯一索引:unique key
3)常规索引:key/index
4) 全文索引:fulltext
十八、插入一百万条数据
通常我们会遇到让我们往数据库里面插入很多数据的时候,这时候我们就可以执行下面的代码
示例代码

十九、数据库的三大范式
(1)第一范式-1nf
原子性;保证每一列不可再分
(2)第二范式-2nf
满足第一范式,且一张表只描述一件事情
(3)第三范式-3nf
满足第一第二范式,且每一列要与主键直接相关,不能间接相关。如果出现间接相关则直接拆分。
总结
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
