在学习SQL注入的时候,对于有些注入语句,不太能理解,所以觉得还是学一遍SQL比较好,所以才有了这些内容
注意我用的数据库是mysql
Structure Query Language(结构化查询语言)简称SQL,它被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。数据库管理系统可以通过SQL管理数据库;定义和操作数据,维护数据的完整性和安全性。
简单来说SQL语言是一套标准化的关系型数据库语言,也就是只要遵从这套标准的关系型数据库SQL语句都可以再这上面跑,而不是说我用mysql得学mysql的查询语句,用oracle还得学oracle的查询语句(当然不同的数据库之间有些操作是有区别的)
使用MySQL数据库存储数据时,不同的数据类型决定了 MySQL存储数据方式的不同。为此,MySQL数据库提供了多种数据类型,其中包括整数类型、浮点数类型、定点 数类型、日期和时间类型、字符串类型、二进制…等等数据类型。
根据数值取值范围的不同MySQL 中的整数类型可分为5种,分别是TINYINT、SMALUNT、MEDIUMINT、INT和 BIGINT。下面列举了 MySQL不同整数类型所对应的字节大小和取值范围而最常用的为INT类型的
数据类型 | 字节数 | 无符号数的取值范围 | 有符号数的取值范围 |
---|---|---|---|
TINYINT | 1 | 0~255 | -128~127 |
SMALLINT | 2 | 0~65535 | -32768~32768 |
MEDIUMINT | 3 | 0~16777215 | -8388608~8388608 |
INT | 4 | 0~4294967295 | -2147483648~2147483648 |
BIGINT | 8 | 0~18446744073709551615 | -9223372036854775808~9223372036854775808 |
取值范围超出的话,数据就存不进数据库了,所谓有符号和无符号就是能不能取负数,有符号就是可以为负数,无符号就不可以为负数。
在MySQL数据库中使用浮点数和定点数来存储小数。浮点数的类型有两种:单精度浮点数类型(FLOAT)和双精度浮点数类型(DOUBLE)。而定点数类型只有一种即DECIMAL类型。下面列举了 MySQL中浮点数和定点数类型所对应的字节大小及其取值范围
数据类型 | 字节数 | 无符号数的取值范围 | 有符号数的取值范围 |
---|---|---|---|
FLOAT | 4 | -3.402823466E+38~-1.175494351E-38 | 0和1.175494351E-38~3.402823466E+38 |
DOUBLE | 8 | -1.7976931348623157E+308~2.2250738585072014E-308 | 0和2.2250738585072014E-308~1.7976931348623157E+308 |
DECIMAL(M,D) | M+2 | -1.7976931348623157E+308~2.2250738585072014E-308 | 0和2.2250738585072014E-308~1.7976931348623157E+308 |
从上面可以看出:DECIMAL类型的取值范围与DOUBLE类型相同。但是,请注意:DECIMAL类型的有效取值范围是由M和D决定的。其中M表示的是数据的长度,D表示的是小数点后的长度。比如,将数据类型为DECIMAL(6,2)的数据6.5243 插人数据库后显示的结果为6.52
在MySQL中常用CHAR 和 VARCHAR 表示字符串。两者不同的是:VARCHAR存储可变长度的字符串。
当数据为CHAR(M)类型时,不管插入值的长度是实际是多少它所占用的存储空间都是M个字节;而VARCHAR(M)所对应的数据所占用的字节数为实际长度加1
例如我有char和varchar两个字段,那么我同时存入’a’这个字符,char的字段占3个字节而varchar的字段只占一个字节
文本类型用于表示大文本数据,例如,文章内容、评论、详情等,它的类型分为如下4种
数据类型 | 储存范围 |
---|---|
TINYTEXT | 0~255字节 |
TEXT | 0~65535字节 |
MEDIUMTEXT | 0~16777215字节 |
LONGTEXT | 0~4294967295字节 |
MySQL提供的表示日期和时间的数据类型分别是 :YEAR、DATE、TIME、DATETIME 和 TIMESTAMP。下面列举了日期和时间数据类型所对应的字节数、取值范围、日期格式以及零值
数据类型 | 字节数 | 取值范围 | 日期格式 | 零值 |
---|---|---|---|---|
YEAR | 1 | 1901~2155 | YYYY | 0000 |
DATE | 4 | 1000-01-01~9999-12-31 | YYYY-MM-DD | 0000-00-00 |
TIME | 3 | -838:59:59~838:59:59 | HH:MM:SS | 00:00:00 |
DATETIME | 8 | 1000-01-01 00:00:00~9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 0000-00-00 00:00:00 |
TIMESTAMP | 4 | 1970-01-01 00:00:01~2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 0000-00-00 00:00:00 |
在MySQL中常用BLOB存储二进制类型的数据,例如:图片、PDF文档等。BLOB类型分为如下四种
数据类型 | 储存范围 |
---|---|
TINYBLOB | 0~255字节 |
BLOB | 0~65535字节 |
MEDIUMBLOB | 0~16777215字节 |
LONGBLOB | 0~4294967295字节 |
cmd的路径切换到mysql的bin目录下,然后执行命令
mysql -u 账号 -p密码
-p和密码之间不要有空格,也可以直接mysql -u 账号 -p
然后回车,它会要你输入密码,输对密码后就进入了mysql的命令行
安装完成后,要想将数据存储到数据库的表中,首先要创建一个数据库。创 建数据库就是在数据库系统中划分一块空间存储数据,语法如下
create database 数据库名称;
例如创建一个叫db1的数据库
-- 创建一个叫db1的数据库
show create database db1;
创建数据库后查看该数据库基本信息
show create database db1;
删除数据库
drop database db1;
查询出MySQL中所有的数据库
show databases;
将数据库的字符集修改为gbk
alter database db1 character set gbk;
切换数据库
use db1;
查看当前使用的数据库
select database();
数据库创建成功后可在该数据库中创建数据表(简称为表)存储数据。请注意:在操作数据表之前应使用“USE 数据库名;”指定操作是在哪个数据库中进行先关操作,否则会抛出“No database selected”错误。
语法如下
create table 表名(
字段1 字段类型,
字段2 字段类型,
…
字段n 字段类型
);
示例:创建学生表
create table student(
id int,
name varchar(20),
gender varchar(10),
birthday date
);
示例:查看当前数据库中所有表
show tables;
示例:查表的基本信息
show create table student;
示例:查看表的字段信息
desc student;
有时,希望对表中的某些信息进行修改,例如:修改表名、修改字段名、修改字段 数据类型…等等。在MySQL中使用alter table修改数据表.
示例:修改表名
alter table student rename to stu;
示例:修改字段名
alter table stu change name sname varchar(10);
示例:修改字段数据类型
alter table stu modify sname int;
示例:增加字段
alter table stu add address varchar(50);
示例:删除字段
alter table stu drop address;
语法:
drop table 表名;
示例:删除数据表
drop table stu;
为防止错误的数据被插入到数据表,MySQL中定义了一些维护数据库完整性的规则;这些规则常称为表的约束。常见约束如下:
PRIMARY KEY 主键约束,用于唯一标识对应的记录
FOREIGN KEY 外键约束
NOT NULL 非空约束
UNIQUE 唯一性约束
DEFAULT 默认值约束,用于设置字段的默认值
以上五种约束条件针对表中字段进行限制从而保证数据表中数据的正确性和唯一性。换句话说,表的约束实际上就是表中数据的限制条件。
主键约束即primary key用于唯一的标识表中的每一行。被标识为主键的数据在表中是唯一的且其值不能为空。这点类似于我们每个人都有一个身份证号,并且这个身份证号是唯一的。
主键约束基本语法:
字段名 数据类型 primary key;
设置主键约束(primary key)的第一种方式
示例
create table student(
id int primary key,
name varchar(20)
);
设置主键约束(primary key)的第二·种方式
示例
create table student01(
id int
name varchar(20),
primary key(id)
);
非空约束即 NOT NULL指的是字段的值不能为空,基本的语法格式如下所示
字段名 数据类型 NOT NULL;
示例:MySQL命令:
create table student02(
id int
name varchar(20) not null
);
默认值约束即DEFAULT用于给数据表中的字段指定默认值,即当在表中插入一条新记录时若未给该字段赋值,那么,数据库系统会自动为这个字段插人默认值;其基本的语法格式如下所示
字段名 数据类型 DEFAULT 默认值;
示例:MySQL命令
create table student03(
id int,
name varchar(20),
gender varchar(10) default 'male'
);
唯一性约束即UNIQUE用于保证数据表中字段的唯一性,即表中字段的值不能重复出现,其基本的语法格式如下所示
字段名 数据类型 UNIQUE;
示例:MySQL命令:
create table student04(
id int,
name varchar(20) unique
);
外键约束即FOREIGN KEY常用于多张表之间的约束。基本语法如下
-- 在创建数据表时语法如下:
CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段)
-- 将创建数据表创号后语法如下:
ALTER TABLE 从表名 ADD CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段);
示例:创建一个学生表
create table student05(
id int primary key,
name varchar(20)
);
示例:创建一个班级表
create table class(
classid int primary key,
studentid int
);
示例:学生表作为主表,班级表作为副表设置外键
alter table class add constraint fk_class_studentid foreign key(studentid) references student05(id);
建立外键是为了保证数据的完整和统一性。但是,如果主表中的数据被删除或修改从表中对应的数据该怎么办呢?很明显,从表中对应的数据也应该被删除,否则数据库中会存在很多无意义的垃圾数据。
语法如下:
alter table 从表名 drop foreign key 外键名;
示例:删除外键 MySQL命令:
alter table class drop foreign key fk_class_studentid;
外键的那个字段不在了证明删除成功了
1、从表里的外键通常为主表的主键
2、从表里外键的数据类型必须与主表中主键的数据类型一致
3、主表发生变化时应注意主表与从表的数据一致性问题
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.