👻
security
  • 计算机技术
  • OWASP TOP 10
  • 名词解释
  • 1
    • 常见端口利用
    • F5 big-ip从环境搭建到漏洞复现
    • 红队资源
  • About
    • APT
      • 海莲花(APT-C-00)
        • 样本分析
      • 毒云藤(APT-C-01)
        • 大规模钓鱼攻击活动披露
        • 2020上半年针对我重要机构定向攻击活动揭秘
      • 响尾蛇(T-APT-04)
        • 利用WebSocket隧道的新型攻击活动披露
      • 蔓灵花(APT-C-08)
        • 移动平台攻击活动揭露
      • 蓝宝菇(APT-C-12)
        • 组织使用云存储技术发起的最新攻击活动披露
      • 双尾蝎组织(APT-C-23)
        • 针对中东地区的最新攻击活动
      • Lazarus(APT-C-26)
        • 暴风行动 -利用MATA框架针对数字货币行业的攻击活动揭秘
      • Fancy Bear(APT-C-28)
        • 携小众压缩包诱饵对北约、中亚目标的定向攻击分析
      • 肚脑虫组织(APT-C-35)
        • 使用升级版数字武器针对周边地区的攻击活动
        • 针对巴基斯坦的攻击活动
      • 拍拍熊(APT-C-37)
      • 军刀狮(APT-C-38)
      • 蓝色魔眼(APT-C-41)
        • 组织首次针对我国重要机构定向攻击活动披露
      • 美人鱼(Infy)
        • 使用最新的Foudre后门进行攻击活动的分析
    • 各类靶场讲解
      • sqli-labs
      • upload-labs
      • xss-labs
    • CISP题库
    • Docker
      • Docker基线
        • docker基线-概述
        • 推荐一
        • 推荐二
        • 推荐三
        • 推荐四
        • 推荐五
        • 推荐六
      • 命令与选项
      • 基于Docker的固件模拟
      • 固件相关
      • Docker 私有仓库搭建
      • 基础命令的背后
      • 渗透思路调研
      • Docker容器环境检测方法【代码】
    • 浏览器
    • markdown
    • 密码学
    • 内网渗透TIPS
    • 网络扫描
    • 正则表达式
  • 操作系统
    • Android
      • APK终端安全分析法
      • 应用审计指南
        • 通用审计方法
    • IOS
      • 应用审计指南
    • Linux
      • 反弹shell
      • 基线检查
      • SHELL编程
      • 实战技能
    • windows
      • BACKDOOR with 权限维持
      • 磁盘取证实验
      • 基线检查
      • 免杀抓取明文
      • payload下载方式
      • powershell
      • 日志分析
        • 分析工具
      • Untitled
  • 数据库
    • db2
    • mysql
      • webshell写入
      • 基础知识
      • 核心技术
      • 高级应用
    • oracle
      • webshell写入
    • SQLserver
      • webshell写入
  • 中间件
    • apache
      • 基线检查
      • 日志审计
    • iis
      • 基线检查
      • 7.5解析绕过漏洞
    • nginx
      • 基线检查
    • tomcat
      • 基线检查
  • 编程语言
    • C
    • Java
      • webshell
        • 查杀Java web filter型内存马
        • Filter/Servlet型内存马的扫描抓捕与查杀
        • 基于内存 Webshell 的无文件攻击技术研究
        • 基于tomcat的内存 Webshell 无文件攻击技术
        • Tomcat 内存马检测
      • 代码审计
      • 代码审计指南
      • 浅析Java命令执行
      • 相关框架简介及漏洞
    • PHP
      • 代码审计
      • 破解DVWA-admin密码
      • webshell
        • 常见php一句话webshell解析
        • PHP Webshell Hidden Learning
        • Webshell免杀研究
        • Webshell那些事-攻击篇
        • 过D盾webshell分享
      • 相关框架简介及漏洞
    • python
      • 安全编码规范-代码审计
      • 编码规范
      • fishc
      • 某教程涉及脚本
      • POC编写相关
      • python秘籍
        • 上半部分
        • 下半部分
      • 安全方面的内容
        • Python Opcode逃逸笔记
        • 虚拟机逃逸
      • with-EXCEL
      • 相关框架简介及漏洞
      • 源码剖析
        • 多线程和GIL锁
        • Set容器
        • 统一内存管理
        • 信号处理机制
        • 循环垃圾回收器
        • 字符串对象PyStringObject
        • 整数对象PyIntObject
        • 字节码和虚拟机
    • 汇编
    • Javascript
      • Tampermonkey Script
  • AIGC
    • howtouse
  • 网络
    • CCNA
  • 漏洞类型及讲解
    • 综合
    • 技术分享
      • 暴力破解与信息泄露
      • 信息泄露漏洞_java
      • sqli-with-java
      • python远程命令执行与SSRF
    • SQL-Injectoin
    • Cross-Site Scripting
      • 跨站的艺术-XSS入门与介绍
      • 跨站的艺术-XSS Fuzzing 的技巧
      • 给开发者的终极XSS防护备忘录
      • AngularJS特性的 XSS
    • 文件操作
      • 文件包含
  • how-to-use
    • Acunetix(AWVS)
      • 安装到使用
      • 编写AWVS脚本探测web services
      • 简单分析-web方面
      • 流量分析特征
    • burpsuite
      • 导出报告方式
      • captcha-killer
      • FAKE-IP
      • JSFind
      • 编写插件绕过WAF
    • Cobalt Strike
      • Cobalt Strike Powershell过360+Defender上线
    • FOFA
    • GDB
    • PowerSh
      • 获得Powershell命令的历史记录
      • 深入分析PowerShell的两面性
      • 内网渗透利器之PowerSploit
      • PoC:滥用PowerShell Core
      • 如何绕过PowerShell访问限制并实现PowerShell代码执行
      • 工具包
      • 无powershell运行powershell方法总结
    • sheji
    • sqlmap
      • Atlas修改SQLMap tampers 绕过WAF/IDS/IPS
      • 内核分析
      • 检测剖析
      • tamper
      • UDF
      • --os-shell
      • sqlmapapi
      • with burp
      • 网络特征
    • Matlab
    • Metasploit
      • 与Powershell
    • NESSUS
      • 流量分析特征
      • Untitled
    • Network MapTools
      • 流量特征修改
      • 识别主机指纹
    • waf
      • ngx-lua-waf
      • modsecurity
