本文是数据库基础内容的学习记录。
一、数据库简介
1、什么是数据库
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
2、数据库的作用
- 实现数据共享
- 减少数据的冗余度
- 数据的独立性
- 数据实现集中控制
- 数据的一致性和可维护性,以确保数据的安全性和可靠性
二、SQL
结构化查询语言
1、数据库操作语言(DML)
- SELECT
- UPDATE
- DELETE
- INSERT INTO
2、数据库定义语言(DDL)
创建和删除数据库或者表格,也可以定义索引,规定表之间的连接以及施加表间的约束。
- CREATE DATABASE 创建数据库
- ALTER DATABASE 修改数据库
- CREATE TABLE 创建新表
- ALTER TABLE 修改新表
- DROP TABLE 删除表
- DROP DATABASE 删除数据库
- CREATE INDEX 创建索引
- DROP INDEX 删除索引
三、常用SQL语句
1、CREATE语句
create table <表名> ( |
完整性约束
约束条件 | 说明 |
---|---|
PRIMARY KEY | 标识该属性为该表的主键,可以唯一标识对应的元组 |
FOREIGN KEY | 标识该属性为该表的外键,是与之联系的某表的主键 |
NOT NULL | 标识该属性不能为空 |
UNIQUE | 标识该属性的值是唯一的 |
AUTO_INCREMENT | 标识该属性的值自动增加,这是MySQL语句的特色 |
DEFAULT | 为该属性设置默认值 |
2、ALTER、DROP语句
(1)更改表中字段
增加列:
alter table <表名> add <列名> <数据类型> [列的完整性约束] |
删除列:
alter table <表名> drop <列名> |
(2)删除表
drop table <表名> |
3、INSERT语句
insert into <表名> (<列名1>,<列名2>,<列名3>) values (<常量1>,<常量2>,<常量3>) |
4、UPDATE、DELETE语句
update <表名> set <列名1>=<表达式1>,<列名2>=<表达式2> where <条件> |
delete from <表名> where <条件> |
5、SELECT语句
select |
常用查询条件:
查询条件 | 谓词 |
---|---|
比较 | =,>,<,>=,<=,!=,<>,!>,!< |
确定范围 | BETWEEN AND,NOT BETWEEN AND |
字符匹配 | LIKE,NOT LIKE |
确定集合 | IN,NOT IN |
空值 | IS NULL, IS NOT NULL |
多重逻辑(逻辑运算) | AND,OR,NOT |
查询结果排序:
order by <字段名1>,<字段名2> asc | desc |
按照升序排序,含有空值的数据将在最后显示;
按照降序排序,含有空值的数据将在最先显示。
6、DROP、DELETE、TRUNCATE命令比较
- DROP是从数据库中删除表的定义(表的结构)以及它所有的数据;
- DELETE删除表中所有的行,删除后的表中尽管没有数据,但表的定义结构仍然存在
- TRUNCATE它与DELETE命令的作用相同,只是执行速度更快,DELETE每次删除一行,并将每一条删除行计入数据库事务日志;而TRUNCATE删除表中的所有数据,几乎不记录日志,与DELETE不加WHERE条件功能相同,效率比DELETE高,但是删除是永久性的,不能回滚。
7、连接查询
- inner join
- left join
- right join
- full join
(1)内连接
只有结果中包含根据连接谓语(on后面的语句)所匹配的行,不包含那些不匹配的行。
select * from students.name inner join teachers.name on students.teacherId = teachers.Id |
(2)左外连接
左外连接是返回那些存在于左表而右表中却没有的行加上内连接的行,那些来自左表的未匹配的行会保留。
select * from students.name left join teachers.name on students.teacherId = teachers.Id |
(3)右外连接
右外连接是返回那些存在于右表而左表中却没有的行加上内连接的行,那些来自右表的未匹配的行会保留。
select * from students.name right join teachers.name on students.teacherId = teachers.Id |
(4)全外连接
左外和右外的结合。
select * from students.name full join teachers.name on students.teacherId = teachers.Id |
四、SQL开发规范
1、禁止使用distinct,去重语句全部使用group by实现;
2、在关联表或进行子查询时,要先用条件优先对表进行过滤,再做下一步操作;
3、做完数据库操作后要commit;
4、禁止使用select * from table
,用具体的列名代替*
,不要返回用不到的列;
5、select的显示列与group by的列,必须将一致最多的列放到最前面,即由多到少排列;
6、能用union all,不允许使用union。用union all或union合并结果集时where条件要写到最里层语句中,以求结果集最小。
7、在SQL除法计算中必须先判断分母是否为0,根据分母是否为零分别进行计算;
8、注意where条件中字段a!=1或a!=’’,获得的结果集会同时过滤掉a is null的情况;
9、禁止使用SQL语句实现行列转换;
10、在SQL标准中,NULL与数据计算结果仍为NULL,因此在计算前需要先处理计算项为NULL的情况。