MySQL 学习笔记

1 定义

数据库中的表:一行叫一条记录。每一列叫一个属性,或一个字段。

主键:表中的某个特殊字段,具有唯一的确定的值,可以根据该字段唯一的确定一条记录

外键:表中的某个字段的值为另一张表(也可以是自身)中的某个字段的值。

2 MySQL 的数据类型

2.1 数值

TINYINT 小整型

INT/INTEGER 整型

BIGINT 长整型

FLOAT 小数

DOUBLIE 双精度小数

2.2 日期

DATE YYYY-MM-DD

TIME HH:MM:SS

YEAT YYYY

DATETIME 混合

TIMESTAMP 高精度

2.3 字符串

CHAR 定长字符串

VARCHAR 不定长

BLOB 二进制文件

LONGBLOB 长二进制文件

TEXT 长文本数据

LONGTEXT 长文本数据

注:以上仅总结了常用类型,并不是所有类型

3 SQL语句

3.1 数据库的创建

1CREATE DATABASE 数据库名 [参数]复制代码

例如创建一个名为test的数据库,设置字符集为utf-8

1CREATE DATABASE test CHARACTER SET utf8;复制代码

出现下面的内容即说明创建成功。

1Query OK, 0 rows affected (0.00 sec)复制代码

你可以使用下面的语句查看新创建的数据库

1SHOW DATABASES;复制代码

选择需要操作的数据库

1USE test;复制代码

执行完上面的语句后出现Database changed,

你所有的操作都将在test数据库中进行。

3.2 创建表

1CREATE TABLE 表名 (

2    列名 列数据属性 [约束],

3    列名 列数据属性,

4    ... ...

5);复制代码

例如创建一个users表id是主键,自增长。

PRIMARY KEY:约束 主键约束

AUTO_INCREMENT:约束 自增长

1CREATE TABLE users(

2id INTEGER PRIMARY KEY AUTO_INCREMENT,

3account VARCHAR(50),

4pwd VARCHAR(50),

5);复制代码

3.3 插入数据

1INSERT INTO 表名 VALUES (值1, 值2,...,NULL,...);复制代码

这种插入方式一定要将所有的值都写上,如果为空的话写NULL。值与列要一一对应

主键如果设置为自增的话写NULL

也可以指定所要插入数据的列,向下面这样。

1INSERT INTO 表名 (列1, 列2,...) VALUES (值1, 值2,....);复制代码

按回车后出现

1Query Ok, 1 row affected (0.05 sec) 复制代码

说明成功。否则请检查SQL语句。

例如向刚刚创建的users表中插入一条数据

1INSERT INTO users VALUES(NULL,'admin','admin');复制代码

第一列是id,主键自增,不需要插入。

3.4 查询数据

1SELECT * FROM 表名 [WHERE 条件]  [参数];复制代码

例如查询users表里的所有数据的 account 列。

1SELECT account FROM users;复制代码

3.4.1 WHERE 查询

可以给FROM后面的表起一个别名。例如:

1SELECT tn.id,tn.account FROM tablename AS tn

2WHERE tn.id = 1;复制代码

3.4.2 WHERE 后的条件语句

1WHERE后面可以写多种条件语句。

21. 关系语句: =,>,=,<=

32. 逻辑语句: AND,OR,NOT

43. IS NULL: 是否为空

54. BETWEEN:在两者之间

6    WHERE u.id BETWEEN 11 AND 15;

7    id 在11-15之间。

85. IN:在..之中

9    WHERE u.account IN (值1,值2,...);

10    查询 account 在(值1,值2,...)之中的数据

115. LIKE:模糊匹配

12    WHERE  u.id LIKE '通配符';

13

14    通配符

15    '%':替代零个或多个字符

16    '_':替代一个字符

17        WHERE u.account LIKE '%A%';查询account字段中含有'A'的数据。

18

19     [charlist]:字符列中的任何单一字符

20        WHERE u.account LIKE '[ASD]%'; 查询以A S D 开头的数据。