由 GitBook 提供支持
在本页
  • 一、数据表基本操作
  • 1、创建数据表
  • 2、查看数据表结构
  • 3、修改数据表
  • 4、删除数据表
  • 二、MySQL的数据类型和运算符
  • 1、MySQL数据类型
  • 2、如何选择数据类型
  • 3、常见运算符
  • 三、MySQL函数
  • 1、数学函数
  • 2、字符串函数
  • 3、日期和时间函数
  • 4、控制流函数
  • 5、系统信息函数
  • 6、加密函数
  • 7、其他函数
  • 四、查询语句详解
  • 1、学生-课程数据库
  • 2、基本查询语句
  • 3、对查询结果进行排序
  • 4、统计函数和分组记录查询
  • 5、GROUP BY语句
  • 6、使用LIMIT限制查询结果的数量
  • 7、连接查询
  • 8、子查询
  • 9、合并查询结果
  • 10、使用正则表达式表示查询
  • 五、存储过程与函数
  • 1、存储过程的定义
  • 2、存储过程的创建
  • 3、存储过程的操作
  • 4、自定义函数
  • 六、触发程序
  • 1、触发程序的定义
  • 2、触发程序的创建
  • 3、触发程序的操作
  • 七、视图
  • 1、视图的定义
  • 2、视图的创建,修改与删除
  • 3、视图的使用

这有帮助吗?

  1. 数据库
  2. mysql

核心技术

一、数据表基本操作

1、创建数据表

创建数据表:指的是在已经创建好的数据库中建立新表。创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性)约束的过程

1、语法形式

