SQL基础
1、数据库基础
数据库(DB):保存有组织的数据的容器
1.1 保存数据的容器
主要包括
- 数组、集合(内存):断电数据易失
- 文件、文件夹(外存、硬盘):不易查询
- 数据库:保存有组织的数据的容器
1.2 使用数据库的好处
-
易于实现数据的持久化
-
易于查询
-
数据的共享性高、冗余性低
-
有较高的数据独立性
数据独立性:指应用程序与数据库的数据结构之间相互独立,体现为:逻辑独立性与物理独立性。由数据库的三级模式、两层映像结构保证
-
有统一的数据控制功能
1.3 基本术语
- 数据库DB:保存有组织的数据的容器,长期存储在计算机内、有组织、可共享的大量数据的集合
- 数据库管理系统DBMS:又称数据库软件,是位于用户与操作系统之间的一层数据管理软件,数据库是通过DBMS创建和操纵的。
- 数据库系统DBS:由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成
- 数据库管理员DBA:操作数据库软件的成员
1.4 表、行、列、主键
1.4.1 表(table)
定义:某种特定类型数据的结构化清单,即一种结构化的文件,用来存储某种特定类型的数据。
关键:数据都是存放在表中,表再放到库中。
注意:
- 存储在表中的数据可以是一种类型的数据,或一个清单(包含多种数据类型的数据)
- 表名:每个表都有唯一的名字,用来标识自己。
- 同一个数据库不能两次使用相同的表名,不同的数据库可以使用相同的表名
1.4.2 列(column)、数据类型
列(字段):表由字段组成。
每一列都存储着一条特定的信息(事物的一个属性),如:学生表,一个列存储学号,一个列存储姓名…
每个列都由相同的数据类型,数据类型定义列可以存储的数据种类
1.4.3 行(row)
行:表中的一个记录。表中的数据都是按行存储的,表中的行数为记录的总数。
行=记录=元组,用来描述一个具体的事物。
1.4.4 主键(primary key)
表中的每一行都应该有可以唯一标识自己的一列(或一组列),即主键。
注:主键是一列,其值可以唯一的区分每个行。即主键能唯一标识事物的信息。
- 任意两行都不能有相同的主键值
- 每一行都必须有一个主键值,主键列不允许出现null值
2、 什么是SQL
SQL:结构化查询语言,专门用来与数据库进行通信的语言
2.1 SQL的优点
- 简单易学。所有语句都是由简单的英语单词组成,且单词数目不多
- SQL不是某个特定数据库的专用语言。几乎所有的DBMS都支持SQL
- SQL是一种强有力的语言,可进行非常复杂和高级的数据库操作
2.2 SQL语言分类
-
DQL数据查询语言:用于数据的查询
- 查询:SELECT
-
DML数据操纵语言:用于添加、删除、修改、查询数据库记录,并检查数据完整性
- 添加(插入):INSERT、修改(更新):UPDATE、删除:DELETE
-
DDL数据定义语言:用于逻辑结构(库、表、视图、索引)的创建、修改、删除
- 创建:CREATE、修改:ALTER、删除:DROP
-
DCL数据控制语言:用于定义用户的访问权限和安全级别
- 授权:GRANT、取消权限:REVOKE、提交:COMMIT、回滚:ROLLBACK
3、SQL数据类型
3.1 整型
数据类型 | 字节 |
---|---|
TinyInt | 1 |
SmallInt | 2 |
MediumInt | 3 |
Int | 4 |
BigInt | 8 |
设置无符号
CREATE TABLE tab_int (
t1 INT,#默认 有符号
t2 INT UNSIGNED #无符号
);
#若插入的数据超出临界值,则会报错误
INSERT INTO tab_int VALUES(12312331231,1111111111);
#有符号INT默认长度为11,无符号INT默认长度为10
3.2 浮点型 \定点型
3.2.1 浮点型
FLOAT | 4 |
---|---|
DOUBLE | 8 |
3.2.2 定点型
DECIMAL(M,D) | M+2 |
---|
M代表 小数+整数的最大总长度(有效长度),D代表 保留几位小数
测试
CREATE TABLE tab_flo (
t1 FLOAT(5 , 2 ),
t2 DOUBLE(5 , 2 ),
t3 DECIMAL(5 , 2 )
);
SELECT * FROM tab_flo;
INSERT INTO tab_flo VALUES(123.45,123.45,123.45);
INSERT INTO tab_flo VALUES(123.456,123.456,123.456);
INSERT INTO tab_flo VALUES(123.4,123.4,123.4);
INSERT INTO tab_flo VALUES(12.45,12.45,12.45);
INSERT INTO tab_flo VALUES(1234.45,1234.45,1234.45);#Error Code: 1264. Out of range value for column 't1' at row 1
结果:
3.3 字符型
使用char 和varchar 存储较短的字符串
字符串类型 | 最多字符数 | 存储需求 | 说明 |
---|---|---|---|
CHAR(M) | M 默认为1 | M为0-255之间的整数 | 固定长度的字符串 |
VARCHAR(M) | M 不可省略 | M为0-65535之间的整数 | 可变长度的字符产 |
ENUM | 存储枚举数据 | ||
SET |
3.4 日期型
数据类型 | 说明 |
---|---|
DATE | 格式:YYYY-MM-DD |
TIME | 格式:HH:MM:SS |
DATETIME | DATE与TIME的组合 |
TIMESTAMP | 功能与DATETIME相同,但范围较小 |
3.5 二进制
BLOB | 主要用于存储声音、图像 |
---|
4、SQL变量
4.1 分类
- 系统变量:系统提供的,属于服务器层面,有默认值
- 全局变量 GLOBAL
- 会话变量 SESSION
- 自定义变量:用户自定义的
- 用户变量:当前会话有效
- 局部变量:仅仅在其定义它的begin end中有效
4.2 使用语法
4.2.1 系统变量的使用
#查看所有的系统变量
SHOW VARIABLES;
#查看所有的全局变量
SHOW GLOBAL VARIABLES;
#查看所有的会话变量
SHOW SESSION VARIABLES;
#查看指定的某个系统变量值
SELECT @@autocommit;
SELECT @@global.autocommit;
SELECT @@session.autocommit;
#为某个具体的系统变量复制
SET GLOBAL autocommit = 0;
SET @@autocommit = 1;#默认为session级别
#等价
SET @@session.autocommit = 1
4.2.2 自定义变量的使用
#用户变量声明并初始化
SET @用户变量名 :=值;
SELECT @用户变量名 :=值;
#赋值
SET @name = 值;#赋的值是什么类型,该用户变量就是什么类型
#或
SELECT 字段 INTO @用户变量名 FROM 表;
#例:将个数赋值个@count
SELECT COUNT(*) INTO @count FROM employees;
#查看
SELECT @用户变量名;
#局部变量
#声明
DECLARE 变量名 类型;
#初始化
DECLARE 变量名 类型 DEFAULT 初始值;
#赋值
SET 局部变量名 = 值;
SELECT 字段 INTO 用户变量名 FROM 表;
4.3 注意
- 更改的全局变量在其他的sql连接中,依然有效。
- 服务器每次启动都将会为全局变量赋初始值,针对所有的会话(连接)都有效。但不能跨重启
- 会话变量 仅在当前的会话有效,而全局变量针对所有的会话都有效
- 局部变量 只能声明在begin end块中的第一句
- 用户变量加@,不限制类型 局部变量不用加@,须限制变量类型