21    [!charlist]:不在字符列中的任何单一字符

22        WHERE u.account LIKE '[!ASD]%'; 查询不以A S D 开头的数据 复制代码

3.4.3 聚合函数

1SELECT AVG(列名) FROM 表名复制代码

11. AVG(列名):返回某一列的平均值

22. COUNT(列名):返回匹配指定条件的行数

33. FIRST(列名):返回指定的字段中第一个记录的值。

44. LAST(列名):返回指定的字段中最后一个记录的值。

55. MAX(列名):返回一列中的最大值。NULL 值不包括在计算中。

66. MIN(列名):返回一列中的最小值。NULL 值不包括在计算中。

77. SUM(列名):返回数值列的总数(总额)。

88. UCASE(列名):把字段的值转换为大写。

99. LCASE(列名):把字段的值转换为小写。 复制代码

110. MID(列名,开始位置,截取长度):用于从文本字段中提取字符。

2SELECT MID(account,1,3) as uname FROM users;复制代码

111. LEN(列名):返回文本字段中值的长度。

212. ROUND(列名,小数位数):用于把数值字段舍入为指定的小数位数。

313. CURDATE():返回当前日期。YYYY-MM-DD。

414. CURTIME():返回当前时间。HH:MM:SS。

515. NOW():返回当前时间。YYYY-MM-DD HH:MM:SS。

616. YEAR(d),MONTH(d),DAY(d):分别返回参数的年,月,日。

717. ADDDATE(d,n):在d的时间上加n天。

818. SUBDATE(d,n):在d的时间上减n天。复制代码

119. DATE_FORMAT(d,f):格式化时间d。

2%a 缩写星期名

3%b 缩写月名

4%c 月,数值

5%D 带有英文前缀的月中的天

6%d 月的天,数值(00-31)

7%e 月的天,数值(0-31)

8%f 微秒

9%H 小时 (00-23)

10%h 小时 (01-12)

11%I(大写的i) 小时 (01-12)

12%i 分钟,数值(00-59)

13%j 年的天 (001-366)

14%k 小时 (0-23)

15%l(小写的L) 小时 (1-12)

16%M 月名

17%m 月,数值(00-12)

18%p AM 或 PM

19%r 时间,12-小时(hh:mm:ss AM 或 PM)

20%S 秒(00-59)

21%s 秒(00-59)

22%T 时间, 24-小时 (hh:mm:ss)

23%U 周 (00-53) 星期日是一周的第一天

24%u 周 (00-53) 星期一是一周的第一天

25%V 周 (01-53) 星期日是一周的第一天,与 %X 使用

26%v 周 (01-53) 星期一是一周的第一天,与 %x 使用

27%W 星期名

28%w 周的天 (0=星期日, 6=星期六)

29%X 年,其中的星期日是周的第一天,4 位,与 %V 使用

30%x 年,其中的星期一是周的第一天,4 位,与 %v 使用

31%Y 年,4 位

32%y 年,2 位复制代码

3.4.4 分组查询

GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。

1SELECT 列名, 聚合函数

2FROM 表名

3WHERE 条件

4GROUP BY 列名复制代码

例如根据用户表中的role属性分组统计每组的人数

1SELECT role, COUNT(id)

2FROM users

3GROUP BY role;复制代码

3.4.5 分组过滤

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

例如根据用户表中的role属性分组统计每组的人数,查找人数大于10的role

1SELECT role, COUNT(id)

2FROM users

3GROUP BY role

4HAVING COUNT(id)>10;复制代码

3.4.6 结果排序

ORDER BY 语句用于根据指定的列对结果集进行排序。

默认为升序,降序使用关键字DESC。

例如根据用户表中的role属性分组统计每组的人数,按照人数降序排列

1SELECT role, COUNT(id) count

2FROM users

3GROUP BY role

4ORDER BY count DESC;复制代码

3.5 更新数据

1UPDATE 表名 SET 列名 = 新值 WHERE 条件复制代码

WHERE的修改条件是可选的,不写的话修改表的所有数据