数据表属于数据库,在创建数据表之前,应该使用语句“USE <数据库名>”指定操作是在哪个数据库中进行,如果没有选择数据库,直接创建数据表,系统会显示“No database selected”的错误

## 语法形式:
CREATE TABLE <表名>    
(    
字段名1,数据类型[列级别约束条件][默认值],
字段名2,数据类型[列级别约束条件][默认值],    
……    
[表级别约束条件]
);

建表时注意:

  1. 要创建的表的名称,不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INSERT等。

  2. 数据表中每一个列(字段)的名称和数据类型,如果创建多个列,要用逗号隔离开

## 实例
create database aa;
use aa;
create table ceshi(id int(11),name varchar(25),depid int(11),gongzi float);
show tables;
select 8 from ceshi;

2、主键约束

主键,又称主码,是表中一列或多列的组合。

主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空。主键能够唯一标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度。主键和记录之间的关系如同身份证和人之间的关系,它们之间是一一对应的。

主键分为两种类型:单字段主键和多字段联合主键。

单字段主键: 单字段主键是指主键由一个字段组成,SQL语句格式分为以下两种情况:

  1. 义列的同时指定主键

  2. 在定义完所有列之后指定主键

字段名 数据类型 PRIMARY KEY[默认值]

多字段联合主键: 多字段联合主键是指主键由多个字段联合组成

PRIMARY KEY[字段1,字段2,…,字段n]

3、外键约束

外键用来在两个表的数据之间建立连接,它可以是一列或者多列。一个表可以有一个或者多个外键。外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。

外键:下面介绍几个概念。是表中的一个字段,它可以不是本表的主键,但对应另外一个表的主键。外键的主要作用是保证数据引用的完整性,定义外键后,不允许删除在另一个表中具有关联关系的行。例如:部分表tb_dept的主键id,在员工表tb_employee5中有一个键deptId与这个id关联。

主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表。 从表(自表):对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表。

[CONSTRAINT<外键名>]FOREIGN KEY 字段名1[,字段名2,…]    
REFERENCES<主表名> 主键列1[,主键列2,…]

其中,“外键名”为定义的外键约束的名称,一个表中不能有相同名称的外键;“字段名”表示子表需要添加外键约束的字段列

注意: 关联值是在关系型数据库中,相关表之间的联系。它是通过相容或相同的属性或属性组来表示的。子表的外键必须关联父表的主键,且关联字段的数据类型必须匹配,如果类型不一样,则创建子表时,就会出现错误提示

4、非空约束: 是指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统会报错

字段名 数据类型 not null

5、唯一性约束 要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列都不出现重复值

## 在定义完列之后直接指定唯一约束
字段名 数据类型 UNIQUE

## 在定义完所有列之后指定唯一约束,语法规则如下。    
[CONSTRAINT <约束名>] UNIQUE(<字段名>)

UNIQUE和PRIMARY KEY的区别:

一个表中可以有多个字段声明为UNIQUE,但只能有一个PRIMARY KEY声明; 声明为PRIMARY KEY的列不允许有空值,但是声明为UNIQUE的字段允许空值的存在

默认约束: 指定某列的默认值。如男性同学较多,性别就可以默认为“男”。如果插入一条新的记录时没有为这个字段赋值,那么系统会自动为这个字段赋值为“男”。

字段名数据类型 DEFAULT 默认值

表tb_employee7中的字段deptId拥有了一个默认值“1111”,新插入的记录如果没有指定部门编号,则默认设置为“1111”

7、设置数据表的属性值自动增加

在数据库应用中,经常希望在每次插入新记录时,系统自动生成字段的主键值。可以通过为表主键添加AUTO_INCREMENT关键字来实现。在MySQL中,默认情况下AUTO_INCREMENT初始值为1,每新增一条记录,字段自动加1。一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分。AUTO_INCREMENT约束的字段可以是任何整数类型(TINYINT、SMALLINT、INT、BIGINT)。

字段名 数据类型 AUTO_INCREMENT

创建名称为tb_employee8的数据表。表中的id字段值在添加记录的时候会自动增加,id字段默认值从1开始,每次添加一条新纪录,该值自动加1

