SQL
SQL语言(结构化查询语言)又分为:
DDL(数据定义语言)用来管理库(新建、删除)、管理表(新建表、修改表结构、删除表)
DML(数据维护语言)数据的增删查改
DCL(数据控制语言) 新建一个用户/给拥护授权(管理)
主键和唯一键
- 主键:用来标识每条记录的唯一字段,每个信息都有主键,用来唯一标识一条信息, 可以是一个字段,可以是多个字段组成(复合主键)
- 在 InnoDB 的引擎下,数据在硬盘存储是按照主键的排序方式存储的, 为了避免中间插入主键,通常建议把主键设置成一个永远递增、永不修改的值;
- 主键不允许为空/主键不允许重复;
- 每个表上都有一个主键,通常用自增字段作为主键
相似的点:
- 主键和唯一键都不允许重复
不同点:
- 主键不允许为空,唯一键允许为空
- 存储上,数据的存储是按照主键递增顺序保存的,唯一键,看作另外有一套数据结构(比如set里面有唯一的一个key,通过key,可以找到对应的value值)
外键
- 外键:是为了处理多表之间的约束关系
- 外键的意义:为了让一张表发生变化,而和它产生关系的另一张表感受到这个变化,就需要增加外键来保持这种关系,也就是说,你删字段的时候,通知别人一声。
主键和索引的区别?
所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致,数据库在设计时,主键起到了很重要的作用。
区别:
- 主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键是一个特殊的索引;
- 主键一定是唯一性索引,唯一性索引并不一定就是主键 ;
- 一个表中可以有多个唯一性索引,但只能有一个主键;
- 主键列不允许空值,而唯一性索引列允许空值。
数据库如何设计表结构?
- 确定需求及需求边界
- 确定有哪几类数据 (找对象,也就是找明确的实体)
- 找关系(一对一、一对多、多对多)
- 确定属性(主键、外键)
- 确定每个字段的数据类型及其他约束
- 可以有优化的进阶部分
关于查询需要注意的点
select后面是筛选列
where子句是筛选行的
order by 是对前面已经筛选出来的行和列进行一波排序显示 ASC(升序) DESC(降序)
limit 是对排序后的结果再取一个截断
distinct(列名) 去重
select * from 表名,通常不建议使用select * from 表名进行全列查询,原因是:
1.查询的列越多,意味着需要传输的数据量越大;
2.可能会影响到索引的使用(命中问题);
3.因为查询语句跟表的结构是绑定着的,如果某一天表的结构发生变化,而此时代码没有更改,就会出现一些代码错误,所以不建议select*