DDL、DML、DQL、DCL
DDL(Data Definition Language):数据定义语言
CREATE TABLE 表名 (
列名1 数据结构,
列名2 数据类型,
列名3 数据类型,
...
)
ALTER 表名 ADD/CHANGE 列名 数据类型
DROP TABLE 表名
DROP DATABASE 数据库名
TRUNCATE table 表名
DML(Data Manipulation Language):数据操纵语言
INSERT INTO 表名 (字段1,字段2,...) values (某值,某值,...),(某值,某值,...);
UPDATE 表名 SET 列名=新值 WHRER 限定条件
DELETE FROM 表名 WHERE 限定条件
DQL (Data Query Language) : 数据查询语言
SELECT 列名 FROM 表名 WHERE 限定条件
DCL(Data Control Language): 数据控制语言
GRANT(授权)
REVOKE(取消授权)
数据库的三范式
第一范式:字段不可分。强调的是列的原子性,即数据库中的每一列都是不可分割的原子数据项
第二范式:有主键,非主键字段依赖主键。要求实体的属性完全依赖于主关键字。
第三范式:非主键字段不能相互依赖,任何非主属性不依赖于其他非主属性
什么是关系型数据库?
关系型数据库是建立在关系模型上的数据库,关系模型表明了数据库中所存储的数据之间的联系(一对一,一对多,多对多),关系型数据库中的各种数据都存放在了各种表中,表中的每一行就存放着一条数据(比如用户的信息)
char 和 varchar 的区别
在MySQL中,CHAR和VARCHAR都是用来存储字符串的数据类型,但它们之间存在一些重要的差异。以下是它们之间的主要区别:
- 存储方式:
-
- CHAR是固定长度的,而VARCHAR是可变长度的。这意味着,如果你为一个CHAR字段定义了长度为10,那么不论你实际存储的字符串长度是多少,MySQL都会为这个字段分配10个字符的空间。
- VARCHAR字段则会根据实际存储的字符串长度来分配空间,最大可以存储65535字节。
- 性能:
-
- 对于经常变化或长度不定的字符串,使用VARCHAR可以节省存储空间,因为只有实际存储的数据才会占用空间。
- CHAR在某些情况下可能更快,因为它不需要在行之间移动来适应不同长度的数据。
- 空格处理:
-
- CHAR会自动去除字段值右侧的空格。
- VARCHAR则不会。
- 适用场景:
-
- 如果你知道某个字段的长度是固定的,或者长度变化很小,那么使用CHAR可能更合适。
- 如果字段的长度变化很大,或者你不确定长度,那么使用VARCHAR可能更合适。
- 存储需求:
-
- CHAR需要1个字节来存储长度信息(对于每个字符),而VARCHAR需要2个字节。
- 排序和比较:
-
- 由于CHAR是固定长度的,所以对于这种类型的数据,MySQL可以进行更快的排序和比较操作。
选择哪种类型取决于你的特定应用和数据。一般来说,如果你的数据长度变化不大,且性能是关键因素,那么CHAR可能是一个更好的选择。如果你需要节省存储空间并且数据的长度变化很大,那么VARCHAR可能更适合你。
DELETE、DROP、TRUNCATE 区别
MySQL中的DELETE、DROP和TRUNCATE是用于管理数据库的命令,但它们的功能和使用场景存在明显的区别。
- DELETE:
-
- DELETE是一个标准的SQL语句,用于从数据库表中删除记录。
- 使用DELETE语句时,你可以指定一个条件来删除满足特定条件的记录。
- DELETE操作是事务安全的,这意味着你可以使用事务来回滚删除操作。
- DELETE语句会记录在事务日志中,这会影响性能,尤其是当删除大量数据时。
- DROP:
-
- DROP语句用于删除整个表。
- 使用DROP会删除表的结构、数据以及与表相关的索引、触发器等。
- DROP操作是不可逆的,一旦执行,表和其相关数据将被永久删除。
- DROP操作通常比其他操作更快,因为它不记录在事务日志中。
- TRUNCATE:
-
- TRUNCATE语句用于删除表中的所有记录,但保留表的结构和定义。
- 与DELETE不同,TRUNCATE不会记录在事务日志中,因此执行速度通常更快。
- TRUNCATE会重置自增字段的计数器,这是与DELETE的另一个重要区别。
- TRUNCATE操作不可回滚,除非你使用的是支持事务的存储引擎(如InnoDB)。
总结:
- 如果你只想删除某些记录,应该使用DELETE语句。
- 如果你想完全删除整个表(包括其结构),则应该使用DROP语句。
- 如果你想快速删除所有记录并重置自增字段,那么TRUNCATE可能是最佳选择。
在使用这些命令之前,务必备份重要数据,并确保你了解每个命令的后果。
DATETIME 和 TIMESTAPM 区别
- DATETIME 占 8 个字节 1000 - 9999年
- timestamp占 4 个字节:1970年 - 2037年
NULL 和 '' 的区别
- NULL 不能作为判断相等的条件,但是DISTINCT,group by, order by NULL又被认为是相等的
- '' 不占空间, NULL 占空间
- NULL 会影响聚合函数的结果,例如 sum,avg,min, max 等聚合函数会忽略null值。count 的处理方式取决于参数的类型,如果count(*) 会统计包含null的记录数,如果count(列名) ,则不统计带null的数据
- 查询NULL值,不能使用比较运算符,只能使用 is null , is not null
事务的ACID
- 原子性(A): 事务被视为一个不可回滚的原子操作,要么全部执行成功,要么全部执行失败
- 一致性(C):事务执行前后,数据的一致性约束没有被破坏
- 隔离性(I):并发事务之间互相不影响,互不干扰
- 持久性(D):已经提交的事务对数据库所做的更新必须永久保存,即便发生崩溃,也不能丢失数据
SQL 查询循序
- from ,join
- where
- group by
- having
- select
- distinct
- order by
从哪张表,关联什么,where 过滤,分组,having,select,去重,排序