2、查看数据表结构

## 查看表的基本结构
describe tb_name;
desc tb_name;

其中:

  1. NULL:表示该列是否可以存储NULL值。

  2. Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示在列中某个给定值允许出现多次。

  3. Default:表示该列是否有默认值,如果有的话值是多少。

  4. Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等

## 查看表详细结构
SHOW CREATE TABLE tb_name(\G);    #\g:是否格式化显示

3、修改数据表

修改表指的是修改数据库中已经存在的数据表的结构。MySQL使用ALTER TABLE语句修改表。常用的修改表的操作有:修改表名,修改字段数据类型或字段名,增加和删除字段,修改字段的排列位置,更改表的存储引擎,删除表的外键约束等

## 修改表名
alter table old_name rename nwe_name;
## 修改字段数据类型
ALTER TABLE tb_name MODIFY name VARCHAR(30);
## 修改字段名
alter table tb_name change old_id new_id varchar(255);

由于不同类型的数据在机器中存储的方式及长度并不相同,修改数据类型可能会影响到数据表中已有的数据记录。因此,当数据库中已经有数据时,不要轻易修改数据类型

## 添加字段
alter tabe tb_name add new_ziduan varchar(255) first;
alter tabe tb_name add new_ziduan varchar(255) after XXX;

“FIRST”“AFTER”“已存在字段名”用于指定新增字段在表中的位置,如果SQL语句中没有这两个参数,则默认将新添加的字段设置为数据表的最后列

## 删除字段
alter table tb_name drop ziduan;
## 修改字段排序
alter table tb_name modify ziduan1 varchar(255) first;
alter table tb_name modify ziduan1 varchar(255) after XXX;
## 更改表的存储引擎
alter table tb_name ENGINE=InnoDB;    #修改存储引擎为InnoDB
## 删除表的外键约束
alter table tb_name frop foreign key key_name;

4、删除数据表

## 删除数据表
drop table tb_name;
## 若报错,则说明有外键约束,删除外键约束再删除表即可

在MySQL中AUTO_INCREMENT的初始值是1,每新增一条记录,字段值自动加1。设置自增属性(AUTO_INCREMENT)的时候,还可以指定第一条插入记录的自增字段的值,这样新插入的记录的自增字段值从初始值开始递增。

二、MySQL的数据类型和运算符

1、MySQL数据类型

MySQL支持多种数据类型,主要有数值类型、日期/时间类型、字符串类型和二进制类型。

  1. 数值数据类型:包括整数类型TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,浮点小数类型FLOAT和DOUBLE,定点小数类型DECIMAL。

  2. 日期/时间类型:包括YEAR、TIME、DATE、DATETIME和TIMESTAMP。

  3. 字符串类型:包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET等。

  4. 二进制类型:包括BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。

1、整数类型

类型名称

说明

存储需求

TINYINT

很小的整数

1个字节

SMALLINT

小的整数

2个字节

MEDIUMINT

中等大小的整数

3个字节

INT(INTEGER)

普通大小的整数

4个字节

BIGINT

大整数

8个字节

整数类型的显示宽度只用于显示,不能限制取值范围和存储空间,如INT(4)会占用4个字节的存储空间,其允许的最大值是231-1或232-1,而不是9999

2、小数类型

MySQL中使用浮点数和定点数表示小数。浮点类型有两种:单精度浮点类型(FLOAT)和双精度浮点类型(DOUBLE)。定点类型只有一种:DECIMAL。浮点类型和定点类型都可以用(M,D)来表示,其中M称为精度,表示总共的位数;D称为标度,表示小数的位数。浮点类型取值范围为:M(1~255)和D(1~30,且不能大于M-2)。分别表示显示宽度和小数位数。M和D在FLOAT和DOUBLE中是可选的,MySQL 3.23.6以上版本中,FLOAT和DOUBLE类型将被保存为硬件所支持的最大精度。DECIMAL的M和D值在MySQL 3.23.6后可选,默认D值为0,M值为10。

类型名称

说明

存储需求

FLOAT

单精度浮点数

