一,理论知识
1.数据库原理:一个数据库可以保存多个不同的数据表,每个数据表之间因为共同拥有一个相同的字段而可以彼此相关,协同作业,这就是关系型数据库。
2.数据库系统的组成部分:
1.数据库:用于存储数据的地方
2.数据库管理系统:用于管理数据库的软件。
3.数据库应用服务:为了提高数据库系统的处理能力所使用的管理数据库的软件补充。
3.sql语言
1.数据定义语言(DDL):DROP,CREATE,ALTER等语句
2.数据操作语言(DML):INSTER,UPDATE,DELETE.
3.数据查询语言(DQL):SELECT
4.数据控制语言(DCL):GRANT,REVOKE,COMMIT,ROLLBACK
4.数据库访问技术
1.ODBC(开放数据库互连):技术为访问不同的SQL数据库提供了一个共同的接口。ODBC使用SQL作为访问数据的标准,提供最大限度的互操作性。访问不同的数据库管理系统。最大的有点就是能够统一的方式处理所有的数据库。
5.关系数据库结构
1.关系(relation):一个二维表就是一个关系.
2.元组(tuple):二位表中的一行就是一个元组。
3.属性(attribute):二位表中的一列就是一个属性,每个属性起的名字就是属性名。
4.域(domain):属性的取值范围。
6.MYSQL体系结构
1.mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成。
2.体系含义:
1).Connectors:是不同语言中的SQL交互。
2).enterprise management services & uitlities :系统管理和控制工具。
3).Connection pool:连接池。管理缓冲用户连接,线程处理等需要缓存的需求。
4).sql interface:Sql 接口:j接受sql 命令,返回需要查询的结果。
5).parser:解析器。解析器是由lex和yacc实现,是一个脚本。sql命令传递到解析器的时候会被解析器验证和解析。主要分解成数据结构,把这个结构传递给后续操作。解析中遇见错误,说明sql语句不合理。
6).optimizer:查询优化器。sql查询之前会使用查询优化器进行优化。它使用 "选取-投影-连接" 策略进行优化。
7).caches & buffers:查询缓存。如果查询缓存有命中结构,就直接去查询缓存中取数据。这个机制是由一系列小缓存组成。比如:表缓存,记录缓存等等。
8).pluggable storage engines:存储引擎。是MySQL中具体与文件打交道的子系统。
3.sql执行顺序
(1)from
(2) on
(3) join
(4) where
(5)group by(开始使用select中的别名,后面的语句中都可以使用)
(6) avg,sum....
(7)having
(8) select
(9) distinct
(10) order by
4.数据库基本操作
1.创建数据库:
CREATE DATABASE database_name;
2.查看数据库:
SHOW CREATE DATABASE database_name;
3.选择数据库:
USE database_name;
4.删除数据表:
DROP DATABASE database_name;
5.查看系统支持引擎类型:
SHOW ENGINES;
5.数据库存储器引擎
1.innodb,myisam,memory,
2.存储引擎比较
6.数据表基本操作
1.创建数据表:
CREATE TABLE table_name(
字段名 数据类型 [列级别约束条件] [默认值],
字段名 数据类型 [列级别约束条件] [默认值],
.
.
.
[表级别约束条件]
);
2.主键约束:
1.单字段之间:
1).定义列的同时指定主键
字段名 数据类型 PRIMAPY KEY[默认值]
2).定义完所有列指定之间
[CONSTRAINT<约束名>] PRIMARY KEY [字段名]
2.多字段主键:主键由多个字段联合组成
PRIMARY KEY[字段1,字段2, ... ,字段n]
2.外键约束:
[CONSTRAINT<外键名>] FOREIGN KEY 字段名1 [,字段名2, ...]
REFERENCES<主键名> 主键列1 [,主键列2, ...]
3.非空约束
字段名 数据类型 NOT NULL
4.唯一性约束
字段名 数据类型 UNIQUE
5.默认约束
字段名 数据类型 DEFAULT 默认值
6.自增属性
字段名 数据类型 AUTO_INCREMENT
7.查看数据表结构
1.查看数据表基本结构
//第一种方式
DESCRIBE table_name;
//第二种
DESC table_name;
2.查看数据表详细结构
SHOW CREATE TABLE table_name\G
3.修改数据表
1.修改表名
ALTER TABLE <table_name>RENAME <new_table_name>;
2.修改字段属性类型
ALTER TABLE <table_name>MODIFY<字段名> <数据类型>;
3.修改字段名
ALTER TABLE table_name CHANGE <旧字段> <新字段> <字段类型>
4.添加字段
ALTER TABLE table_name ADD <新字段> <数据类型>
[约束条件][FIRST|AFTER 已存在字段名]
5.删除字段
ALTER TABLE table_name DROP <字段名>
6.修改字段排序
ALTER TABLE table_name MODIFY <字段1> <数据类型> FLRST|AFTER <字段2>;
7.更改表的存储引擎
ALTER TABLE table_name ENGINE = <更改后的存储引擎名>;
8.删除表的外键约束
ALTER TABLE table_name DROP FOREIGN KEY <外键约束名>;
9.删除没有关联的表
DROP TABLE [IF EXISTS] 表1,表2, ... 表n;
4.MYSQL数据类型
1.整数类型:
TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT
数据类型 | 说明 | 存储需求 | 有符号的取值范围 | 无符号的取值范围 |
TINYINT | 很小的整数 | 1个字节 | -128 ~ 127 | 0 ~ 255 |
SMALLINT | 小的整数 | 2个字节 | -32768 ~ 32767 | 0 ~ 65535 |
MEDIUMINT | 中等大小的整数 | 3个字节 | -8388608 ~ 8388607 | 0 ~ 16777215 |
INT | 普通大小的整数 | 4个字节 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 |
BIGINT | 大整数 | 8个字节 | -9223372036854775808 ~ 9223372036854775807 | 0 ~ 18446744073709551615 |
2.浮点数类型
FLOAT,DOUBLE
数据类型 | 说明 | 存储需求 |
FLOAT | 单精度浮点数 | 4个字节 |
DOUBLE | 双精度浮点数 | 8个字节 |
3.定点数类型
DECIMAL
类型名称 | 说明 | 存储需求 |
DECIMAL | 压缩的“严格”定点数 | M+2个字节 |
4.时间/日期类型:
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:00 ~ 2038-01-19 03:14:01 | 4个字节 |
5.字符串类型:
CHAR,VARCHAR,BINARY,VARBINARY,BLOB,TEXT,ENUM,SET;
类型名称 | 说明 | 存储需求 |
CHAR | 固定长度非二进制字符串 | M个字节,1≤M≤255 |
VARCHAR | 变长非二进制字符串 | L+1个字节,在此L≤M和1≤M≤255 |
TINYTEXT | 非常小的非二进制字符串 | L+1个字节,在此L<2的八次方 |
TEXT | 小的非二进制字符串 | L+2个字节,在此L<2的十六次方 |
MEDIUMTEXT | 中等大小的非二进制字符串 | L+3个字节,在此L<2的二十四次方 |
LONGTEXT | 大的非二进制字符串 | L+4个字节,在此L<2的三十二次方 |
ENUM | 枚举类型,只能有一个枚举字符串值 | 1个或者2个字节,取决于枚举值的树木,最大为65535 |
SET | 一个集合,字符串对象可以有零个或者多个SET成员 | 1,2,3,4或8个字节,取决于集合成员的数量,最大为64个成员 |
插入值 | CHAR(5) | 存储需求 | VARCHAR(5) | 存储需求 |
'' | ' ' | 5个字节 | '' | 1个字节 |
'ab' | 'ab ' | 5个字节 | 'ab' | 3个字节 |
'abcd' | 'abcd ' | 5个字节 | 'abcd' | 5个字节 |
'abcde' | 'abcde' | 5个字节 | 'abcde' | 6个字节 |
'abcdefg' | 'abcde' | 5个字节 | 'abcde' | 6个字节 |
6.二进制类型:
BIT,BINARY,VARBINARY,TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB;
5.运算符
1.算数运算符
运算符 | 作用 |
+ | 加法运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算,返回商 |
% | 求余运算,返回余数 |
2.比较运算符
运算符 | 作用 |
= | 等于 |
<=> | 安全等于(可以比较NULL) |
<> (!=) | 不等于 |
<= | 小于等于 |
>= | 大于等于 |
< | 小于 |
> | 大于 |
IS NILL | 判断一个值是否为NULL |
IS NOT NULL | 判断一个值是否不为NULL |
LEAST | 当有两个或者多个参数时返回最小值 |
GREATEST | 当有两个或者多个参数时返回最大值 |
BETWEEN AND | 判断一个值是否落在两个值之间 |
IS NULL | 与IS NULL 相同 |
IN | 判断一个值是IN列表中的任意一值 |
NOT IN | 判断一个值不是IN列表中的任意一值 |
LIKE | 通配符匹配 |
REGEXP | 正则表达式匹配 |
3.位运算符
运算符 | 作用 |
| | 按位或 |
& | 按位与 |
∧ | 按位异或 |
<< | 按位左移 |
>> | 按位右移 |
~ | 按位取反,反转所以二进制位 |
4运算符优先级(按优先级由低到高排序)
运算符 |
=(赋值运算),:= |
||,OR |
XOR |
&&,AND |
NOT |
BETWEEN,CASE,WHEN,THEN,ELSE |
=(比较运算),<=>,>=,>,<=,<,<>,!=,IS.LIKE,REGEXP,IN |
| |
& |
<<,>> |
-,+ |
*,/,& |
∧ |
-(负号),~(按位取反) |
! |