SQL语言基础
SQL全称:
sql的意思是:结构化查询语言。
SQL是用来访问和处理数据库的标准的计算机语言。
SQL的特点:
- 具有综合统一性,不同数据库支持的sql稍有不同
非过程话语言
语言简捷,用户容易接受
以一种语言结构提供两种使用方式
SQL对关键字的大小写不敏感
- 建议:关键字
大写
,表名,字段名小写
;
SQL语句可以单行或多行书写,以分号;符结束
SQL的注释:
- 单行注释
-- 空格
或#
- 多行注释
/* 文本 */
MYSQL语法示例:
-- 查询有哪些数据库:
show databases;
-- 指定操作数据库:
use 数据库名字;
-- 查看数据库中有哪些表:
show tables;
-- 查看表结构:
desc 表名;
-- 查看表数据库:
select * from 表名;
mysql需要掌握的知识点
- 基本操作
- 单表操作
- 多表操作
- 窗口函数
- 视图
- 索引
- 存储过程
- 触发器
- 事务
- 索引
- 锁机制
- 日志
- 存储引擎
- SQL优化
- JDBC
- Pymysql
一.为什么要使用数据库
-
- 为了方便查询数据
-
- 为了持久保存数据
二.数据库的相关概念
- DB 数据库,保存数据的容器
- DBMS 数据管理系统.
- 银行业一般使用Oracle和DB2.
- DB2 是IBM的数据库产品.
关系型数据库中的关系是什么意思
数据库关系就是个二维表
什么是表?
—表
就是类
类
里的每一行就是实体(实例化)
;
字段
就是列
;
记录
就是行
;
实体
还是行
。
实体有多少个属性?
https://www.formysql.com/wenti/lanwei-shuxing.html
三.数据库存储数据的特点
一个系统
有多个数据库
,一个数据库
里有多张表
。
表
是放在数据库
里面的;
数据
是存放在表
里面的;
一个数据库
里面的表名
是唯一
的;
数据里面列名
称之为字段
;
表中数据是以行
的形式存放;
数据类型:
https://www.jianshu.com/p/672049b65691
数据类型的区别
就是取值范围
.
支付类
项目必须关注小数点精确度
.
普通支付项目中float
类型就可以了.
定义数据类型可以过大
,但不能过小
,
在选择数据类型时应当考虑冗余
.
实际项目中手机号码
使用VARCHAR(M)
类型;
示例:
字段名称 | 数据类型 | 备注 |
---|---|---|
姓名 | varchar(20) 或char(16) | 可变字符串–20位 |
地址 | varchar(200) | 可变字符串–200位 |
电话号码 | varchar(11) | 可变字符串–11位 |
年龄 | int(3) | 整数–3位 |
出生日期 | date | 日期 |
照片 | image | 二进制数据 |
薪水 | money 或decimal/numeric(12,2) | 普通项目用flot 类型;DECIMAL 定点小数类型 ;numeric 精确数字数据类型,指定精确到多少位 |
# id 整数
# name 名字 字符串16位
# age 年龄 整数
# gender 性别 字符串10位
# birthday 生日 日期
# city 城市 16位
create table user(id int,name char(16), age int, gender char(10), birthday date, city varchar(16));
DECIMAL
定点小数类型
参考:https://www.yiibai.com/mysql/decimal.html
-- 精确
-- DECIMAL(P,D)表示列可以存储D位小数的P位数。十进制列的实际范围取决于精度和刻度。
DEC(P,D)
amount DECIMAL(有效数字位数,小数位数);
数字类型:有符号和无符号
在MySQL
中,数字类型
的默认类型
是有符号
的。
无符号
数字:不能是负数
在MySQL
中,数字类型
可以是有符号
或无符号
的。有符号
的数字类型
可以表示正数
、负数
或零
,而无符号
的数字类型
只能表示非负数
或零
。
下面是MySQL
中常用的数字数据类型
及其表示范围
:
数字类型 | 有符号的范围 | 无符号的范围 |
---|---|---|
TINYINT | -128 到127 | 0 到255 |
SMALLINT | -32768 到32767 | 0 到65535 |
MEDIUMINT | -8388608 到8388607 | 0 到16777215 |
INT | -2147483648 到2147483647 | 0 到4294967295 |
BIGINT | -9223372036854775808 到9223372036854775807 | 0 到18446744073709551615 |
创建一个有符号的 INT 列:
当您创建表时,必须指定数字列的数据类型和是否为有符号或无符号。例如,
CREATE TABLE mytable (
id INT SIGNED
);
创建一个无符号的 BIGINT 列:
当您创建表时,必须指定数字列的数据类型和是否为有符号或无符号。例如,
CREATE TABLE mytable (
id BIGINT UNSIGNED
);
数据库引擎
MYSQL默认的数据库引擎就是InnoDB
;
https://blog.csdn.net/omaidb/article/details/130206111
数据库的标识符
数据库中所有涉及到人工命名
的都是标识符
。
比如: 数据库名
、表名
、索引名
、列名
、别名
、视图名
、存储过程名
、分区名
、表空间名
、都是标识符
数据库名
、表名
和列名
都不能
以空格
结束- 标识符可以使用
引号
引起来,也可以不用引起来
,但是如果包含特殊字符
和关键字
,必须
使用引号引起来
,标识符的引用符是反引号('
')`
-- 创建一个名为select的表
-- select是系统默认关键字,向创建这个表,需要使用双引号因起来
CREATE TABLE "select"(id INT, name VARCHAR(10));
-- 向select表中插入数据
-- select是系统默认关键字,使用这个表名要使用反引号引起来
insert into `select` values(1,'a');
数据库schema和catalog简介
数据库 schema
和 catalog
是数据库中两个不同但相关的概念。
Schema
:指数据库中包含的一组表
或对象
的集合,用于将数据库中的不同数据部分进行逻辑上的分组。一个数据库可以包含多个schema
,每个schema
可以包含多个表
、视图
、存储过程
等。- 在
MySQL8
中,Catalog
是用来存储数据库元数据(metadata)
的地方,也就是说,Catalog
是一个信息库
,它存储了关于整个数据库
(包括其中的schema
)的信息,如表的数量
、列的数量
、索引的数量
以及其他统计信息
等。 - 在
MySQL8
中,每个schema
都有一个相应的Catalog
,用于存储其元数据
。
在简单的术语中,schema
就像一个文件夹
,其中包含许多文件(即表
);而 catalog
就像一个目录
,其中包含有关这些文件(即对象
)的详细信息
。
从概念上来说:
一个数据库系统包含多个Catalog
,每个Catalog
又包含多个Schema
,而每个Schema
又包含多个数据库对象
(表
,视图
,字段
等),反过来讲一个数据库
必然属于一个Schema
,而该Schema
又必然属于一个Catalog
,这样我们就可以得到该数据库对象的完全限定名称
,从而解决命名冲突
等问题了,例如数据库对象的完全限定名称
就可以表示为:
Catalog名称.Schema名称.表名称
注意:SQL标准并不要求
每个数据库对象的完全限定名称是唯一
的,就像一个IP可以绑定多个域名。
从实现的角度来看,各种数据库系统对Catalog
和Schema
的支持和实现方式千差万别,针对具体问题需要参考具体的产品说明书,比较简单而常用
的方式是使用数据库名
作为Catalog
名,使用用户名
作为Schema
名,具体可参见下表:
产品名 | Catalog支持 | Schema支持 |
---|---|---|
Oracle | 不支持 | Oracle User ID |
MySQL | 不支持 | 数据库名 |
MS SQL Server | 数据库名 | 对象属性名,2005版开始有变 |
DB2 | 指定数据库对象时,Catalog部分省略 | Catalog属主名 |
Sybase | 数据库名 | 数据库属主名 |
Infomix | 不支持 | 不需要 |
PointBase | 不支持 | 数据库名 |