MySQL知识篇-SQL1
1 SQL是什么?
答:是结构话语言,是一种操作关系型数据库的语言。
2 SQL语言分类?
SQL语言 | 说明 | 举例 |
DDL | 数据定义语言 | create drop |
DML | 数据操作语言 | insert update delete |
DQL | 数据查询语言 | select |
DCL | 数据管理语言 | grant revoke |
TPL | 事务处理语言 | begin transaction commit rollback |
CCL | 指针控制语言 | declear cursor |
3 数据类型?
整数:int,bit
小数:decimal
字符串:varchar,char
日期时间: date, time, datetime
枚举类型(enum)
说明:
decimal表示浮点数,如decimal(5,2)表示共存5位数,小数占2位
char表示固定长度的字符串,如char(3),如果填充ab时会补一个空格
varchar表示可变长度的字符串,如varchar(3),填充ab时就会存储ab
字符串text表示存储大文本,当字符大于4000时推荐使用
- 对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径
4 数值类型对应的字节大小?
数值类型 | 类型 | 字节大小 |
TINYINT | 1 | -128 ~ 127 |
SMALLINT | 2 | -32768 ~ 32767 |
MEDIUMINT | 3 | -8388608 ~ 8388607 |
INT | 4 | |
BIGINT | 8 |
5 字符串对应的字节大小?
字符串 | 类型 | 字节大小 |
CHAR | 0-255 | 类型:char(3) 输入 'ab', 实际存储为'ab ', 输入'abcd' 实际存储为 'abc' |
VARCHAR | 0-255 | 类型:varchar(3) 输 'ab',实际存储为'ab', 输入'abcd',实际存储为'abc' |
TEXT | 0-65535 | 文本 |
6 日期时间对应字节大小?
类型 | 字节大小 | 例子 |
DATE | 4 | ‘2020-01-01’ |
TIME | 3 | ‘12:00:00’ |
DATETIME | 8 | '2020-01-01 12:00:00' |
YEAR | 1 | '2019' |
TIMESTAMP |
4 |
'1970-01-01 00:00:01' UTC ~ '2038-01-01 00:00:01' UTC |
7 约束?
- 主键primary key:物理上存储的顺序
- 非空not null:此字段不允许填写空值
- 惟一unique:此字段的值不允许重复
- 默认default:当不填写此值时会使用默认值,如果填写时以填写为准
- 外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常
(1)primary key
假如有一张学生信息表,里面记录了学生的学号 ,姓名,成绩等,那么,会不会有两个学号相同的学生,答案肯定是否定的,如果有的话也只能是插入信息的时候犯下的错误,那么我们如何去避免这种错误呢,这时候,primary key就发挥作用了。
下面我们创建一个stu_inform表:
create table stu_inform(
id int,
name varchar(20),
grade double,
primary key(id),
);
(2) 联合主键
这样的话我们就为id 加上了主键约束,我们来插入一个错误的信息
insert into stu_inform values(1,'张三',100.00),(1,'李四',100.00); -- Error
[同时两个id]
如果是这样插入的话环境会报出一个错误,这个错误正是主键约束的作用。
但是如果你也想让姓名也不能相同,你可能会这样写
create table stu_inform(
id int,
name varchar(20),
grade double,
primary key(id,name) );
接下来我们插入一个数据
insert into stu_inform values(1,'张三',100.00),(1,'李四',100.00);
你会发现这条语句是完全可行的,是完全没有错误的,这是为什么呢,这是因为这是一个联合主键,它的作用是id不能重复 且 姓名也不能重复,注意是且。
你如果这样写的话
insert into stu_inform values(1,'张三',100.00),(1,'张三',100.00);//Error
你如果这样写的话就是大错特错了,因为这违反了联合主键。因为id和姓名同时相同了就是这个道理。
那么要怎样才能实现id不能相同,同时姓名也不能相同呢,这就是下一篇要讲的unique的作用了。
(3) primary key习惯
1、不更新主键列的值
2、不重用主键列的值
3、不在主键列中使用可能会更改的值(例如,如果使用一个名字作为主键以标识某个供应商,应该供应商合并和更改其名字时,必须更改这个主键)
4、在使用InnoDB存储引擎时,如果没有特别的需要,请永远使用一个与业务无关的自增字段作为主键
(4) foreign key外键
foreignkey 是指一对多关系时建立的关系:
外键是表中与另一个表的另一个字段匹配的字段。
外键对相关表中的数据施加限制,这使MySQL能够保持参照完整性。
操作:
我们有两个表:customers
和orders.
每个客户都有零个或多个订单,每个订单只能属于一个客户。
customers
表和orders
表之间的关系是一对多关系,并且orders
由该customerNumber
字段指定的表中的外键建立。
表中的customerNumber
字段与orders
表中的customerNumber
主键字段相关 customers
。
该customers
表称为父表或被引用表,该orders
表称为子表或引用表。
外键可以是一列或一组列。子表中的列通常引用父表中的主键列。
一个表可能有多个外键,并且子表中的每个外键都可能引用不同的父表。
子表中的行必须包含父表中存在的值,例如,表中的每个订单记录orders
必须具有表customerNumber
中存在的值customers
。因此,多个订单可以指同一个客户,这种关系被称为一个(客户)多个(订单)或一对多
外键的默认作用有两点:
1、对子表(外键所在的表)的作用:子表在进行写操作的时候,如果外键字段在父表中找不到对应的匹配,操作就会失败。
2、对父表的作用:对父表的主键字段进行删和改时,如果对应的主键在子表中被引用,操作就会失败。
外键的定制作用----三种约束模式:
district:严格模式(默认), 父表不能删除或更新一个被子表引用的记录。
cascade:级联模式, 父表操作后,子表关联的数据也跟着一起操作。
set null:置空模式,前提外键字段允许为NLL, 父表操作后,子表对应的字段被置空。
使用外键的前提:
1、表储存引擎必须是innodb,否则创建的外键无约束效果。
2、外键的列类型必须与父表的主键类型完全一致。
3、外键的名字不能重复。
4、已经存在数据的字段被设为外键时,必须保证字段中的数据与父表的主键数据对应起来。
MySQL知识篇-SQL1的更多相关文章
- MySQL知识篇-nmon监控
说明1:监控MySQL服务器资源不止一种方式,这种nmon监控图形化.历史记录查询笔记方便,便于MySQL优化后,对比其效率不同,资源利用率不同. 说明2:摘抄自https://www.cnblogs ...
- MySQL知识篇-SQL3
视图 1 提高重用性: 2 可用于数据库重构: 3 可用于不同用户,提高安全性: 定义视图: create view 视图name as select语句: 查看视图: show tables: 使用 ...
- MySQL知识篇-SQL2
1 数据库基本操作? (1) 查看数据库 show databases; (2)切换到指定的数据库 use dbname; (3)创建数据库 create database 库名 charset=ut ...
- 「MySQL高级篇」explain分析SQL,索引失效&&常见优化场景
大家好,我是melo,一名大三后台练习生 专栏回顾 索引的原理&&设计原则 欢迎关注本专栏:MySQL高级篇 本篇速览 在我们上一篇文章中,讲到了索引的原理&&设计原则 ...
- 转摘 MySQL扫盲篇
一下文章摘自:http://www.jellythink.com/archives/636 MySQL扫盲篇 2014-09-15 分类:MySQL / 数据库 阅读(1412) 评论(1) 为什么 ...
- MySQL知识树-查询语句
在日常的web应用开发过程中,一般会涉及到数据库方面的操作,其中查询又是占绝大部分的.我们不仅要会写查询,最好能系统的学习下与查询相关的知识点,这篇随笔我们就来一起看看MySQL查询知识相关的树是什么 ...
- mysql注入篇
博客这个东西真的很考验耐心,每写一篇笔记,都是在艰难的决定中施行的,毕竟谁都有懒惰的一面,就像这个,mysql注入篇,拖拖拖一直拖到现在才开始总结,因为这个实在是太多太杂了,细细的总结一篇太烧脑. 由 ...
- 「 MySQL高级篇 」MySQL索引原理,设计原则
大家好,我是melo,一名大二后台练习生,大年初三,我又来充当反内卷第一人了!!! 专栏引言 MySQL,一个熟悉又陌生的名词,早在学习Javaweb的时候,我们就用到了MySQL数据库,在那个阶段, ...
- MySQL优化篇(一),我可以和面试官多聊几句吗?——SQL优化流程与优化数据库对象
我可以和面试官多聊几句吗?只是想偷点技能过来.MySQL优化篇(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. MyISAM表锁和InnoD ...
随机推荐
- barcode模块: plus.barcode.scan 进行扫描图片出现无法识别二维码,打印的错误信息是code:8,message:''
原因之一:图片的像素太大了,无法识别. 解决方法: 压缩一下图片. 这里的 data 我放了一个 像素为 4040 × 4040 的 图片. 进行识别的时候会报, (无法识别的图片,都是返回这些值) ...
- 05 vue项目01-组件关系、bootstrap
1.django后端项目 1.项目预期 配置前端静态资源 页面展示 2.django项目代码 主url from django.contrib import admin from ...
- uni-app引入css动画库
引入Animate动画库 Animate中文网地址:http://www.animate.net.cn/ Animate下载地址:https://daneden.github.io/animate.c ...
- socket、tcp、udp、http 的认识
一.先来一个讲TCP.UDP和HTTP关系的 1.TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输 ...
- 校验正确获取对象或者数组的属性方法(babel-plugin-idx/_.get)
背景: 开发中经常遇到取值属性的时候,需要校验数值的有效性. 例如: 获取props对象里面的friends属性 props.user && props.user.friends &a ...
- istio 安装与bookinfo示例运行
目的 本文旨在帮助想了解istio安装和运行bookinfo示例的同学快速入门 前置准备 安装k8s和helm 1.k8s安装 修改主机名 hostnamectl set-hostname k8s-m ...
- [Linux]kali更新/etc/apt/sources.list
vim /etc/apt/sources.list #中科大 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contri ...
- 单调队列优化DP——习题收集
前言 感觉可以用单调队列优化dp的模型还是挺活的,开个随笔记录一些遇到的比较有代表性的模型,断续更新.主要做一个收集整理总结工作. 记录 0x01 POJ - 1821 Fence,比较适合入门的题, ...
- 2017 ZSTU寒假排位赛 #3
题目链接:https://vjudge.net/contest/147974#overview. A题,费用流,不会..跳过了. B题,给一个图,问至少添加几条边能成为强连通图.显然缩点,要使得成为一 ...
- RHSA-2018:0014-重要: linux-firmware 安全更新
修复命令: yum update iwl2030-firmware yum update iwl5000-firmware yum update iwl100-firmware yum update ...