例如修改users表里的数据,将admin用户的密码改为root

1UPDATE users SET pwd = 'root' WHERE account = 'admin';复制代码

3.6 删除数据

1DELETE FROM 表名 WHERE 条件复制代码

WHERE的修改条件是可选的,不写的话删除表的所有数据

4 表属性的修改

4.1 表重命名

1ALTER TABLE 表名 RENAME 新表名;复制代码

4.2 添加新的一列

1ALTER TABLE 表名 ADD 列名 列数据类型 [AFTER 插入位置]复制代码

例如在users表的pwd字段后面添加一个role字段类型是INTEGER

1ALTER TABLE users ADD role INTEGER AFTER pwd;复制代码

4.3 修改列

1ALTER TABLE 表名 CHANGE 列名称 新列名称 新数据类型;复制代码

例如修改users表里的pwd字段改为password,类型是varchar(20)

1ALTER TABLE users CHANGE pwd password varchar(20);复制代码

5 完整性约束

1约束:对表中的列添加的一些限制条件。只有满足这些条件时才能数据才能插入。复制代码

5.1 实体完整性

1主键不能为空复制代码

5.2 参照完整性

1外键的值必须是某张表中存在的值,可以为空复制代码

5.3 用户自定义完整性

1唯一性约束,某一列虽然不为主键,但是依然不能重复。复制代码

5.4 添加约束

1ALTER TABLE 表名

2    ADD CONSTRAINT 约束名 约束类型(列名);复制代码

例如,给users表的role列添加外键约束,引用自roles表的id列

1ALTER TABLE users

2    ADD CONSTRAINT uq_phone FOREIGN KEY (`role`)

3    REFERENCES `roles` (`id`);复制代码

5.5 常见约束类型

11. PRIMARY KEY: 主键

22. CHECK:限制列中的值的范围。MySQL好像不支持

33. UNIQUE:唯一性约束

44. NOT NULL:非空约束

55. FOREIGN KEY:外键约束复制代码

6 范式

函数依赖:如果A依赖B,那么当确定A值后,B值也就确定了。

例如,在一张表中由于主键是唯一确定且不重复的。所以,当主键的值确定了,那么其他列的值也就确定了。我们便说,其他列都依赖主键。

完全函数依赖:如果B函数依赖于A,并且对于A的任何一个真子集A1,都有 B不依赖与A1,称A对B完全函数依赖。

部分函数依赖:如果B函数依赖于A,但是B不完全函数依赖于A,称B对A部分函数依赖。

例如,在一张表中,有两列,一列是用户名,而另一列里某些行里记录的是用户的id,而某些行里在这一列里记录的是用户所在部门的id,那么用户名列便部分函数依赖于id列,因为存在某些行依赖于id列的子集(记录是部门id的行)。

传递函数依赖:如果A函数依赖于B,B函数依赖于C,则称A传递函数依赖于C。

6.1 1NF(第一范式)

确保列不可分,即每一列只描述一个属性,即达到1NF

6.2 2NF(第二范式)

在1NF的基础上消除部分函数依赖即达到2NF。即每一个非主属性(非主键列)完全函数依赖于主键。

例如,可以将上面部分函数依赖的例子中的表,改成两张表,一张用户表,一张部门表,所有的用户名列都完全依赖于主键。便达到2NF。

6.3 3NF(第三范式)

在2NF的基础上消除传递函数依赖便达到3NF。即每一个非主属性(非主键列)即不部分依赖于主键,也不传递依赖于主键。

