目录
SQL语句是什么
SQL语句又叫做结构化查询语言,程序员通过编写SQL语句,如何数据库否则执行SQL语句,最终完成数据库中数据的增删改查操作。学习数据库其实就是对SQL语句的学习。
SQL语言的分类
SQL语言有很多,对命令进行分门别类,这样更容易记忆,
- DQL
- 表示数据查询语言(凡是带有select关键字的都是查询语句)
- select...
- SQL中DQL语句(查询)_HHYZBC的博客-CSDN博客https://blog.csdn.net/HHYZBC/article/details/125190904
- DML
- 表示数据操作语言(凡是对表当中的数据进行增删改的都是DML)
- insert...
- 增
- deletr...
- 删
- updata...
- 改
- SQL中DML语句(数据操作语言)_HHYZBC的博客-CSDN博客_sql的dml中核心的操作语句https://blog.csdn.net/HHYZBC/article/details/125191912
- DDL
- 表示数据定义语言(凡是带有creata、drop、alter的都是DDL)
- DDL操作的是表的结构。不是表中的数据
- creata...
- 新建,等同于增
- drop...
- 删除
- alter...
- 修改
- SQL中DDL语句(数据表定义语言)_HHYZBC的博客-CSDN博客_sql的ddl语句https://blog.csdn.net/HHYZBC/article/details/125191824
- TCL
- DCL
- 表示数据控制语言
- grant
- 授权
- revoke
- 撤销授权
数据处理函数(单行处理函数)
数据处理函数又被称为单行处理函数
单行处理函数的特点:一个输入对应一个输出。
和单行处理函数相对的是:多行处理函数。(多行处理函数特点:多个输入,对应1个输出!),具体下面会写。
- 常见的单行处理函数
- lower()
- 转换小写
- lower(被处理的字符串)
- upper()
- 转换大写
- upper(被处理的字符串)
- substr()
- 截取
- (substr( 被截取的字符串, 起始下标,截取的长度))
- 这里的起始下标为1.
- concat()
- 拼接字符串
- concat(字符串1,字符串2)
- 字符串2会接到字符串1的后面
- length()
- 取长度
- length(数据)
- trim()
- 去空格
- trim(被处理的字符串)
- str_to_date()
- 将字符串转换成日期
- str_to_date('字符串日期', '日期格式')
- mysql的日期格式:
%Y 年
%m 月
%d 日
%h 时
%i 分
%s 秒 - 如果字符串日期的格式是%Y-%m-%d,则可以不使用这个函数,MySQL会自动进行转换
- date_format()
- 日期格式转换为字符串类型
- date_format(日期类型数据, '日期格式')
- format()
- 设置千分位
- format(数字, '格式')
- 格式需要在前面加一个$号
- round()
- 四舍五入
- round(值,保留位数)
- 保留位数可以是负数,假如为-1时,则会保留到十位,以此类推。
- rand()
- 生成随机数
- 生成的随机数都是整数部分为0的小数。
- 如果需要取100以内的随机数,可以将生成的随机数*100.
- ifnull()
- 可以将 null 转换成一个具体值
- ifnull(数据, 被当做哪个值)
- ifnull是空处理函数。专门处理空的。在所有数据库当中,只要有NULL参与的数学运算,最终结果就是NULL。
- now()
- 获取当前时间
- lower()
分组函数(多行处理函数)
多行处理函数的特点:输入多行,最终输出一行。
常用的分行处理行数
- count()
- 计数
- sum()
- 求和
- avg()
- 平均值
- max()
- 最大值
- min()
- 最小值
- 注意:
- 分组函数在使用的时候必须先进行分组,然后才能用。如果你没有对数据进行分组,整张表默认为一组。
- 分组函数自动忽略NULL,你不需要提前对NULL进行处理。
- 分组函数中count(*)和count(具体字段)有什么区别?
- count(具体字段):表示统计该字段下所有不为NULL的元素的总数。
- count(*):统计表当中的总行数。(只要有一行数据count则++)。因为每一行记录不可能都为NULL,一行数据中有一列不为NULL
- 分组函数不能够直接使用在where子句中。
- 因为分组函数在使用的时候必须先分组之后才能使用。而在where中出现的话,这个时候还没有分组。
搜索引擎
mysql支持九大存储引擎,当前5.5.36支持8个。版本不同支持情况不同。
可以使用:show engines 查看有哪些搜索引擎,需要了解的搜索引擎只有3种:
MyISAM存储引擎
它管理的表具有以下特征:
使用三个文件表示每个表:
格式文件 — 存储表结构的定义(mytable.frm)
数据文件 — 存储表行的内容(mytable.MYD)
索引文件 — 存储表上索引(mytable.MYI):索引是一本书的目录,缩小扫描范围,提高查询效率的一种机制。
可被转换为压缩、只读表来节省空间
MyISAM存储引擎特点:
可被转换为压缩、只读表来节省空间
这是这种存储引擎的优势!!!!
MyISAM不支持事务机制,安全性低。
InnoDB存储引擎
这是mysql默认的存储引擎,同时也是一个重量级的存储引擎。
InnoDB支持事务,支持数据库崩溃后自动恢复机制。
InnoDB存储引擎最主要的特点是:非常安全。
它管理的表具有下列主要特征:
– 每个 InnoDB 表在数据库目录中以.frm 格式文件表示
– InnoDB 表空间 tablespace 被用于存储表的内容(表空间是一个逻辑名称。表空间存储数据+索引。)
– 提供一组用来记录事务性活动的日志文件
– 用 COMMIT(提交)、SAVEPOINT 及ROLLBACK(回滚)支持事务处理
– 提供全 ACID 兼容
– 在 MySQL 服务器崩溃后提供自动恢复
– 多版本(MVCC)和行级锁定
– 支持外键及引用的完整性,包括级联删除和更新
InnoDB最大的特点就是支持事务:
以保证数据的安全。效率不是很高,并且也不能压缩,不能转换为只读,
不能很好的节省存储空间。
MEMORY存储引擎
使用 MEMORY 存储引擎的表,其数据存储在内存中,且行的长度固定,
这两个特点使得 MEMORY 存储引擎非常快。
MEMORY 存储引擎管理的表具有下列特征:
– 在数据库目录内,每个表均以.frm 格式的文件表示。
– 表数据及索引被存储在内存中。(目的就是快,查询快!)
– 表级锁机制。
– 不能包含 TEXT 或 BLOB 字段。
MEMORY 存储引擎以前被称为HEAP 引擎。
MEMORY引擎优点:查询效率是最高的。不需要和硬盘交互。
MEMORY引擎缺点:不安全,关机之后数据消失。因为数据和索引都是在内存当中。
对于SQL语句来说,是通用的,
所有的SQL语句以“;”结尾。mysql是不见“;”不执行,“;”表示结束!,
另外SQL语句不区分大小写,都行。
注意:在所有的数据库当中,字符串统一使用单引号括起来,
单引号是标准,双引号在oracle数据库中用不了。但是在mysql
中可以使用。
再次强调:数据库中的字符串都是采用单引号括起来。这是标准的。
双引号不标准。
在数据库当中null不能使用等号进行衡量。需要使用is null
因为数据库中的null代表什么也没有,它不是一个值,所以不能使用
等号衡量。
其他命令
登录数据库
- mysql -uroot -p
查看当前使用的数据库
- select database();
只看表的结构,有一个命令:
- desc 表名;
显示当前时间
- select now();
退出数据库
- exit/quit/ctr+d
- 使用任意一个即可
查看所有数据库
- show databases;
创建数据库
- create database 数据库名 charset=编码格式;
- 编码格式一般为utf8即可
使用数据库
- use 数据库名;
删除数据库
- drop database 数据库名;
查看当前数据库中所有表
- show tables;
查看表结构
- desc 表名;
查看创表SQL语句
- show create table 表名;
查看创库SQL语句
- show create database 数据库名;
查看约束
-
select * from information_schema.TABLE_CONSTRAINTS where TABLE_NAME="表名";
- 表示指定表内的约束名,where可以省略,表示查看全部的约束名
- 红色的表示约束名,黄色的表示约束