MySQL学习笔记
数据库(MySQL)
-
分类
- 关系型数据库(SQL)
- MYSQL,Oracle,Sql Server,DB2,SQLlite
- 非关系型数据库(NOSQL)
- Redis,MongDB
- DBMS(数据库管理系统)
- 数据库管理的软件,科学有效的管理和操作数据
- MYSQL
- 关系型数据库管理系统(RDBMS)
- 开源
- 体积小、速度快、总体成本低
- 关系型数据库(SQL)
-
解压缩安装
-
解压到系统环境资源路径下
-
配置环境变量
-
新建MySQL配置文件ini
[mysqld] #目录更改为自己的 basedir=D:\environment\mysql-2.7.19\ datadir=D:\environment\mysql-2.7.19\data\ prot=3306 #skip-grant-tables -
启动管理员模式下的cmd命令行
-
切换到MySQL的bin目录下
-
执行 mysqld-install
-
执行 mysqld --ini tialize-insecure --user=mysql
-
执行 net start mysql
-
执行 mysql -u root -p
-
执行空密码
-
执行 update mysql user set authentication_string=password('root') where user='root' and Host = 'localhost';
-
执行 flush privileges;
-
注释ini文件最后一行的无密码进入
-
-
-
注释--、#、/**/
-
myisam 支持非聚集索引 innodb 支持聚集索引
-
curd
- insert into 表名 (列1,列2,。。。)values(值1,值2,。。。)
- delete from 表名 where 列名=值
- truncate table 表名(自增会归零 ,不会影响事务)
- update 表名 set 列1=值,列2=值 where 列3=值
- select * from 表名
- select 列1,列2 from 表名
-
别名 as
- select 列1,列2 AS 别名1,别名2 from 表名
-
去重 distinct
- select distinct 列 from 表
-
where 条件 子句
- select * from 表 where 列=值 AND where 列=值
-
模糊查询
- select * from 表 where 列 like '刘_'
- select * from 表 where 列 like '%文%'
- select * from 表 where 列 in(值1,值2.。。。)
- select * from 表 where address is null
- select * from 表 where address is not null
-
连表查询
-
select 列1,列2 from 表1 AS 1 inner join 表2 AS 2 where 1.列1=2.列1
--inner join select s.studentNo,studentName,studentResult from student AS s INNER JOIN result AS r WHERE s.studentNo=r.studentNo --right join select s.studentNo,studentName,studentResult from student s RIGHT JOIN result r ON s.studentNo=r.studentNo --left join select s.studentNo,studentName,studentResult from student s LEFT JOIN result r ON s.studentNo=r.studentNo --三表查询,,查询多张表,先查询两张表,在一个表一个表的增加 select studentNo,studentName,SubjectName,studentResult from student s right join result r on r.studentNo = s.studentNo inner join `subject` sub on r.SubjectNo = sub.SubjectNo- inner join--如果表中有一个匹配,就返回行
- left join--会从左表中返回所有的值,即使右表中没有匹配
- right join--会从右表中返回所有的值,即使左表中没有匹配
-
-
自连接
- 自己的表和自己的表连接,核心:一张表拆分为两张一样的即可
-
排序
- ORDER BY Student Result ASC(升序)
- ORDER BY Student Result DESC(降序)
- HAVING(过滤,不能用where)
-
分页
- 缓解数据库压力,给人的体验更好, 现在:瀑布流
- 语法:limit 起始值,页面大小
- 网页:当前页,总页数,页面大小
- limit(n-1)*pageSize,pageSize
-
嵌套查询(由里及外)
-
MySQL常用函数
-
聚合函数
select ABS(-8) --绝对值 select CELLING(9.4) --向上取整 SELECT FLOOR(9.4) --向下取整 SELECT RAND() --返回一个0~1之间的随机数 SELECT COUNT(*) FROM `student`; SELECT COUNT(1) FROM `student`; SELECT COUNT(`studentNo`) FROM `student`; SELECT AVG(``)--平均分 SELECT MAX(``)--最大值 SELECT MIN(``)--最小值 -
字符串函数
SELECT CHAR_LENGTH('即使再小的帆也能远航')--返回字符串的长度 -
时间和日期函数
SELECT CURRENT_DATE()--获取当前的日期 SELECT CURDATE()--获取当前日期 SELECT NOW()--获取当前时间 SELECT LOCALTIME()--获取本地时间 SELECT SYSDATE()--获取系统时间 SELECT YEAR(NEW())--获取当前年份 SELECT MONTH(NEW())--获取当前月份 SELECT DAY(NEW())--获取当前天数日期 SELECT HOUR(NEW())--获取当前小时 SELECT MINUTE(NEW())--获取当前分钟 SELECT SECOND(NEW())--获取当前秒数
-
-
MD5加密
- update 表 SET 列1=MD5(列1) WHERE id=1
-
事务(ACID原则)
- 转账
- 要么都成功,要么都失败
- (ACID)原子性,一致性,隔离性,持久性
-
索引--帮助MySQL高效获取数据的数据结构。
- 主键索引
- 唯一的标识,主键不可重复,只能有一个列作为主键
- 唯一索引
- 避免重复的列出现,唯一索引可以重复,多个列都可以标识 唯一索引
- 常规索引
- 默认的,index/key关键字设置
- 全文索引
- 特定的数据库(MYISAM)下才有
- 快速定位数据
- 主键索引
-
用户管理
CREATE USER lix IDENTIFIED BY '123456'--创建用户 SET PASSWORD = PASSWORD('12345')--修改密码 RENAME USER lix TO ll--重命名 GRANT ALL PRIVILEGES ON *.* TO lix--授权 REVOKE ALL PRIVILEGES ON *.* FROM lix--撤销权限 -
备份
-
规范数据库设计(节省内存空间、保证数据的完整性、方便我们开发系统)
- 分析需求
- 设计E-R图
- 三大范式
- 第一范式:原子性:保证每一列不可再分
- 第二范式:前提:满足第一范式。每张表只描述一件事情
- 第三范式:满足第二范式的前提下。每一列数据都要和主键直接相关,而不能间接相关。
- 关联查询的表最多不能超过三张表
-
JDBC
- SQL注入
- sql语句漏洞被攻击,导致数据泄露
- SQL注入
本文来自博客园,作者:六爻呈乾,转载请注明原文链接:https://www.cnblogs.com/ilycq/p/15219034.html

浙公网安备 33010602011771号