4个字节

DOUBLE

双精度浮点数

8个字节

DECIMAL(M,D),DEC

压缩的“严格”定点数

M+2个字节

FLOAT类型的取值范围如下

  1. 有符号的取值范围:-3.402823466E+38~-1.175494351E-38。

  2. 无符号的取值范围:0和1.175494351E-38~3.402823466E+38。

DOUBLE类型的取值范围如下

  1. 有符号的取值范围:-1.7976931348623157E+308~-2.2250738585072014E-308。

  2. 无符号的取值范围:0和2.2250738585072014E-308~1.7976931348623157E+308。

在MySQL中,在对精度要求比较高的时候(如货币、科学数据等),尽量选择使用DECIMAL类型。另外,两个浮点数在进行减法和比较运算的时候容易出问题,因此在使用浮点数类型时需要注意,并尽量避免做浮点数比较

3、日期与时间类型

MySQL中有多种表示日期的数据类型,主要有:YEAR、TIME、DATE、DATETIME、TIMESTAMP。

类型名称

日期格式

日期范围

存储需求

YEAR

YYYY

1901~2155

1个字节

TIME

HH:MM:SS

-838:59:59 ~ 838:59:59

3个字节

DATE

YYYY-MM-DD

1000-01-01 ~ 9999-12-31

3个字节

DATETIME

YYYY-MM-DD HH:MM:SS

1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

8个字节

TIMESTAMP

YYYY-MM-DD HH:MM:SS

1970-01-01 00:00:001 ~ 2038-01-19 03:14:07

4个字节

YEARYEAR类型使用单字节表示年份,在存储时只需要一个字节。可以使用不同格式指定YEAR的值。

  1. 以4位字符串或者4位数字格式表示YEAR,其范围为‘1901’~‘2155’,输入格式为‘YYYY’或YYYY。例如,输入‘2015’或2015,插入到数据库的值都是2015。

  2. 以2位字符串格式表示YEAR,范围为‘00’到‘99’。‘00’~‘69’和‘70’~‘99’范围的值分别被转换为2000~2069和1970~1999范围的YEAR值。输入‘0’与‘00’取值相同,皆为2000。插入超过取值范围的值将被转换为2000。

  3. 以2位数字表示的YEAR,范围为1~99。1~69和70~99范围的值分别被转换为2001~2069和1970~1999范围的YEAR值。注意:0值被转换为0000,而不是2000。

两位整数与两位字符串的取值范围稍有不同。例如:插入2000年,读者可能会使用数字格式的0表示YEAR,实际上,插入数据库的值为0000,而不是期望的20000。只有使用字符串格式的‘0’和‘00’,才可以得到2000。非法YEAR值被转换为0000。

2、如何选择数据类型

3、常见运算符

三、MySQL函数

1、数学函数

2、字符串函数

3、日期和时间函数

4、控制流函数

5、系统信息函数

6、加密函数

7、其他函数

四、查询语句详解

1、学生-课程数据库

2、基本查询语句

3、对查询结果进行排序

4、统计函数和分组记录查询

5、GROUP BY语句

6、使用LIMIT限制查询结果的数量

7、连接查询

8、子查询

9、合并查询结果

10、使用正则表达式表示查询

五、存储过程与函数

1、存储过程的定义

2、存储过程的创建

3、存储过程的操作

4、自定义函数

六、触发程序

1、触发程序的定义

2、触发程序的创建

3、触发程序的操作

七、视图

1、视图的定义

2、视图的创建,修改与删除

3、视图的使用

上一页基础知识下一页高级应用

最后更新于4年前

这有帮助吗?

在id字段上设置主键约束
在id字段上设置主键约束
id字段和depid字段组合在一起成为该数据表的多字段联合主键
创建了一个name字段,其插入值不能为空(NOT NULL)
在表tb_employee5上添加了名称为fk_emp_dept1的外键约束,外键名称为depid,其依赖于表tb_dept1的主键id
创建了一个name字段,其插入值不能为空(NOT NULL)
向表中添加数据
表内容
整数型数据类型的取值范围