学习笔记 mysql_MySQL 学习笔记相关推荐

  1. 高效学习方法论的学习笔记

    Author:鲁力(地山) 0.前言与致谢 如何提高学习效率?这一问题长期以来都是网上讨论的热点话题,就这一问题网上很多大咖以书籍.博客.知乎回答.视频等不同形式都发表过自己的观点见解和方法论.笔者在 ...

  2. Yann Lecun纽约大学《深度学习》2020课程笔记中文版,干货满满!

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]Yann Lecun在纽约大学开设的2020春季<深度学习>课 ...

  3. 【干货】机器学习经典书PRML 最新 Python 3 代码实现,附最全 PRML 笔记视频学习资料...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 将 Bishop 大神的 PRML 称为机器学习圣经一点也不为过,该书系统地介绍了 ...

  4. 系列笔记 | 深度学习连载(6):卷积神经网络基础

    点击上方"AI有道",选择"星标"公众号 重磅干货,第一时间送达 卷积神经网络其实早在80年代,就被神经网络泰斗Lecun 提出[LeNet-5, LeCun ...

  5. 系列笔记 | 深度学习连载(5):优化技巧(下)

    点击上方"AI有道",选择"星标"公众号 重磅干货,第一时间送达 深度学习中我们总结出 5 大技巧: 本节继续从第三个开始讲起. 3. Early stoppi ...

  6. 系列笔记 | 深度学习连载(4):优化技巧(上)

    点击上方"AI有道",选择"星标"公众号 重磅干货,第一时间送达 深度学习中我们总结出 5 大技巧: 1. Adaptive Learning Rate 我们先 ...

  7. 系列笔记 | 深度学习连载(2):梯度下降

    点击上方"AI有道",选择"星标"公众号 重磅干货,第一时间送达 我们回忆深度学习"三板斧": 1. 选择神经网络 2. 定义神经网络的好坏 ...

  8. React学习:入门实例-学习笔记

    文章目录 React学习:入门实例-学习笔记 React的核心 需要引入三个库 什么是JSX react渲染三步骤 React学习:入门实例-学习笔记 React的核心 1.组件化:把整一个网页的拆分 ...

  9. cocos2d学习笔记2——学习资源

    1. 视频 找了好几个视频,有一些讲得好的文件资源没有,后来终于找到一个讲得不错还有文件资源的,还有高清下载地址,虽然是2.2版本的,但是确实能学到不少东西,对用cocos2d做游戏有了基本的印象,对 ...

最新文章

  1. mysql使用大内存页面,设置MySQL使用大内存页面
  2. 你不得不看的六篇知识图谱落地好文
  3. keil_rtx特点
  4. 中判断字符串是否为空_leetcode1704_go_判断字符串的两半是否相似
  5. python 删除文件、目录_python脚本删除文件及删除文件目录的方法
  6. 59.排序好的大数据创建索引文件,并实现大文件的二分查找,根据索引百万数据秒读数据...
  7. 世界五百强面试题目及应答评点
  8. git 安装_Windows系统Git安装教程(详解Git安装过程)
  9. Cloudflare泄露客户数据,IT部门可从中吸取什么教训?
  10. 【krpano】多分类缩略图及多分类地图案例
  11. 减少工作时间更有利于百姓
  12. 【html教程】非常全的主页设置代码,HTML代码教程
  13. Spring Boot四大神器之Auto Configuration
  14. 计算机视觉 深度学习 slam 三维重建 机器学习学习资料整理
  15. jq 清空、删除、添加、替换数组的简单用法
  16. 利用电脑投放手机声音且可不冲突同时播放电脑声音的方法
  17. xxljob 配置文件_XXL-JOB的基本用法
  18. 在移动设备上实时执行的DNN权重修剪中缺失但令人满意的稀疏性
  19. deepin 命令行卸载软件
  20. 跨平台移动应用开发引擎CrossApp推出正式版V0.3.0

热门文章

  1. IT运维管理员如何写好一份年终总结?
  2. N900 Dual boot(meego maemo)
  3. 毒王肆虐 U盘寄生虫再出变种
  4. Nginx Http认证 实现访问网站或目录密码认证保护
  5. Linux futex 快速同步互斥机制简介
  6. docker 容器中的 uid 和 gid
  7. python3 字符串前面加上'r'的作用
  8. python3 eval安全替代函数ast.literal_eval
  9. Android开发--多媒体应用开发(一)--MediaPlayer的使用介绍
  10. 编程之美2.5 寻找最大的K个数