1.数据库的概念
数据库就像一个储存容器,他是一个存储和管理数据的一个仓库。
数据库的优点如下:
- 存储的数据量很大
- 方便检索
- 保持数据的一致性、完整性
- 安全、可共享
- 通过组合分析,可以产生新数据
我们现在用的mysql数据库都是属于关系结构模型的数据库;他们是使用二维表来存储数据,可能随着技术的发展将来mysql可能会升级为新的方式来存储数据,比如关系-对象性数据库。
我们所说的数据库都是泛指关系型数据库管理系统(RDBMS),即数据库服务器。
RDBMS= 数据库管理员(manager)+仓库(database);
数据库仓库里面可以有多个数据库,数据库一共由多张表组成,表里面存在表结构,这里的表结构指的是定义表的的列名与列类型。
还有一个概念表记录指的是表中一行一行的数据。
2.sql语句
sql语句就是“结构化查询语言”,它可以对关系型数据库的操作语言。
SQL可以用在所有关系型数据库中,但很多数据库还都有标准之后的一些语法,我们可以称之为“方言”。例如MySQL中的LIMIT语句就是MySQL独有的方言,其它数据库都不支持!当然,Oracle或SQL Server都有自己的方言。
语法要求
- SQL语句可以单行或多行书写,以分号结尾;
- 可以用空格和缩进来来增强语句的可读性;
- 关键字不区别大小写,建议使用大写;
SQL数据类型
MySQL与Java一样,也有数据类型。MySQL中数据类型主要应用在列上。
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
数值类型:
类型 | 大小 | 有符号(SIGNED)范围 | 无符号(UNSIGNED)范围 | 描述 |
---|---|---|---|---|
TINYINT | 1byte | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2bytes | (-32768,32767) | (0,65535) | 大整数值 |
MEDIUMINT | 3bytes | (-8388608,8388607) | (0,16777215) | 大整数值 |
INT | 4bytes | (-2147483648, 2147483647) | (0,4294967295) | 大整数值 |
BIGINT | 8bytes | (-263,263-1) | (0,2^64-1) | 大整数值 |
FLOAT | 4bytes | (-3.402823466 E+38, 3.402823466351 E+38) | 0 和 (1.175494351 E- 38,3.402823466 E+38) | 单精度浮点数值 |
DOUBLE | 8bytes | (-1.7976931348623157E+308,1.7976931348623157E+308) | 0 和(2.2250738585072014E-308,1.7976931348623157E+308) | 双精度浮点数值 |
DECIMAL | 依赖于M(精度)和D(标度) 的值 |
字符串类型
类型 | 大小 | 描述 |
---|---|---|
CHAR | 0-255 bytes | 固定长字符串(需要指定长度) |
VARCHAR | 0-65535 bytes | 变长字符串(需要指定长度) |
TINYBLOB | 0-255 bytes | 不超过255个字符的二进制数据 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
char 如果你输入的字符长度没有达到指定长度的话会自动补空格。
而varchar这里如果你输入的字符长度没有达到指定长度的话,他是不会补空格的,所以一般都是使用varchar
日期时间类型:
类型 | 大小 | 范围 | 格式 | 描述 |
---|---|---|---|---|
DATE(常用) | 3 | 1000-01-01 至 9999-12-31 | yyyy-MM-dd | 日期值 |
TIME | 3 | -838:59:59 至 838:59:59 | hh:mm:ss | 时间值 |
YEAR | 1 | 1901 至 2155 | yyyy | 年份值 |
DATETIME(常用) | 8 | 1000-01-01 00:00:00 至9999-12-31 23:59:59 | yyyy-MM-dd hh:mm:ss | 日期加时间 |
TIMESTAMP | 4 | 1970-01-01 00:00:01 至2038-01-19 03:14:07 | yyyy-MM-dd hh:mm:ss | 日期加时间 |
sql的分类
- DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
- DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
- DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
- DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
sql字符集编码
字符集与排序规则:
字符集:
- utf8: utf8 编码最⼤字符长度为 3 字节,如果遇到 4 字节的宽字符就会插⼊异常了,比如Emoji表情,就无法使用utf8存储,推荐使用utf8mb4
- utf8mb4: mb4即most bytes 4,专门用来兼容四个字节即以上的unicode, 在Mysql在5.53版本之后
排序规则:
- utf8mb4_bin:将字符串每个字符⽤⼆进制数据编译存储,区分⼤⼩写,⽽且可以存⼆进制的内容。推荐使用
- utf8mb4_general_ci:ci即case insensitive,不区分⼤⼩写。没有实现Unicode排序规则,在遇到某些特殊语⾔或者字符集,排序结果可能不⼀致。但是,在绝⼤多数情况下,这些特殊字符的顺序并不需要那么精确。
- utf8mb4_unicode_ci:是基于标准的Unicode来排序和⽐较,能够在各种语⾔之间精确排序,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。
- utf8mb4_general_ci是⼀个遗留的 校对规则,不⽀持扩展,它仅能够在字符之间进⾏逐个⽐较。
- utf8_general_ci校对规则进⾏的⽐较速度很快,但是与使⽤ utf8mb4_unicode_ci的校对规则相⽐,⽐较慢