数据库基础知识
数据库基础概念
(1)数据库(Database,简称DB):数据库是存放数据的仓库,是长期储存在计算机内、有组织有结构的、可共享的数据集合。
(2)数据库管理系统(Database Management System,简称DBMS):数据库管理系统是为数据库的建立、使用和维护而配置的数据库管理软件,它位于用户与操作系统之间,以保证数据库的安全性和完整性。如MySQL就是DBMS。
(3)数据库应用系统(Database Application Systems,简称DBAS):数据库应用系统是基于数据库的应用软件,例如QQ、微信、淘宝、股票信息系统、学生管理系统、财务管理系统等。DBAS由两部分组成,分别是数据库和应用程序。数据库由数据库管理系统创建,二应用程序可以由任何支持数据库编程和程序设计语言编写,如Java、C#\PHP等语言。
数据库系统的构成图
SQL语言的组成
1.数据查询语言(Data Query Language,DQL)主要用于查询数据。
例如,使用SELECT语句可以查询数据库中的一条数据或多条数据。
2.数据操作语言(Data Manipulation Language,DML)主要用于对数据进行添加、修改和删除操作。
例如,INSERT语句、UPDATE语句、DELETE语句。
3.数据定义语言(Data Definition Language,DDL)主要用于定义数据库、表等。
例如,CREATE语句、ALTER语句、DROP语句等。
4.数据控制语言(Data Control Language,DCL)主要用于控制用户的访问权限。
例如,GRANT语句、REVOKE语句、COMMIT语句、ROLLBACK语句。
SQL语言的主要特点
1.SQL语言功能强大,风格统一,直观简捷,易学易用
SQL语言集四类功能语言于一体,可以独立完成数据库生命周期中的全部活动,包括建立数据库、定义关系模式、录入数据、查询、更新、维护数据、数据库重构、数据库安全性控制等一系列操作要求,这为数据库应用系统开发提供了良好的环境,例如用户在数据库投入运行后,还可根据需要随时地逐步地修改模式,并不影响数据库的运行,从而使系统具有良好的可扩充性。
2.高度非过程化
非关系数据模型的数据操纵语言是面向过程的语言,用其完成某项请求,必须指定存取路径。而用SQL语言进行数据操作,用户只需提出“做什么”,而不必指明“怎么做”,因此用户无需了解存取路径,存取路径的选择以及SQL语句的操作过程由DBMS自动完成,这不但大大减轻了用户负担,而且有利于提高数据独立性。
3.面向集合的操作方式
SQL语言采用集合操作方式,不仅查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。非关系数据模型采用的是面向记录的操作方式,任何一个操作其对象都是一条记录,例如查询所有平均成绩在80分以上的学生姓名,用户必须说明完成该请求的具体处理过程,即如何用循环结构按照某条路径一条一条地把满足条件的学生记录读出来。
4. 既是自含式语言,又是嵌入式语言,以同一种语法结构提供两种使用方式
作为自含式语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL命令对数据库进行操作;作为嵌入式语言,SQL语句能够嵌入到高级语言(例如C#、JAVA、PHP)程序中,供程序员设计程序时使用。而在两种不同的使用方式下,SQL语言的语法结构基本上是一致的,这种以统一的语法结构提供两种不同的使用方式的作法,为用户提供了极大的灵活性与方便性。
MySQL的常用命令
命令 | 简写 | 具体含义 |
---|---|---|
? | (\?) | 显示帮助信息 |
clear | (\c) | 清除当前输入语句 |
connect | (\r) | 连接到服务器,可选参数数据库和主机。 |
delimiter | (\d) | 设置语句分隔符。 |
ego | (\G) | 发送命令到mysql服务器,并显示结果。 |
exit | (\q) | 退出MySQL |
go | (\g) | 发送命令到mysql服务器。 |
help | (\h) | 显示帮助信息 |
notee | (\t) | 不能将数据导出到文件中 |
(\p) | 打印当前命令 | |
prompt | (\R) | 改变mysql提示信息。 |
quit | (\q) | 退出MySQL |
rehash | (\#) | 重建完成散列,用于表名自动补全。 |
source | (\.) | 执行一个SQL脚本文件,以一个文件名作为参数。 |
status | (\s) | 从服务器获取MySQL的状态信息。 |
tee | (\T) | 设置输出文件,将所有信息添加到给定的输出文件。 |
use | (\u) | 选择一个数据库使用,参数为数据库名称。 |
charset | (\C) | 切换到另一个字符集 |
warnings | (\W) | 每一个语句之后显示警告。 |
nowarning | (\w) | 每一个语句之后不显示警告。 |
MySQL数据类型
整数型
数据类型 | 字节数 | 无符号数的取值范围 | 有符号数的取值范围 |
---|---|---|---|
TINYINT | 1 | 0~255 | -128~127 |
SMALLINT | 2 | 0~65535 | -32768~32767 |
MEDIUMINT | 3 | 0~16777215 | -8388608~8388607 |
INT | 4 | 0~4294967295 | -2147483648~2147483647 |
BIGINT | 8 | 0~18 446 744 073 709 551 615 | -9 223 372 036 854 775 808~ 9 223 372 036 854 775 807 |
无符号数据类型:使用unsigned关键字修饰,取值范围不包含负数。
示例:“int”有符号int类型;“int unsigned”无符号int类型。
浮点数型和定点数型
数据类型 | 字节数 | 无符号数的取值范围 | 有符号数的取值范围 |
---|---|---|---|
FLOAT | 4 | 0 和 1.175 494 351E-38 ~ 3.402 823 466E+38 | -3.402 823 466E+38 ~ -1.175 494 351E-38 |
DOUBLE | 8 | 0 和 1.797 693 134 862 315 7E+308 | -1.797 693 134 862 315 7E+308 ~ -2.225 073 858 507 201 4E-308 |
DECIMAL(M,D) 或DEC(M,D) | M+2 | 0 和 1.797 693 134 862 315 7E+308 | -1.797 693 134 862 315 7E+308 ~ -2.225 073 858 507 201 4E-308 |
1.在MySQL中使用浮点数类型和定点数类型来表示小数,浮点数类型包括单精度浮点数(float
型)和双精度浮点数(double型),定点数类型就是decimal型;
2.m为全长(小数点和符号不计),d为小数点后长度, m和d又称为精度和标度;
3.decimal型的取值范围与double相同,但是decimal的有效取值范围由m和d决定,而且decimal型的字节数是m+2,即定点数的存储空间是根据其精度决定的。
日期和时间型
数据类型 | 字节数 | 取值范围 | 日期格式 | 零值 |
---|---|---|---|---|
YEAR | 1 | 1901~2155 | YYYY | 0000 |
DATE | 4 | 1000-01-01~9999-12-3 | 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 |
YEAR型格式:4位字符串或数字,如输入'2020'或 2020,插入到数据'或'20200121',插入数据库中的日期都为2020-01-21。 日期中的分隔符“-”,还可以用“.”“,”“/”等符号替代。
TIME型格式:字符串'HH:MM:SS'、'HHMMSS'或数字 HHMMSS,例如:输入'34:54:54'、'345454'或345454,插入数据库中的时间为:34:54:54(34小时54分54秒) ;特殊格式: 'D HH:MM:SS',D表示日,可以取 0~34 之间的值,插入数据时,小时的值等于 D×24+HH。例如:输入'2 11:30:50',插入数据库中的时间为59:30:50
DATETIME型格式1:'YYYY-MM-DD HH:MM:SS'或'YYYYMMDDHHMMSS'或
YYYYMMDDHHMMSS 。例如:输入'2014-01-22 09:01:23' 或 '20140122090123'或
20140122090123,插入数据库中的值都为 2014-01-22 09:01:23
DATETIME型格式2:'YY-MM-DD HH:MM:SS'或'YYMMDDHHMMSS'或
YYMMDDHHMMSS,YY取值范围为 '00'~'99' ('00'~'69' 范围的值会被转换为2000~2069范围的值,'70'~'99' 范围的值会被转换为1970~1999范围的值)。例如:插入'14-01-22 09:01:23' 或 '140122090123'或140122090123 ,插入数据库中的都为 2014-01-
22 09:01:23
TIMESTAMP(时间戳)型格式:与DATETIME相同,但取值范围比DATETIME小。特别注意:当无任何输入,或输入NULL时,实际保存的是系统当前日期和时间。
系统函数 | 应用 |
---|---|
NOW() | 获取当前系统的日期和时间 |
CURRENT_TIMESTAMP | |
CURDATE() | 获取当前系统日期 |
CURRENT_DATE | |
CURTIME() | 获取当前系统时间 |
CURRENT_TIME |
字符串型
字符串型 | 存储范围 | 类型说明 |
---|---|---|
CHAR | 0-255字符 | 固定长度字符串 |
VARCHAR | 0-65535 字节 | 可变长度字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
BIT | 1-64个bit | 用来存储bit值:0或1 |
BINARY | 0-255字节 | 固定长度的二进制文本数据 |
VARBINARY | 0-65535字节 | 可变长度的二进制文本数据 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
LOGNGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
CHAR类型和VARCHAR类型
基本语法:列名称 char(L) 或varchar(L)
语法说明:L表示字符串的最大长度,即最大字符数(中文与英文字母一样)。实际需要多少存储空间(字节数)取决于所使用的字符集,一个英文字母或常用字符通常占用一个字节,一个中文在gbk编码方式占用2个字节、在utf8编码方式占用3个字节的空间。
char:存储固定长度的字符串,如果字符串长度不足L,则存储时在右边填充空格补齐,以达到指定长度L。
varchar :存储可变长度的字符串,长度可以在0到L之间变化,存储时需要额外增加一个或两个字节存储字符串长度,超过255的长度需要额外增加2个字节。
char和varchar后面如果有空格:char会自动去掉空格后存储,但取值时会把存值后面的空格去除掉;varchar存储时不会去掉空格,取值时后面有空格会保留,但在进行字符串比较时,会去掉空格进行比较。
相同点:在存储或检索过程中都不进行大小写转换。
BINARY和VARBINARY类型
binary和varbinary类型类似于char和varchar,不同的是它们存储的是二进制字节字符串。
基本语法:列名称 binary(L) 或者 varbinary(L)
语法说明:L表示字符串的最大长度,即最大字节数。实际存储时,一个英文字母或常用字符通常占用一个字节,一个中文占用3个字节。
binary:存储固定长度的字符串,如果不足最大长度L,则存储时在右边填充"\0"补齐,以达到指定长度L。例如,指定列数据类型为binary(3),当插入a时,实际存储的值为"a\0\0",当插入ab时,实际存储的值为"ab\0",无论插入的值是否达到指定的长度,实际存储空间均为指定的长度。
varbinary:存储可变长度的字符串,长度可以在0到L之间变化,实际存储空间为插入值的实际长度加1或2,超过255的长度加2。例如,指定列数据类型为varbinary(10),如果插入的值长度只有6,则实际存储空间为6加1。
TEXT、BLOB和BIT(位)类型
blob是一个二进制大对象,可以容纳可变数量的数据;有4种blob类型,它们只是可容纳值的最大长度不同。有4种text类型,这些对应4种blob类型,有相同的最大长度和存储需求。
text与blob均为大数据类型:当内容很多的时候,会保留一个指针在记录中,这个指针指向了磁盘中的一块区域;
text只能储存纯文本文件,blob可以储存图片、声音文件等二进制数据;
在大多数情况下,可以将text列视为varchar列,可以将blob列视为足够大的varbinary列。 而varbinary常用于存放小图标。
bit列存储的值只有0和1;如果手工指定bit值,则可以使用b'value'格式,比如b'111'和 b'10000000'分别代表7和128。
标签:语句,00,01,字节,数据库,基础,MySQL,长度 From: https://blog.csdn.net/2301_82066425/article/details/139773433