数据库基础知识
-
需要掌握一定的商业知识
-
建模:程序流程图、数据流程图DFD、时序图、状态图
-
软件开发阶段:系统规划、系统分析、系统实施、运行维护、测试阶段
-
E-R图:由实体、属性、关系组成
-
实体间的关系:基数、元、关联
-
使用关联的情况:
- 两个实体间的关系存在自身的属性
- 实体间存在多元关系
-
表的主键:不能重复而且不能为空。例如 学号、身份证号,如果不能从已有字段中提取出一个字段、可以自己设置一个没有实际意义的字段
-
外键 的使用
-
约束条件:主键(primary key)约束、外键(foreign key)约束、唯一性(unique)约束、 默认值(default)约束、非空(not NULL)约束、检查(check)约束
-
创建表时,先创建父表,再创建字表; 字表的外键字段与父表的主键字段的 数据类型相同
-
选数据类型:数据类型越简单越好 尽量用整数代替字符串 所以主键用整数插询效 率较高 存储IP地址时也可以用整数
-
为了支持中文简体 字符集设置为gbk 为了支持外键约束 存储引擎设置为InnoDB
-
复制表格:
- create table 新表名 like 原表;
- create table 新表名 select *from 原表
-
修改字段信息:
- 删除字段:alter table 表名 drop 字段名
- 添加字段名:alter table 表名 新字段名数据类型【约束条件】【first|after 就字段名】
- 修改字段名:alter table 表名 change 旧字段名 新字段名 数据 类型
- 修改数据类型:alter table 表名 modify 字段名 数据类型
-
插入新纪录:insert into 表名【(字段列表)】 values(值列表)注意:向char varchar text 以及日期型的字段插入数据时,字段值要用单引号括起来
-
批量插入多条记录:insert into 表名【(字段列表)】 values(值列表1)、(值列表2)、…;
-
修改表记录:update 表名;Set 字段名 1=值1,字段名2=值2…【where条件表达式】(while子句指定了表中的哪些记录需要修改,若省略了where子句,则表示 修改表中的所有记录)
-
删除表:delete from 表名【where 条件表达式】Select语句:
-
Select字段列表(“,分隔” 用“as”关键字分隔)From 数据源【where 条件表达式】【group by 分组字段【having 条件表达式】】【order by 排序字段【asc|desc】】(数据源可以是表也可以是视图)(asc升序 desc降序)(多表查询的时候,同名字字段前必须加表名前缀,中间用“.”)
-
过滤记录:
- distinct 过滤结果集中的重复记录;Distinct 字段名 from 数据源
- limit查询某几行记录。Select 字段列表 From 数据源 Limit 【start,】length;(limit接受一个或两个整数参数,start表示从第几行记录开始检索,length表示检索多少行记录。表中第一行记录的start值为0(不是1))
-
使用from子句指定数据源(两种)
- 其中一种语法:From 表名1 【连接类型】 join 表名2 on 表1和表2之间的连接条件
- 内连接
- 外链接(左连接,右连接)。例如:左连接 意味着查询结果集中包含表1的全部记录 ,然后表1按指定的连接条件与表2进行连接。若表2中没有满足连接条件的记录,则结果集中表2相应的字段填入NULL
- 其中一种语法:From 表名1 【连接类型】 join 表名2 on 表1和表2之间的连接条件
-
多表连接:from 表1 【连接类型】 join 表1 on 表1和表2之间的连接条件,【连接类型】 join 表3 on 表2和表3的连接条件
-
NULL与NULL不能使用等比较运算符比较。可以用 is not 或者not
-
逻辑运算符:“and” “or” “!” “【not】..and..” “【not】in 数学集合”
-
字符串表达式 【not】 like 模式 (可以理解为一个正则表达式)字符集设置为gbk_chinese_ci或者 gbk2312_chinese_ci 模式匹配时英文字母不区分大小写,而设置为gbk_bin或者gbk_2312_bin时要区分(模式是一个字符串,包括普通字符和通配符)通配符:“%” 匹配零个或多个字符组成的任意字符串_(下划线) 匹配任意一个字符
-
order by 字段名1 【asc|desc】 【…,字段名n 【asc|desc】
-
Group by子句对记录分组统计Group by 字段列表【 - having 条件表达式】 【with rollup】单独用group by意义不大 一般与聚合函数集合 (看例子)
-
group by子句与having
- Having用于设置分组或聚合函数的过滤筛选条件
- 在select语句 先对where进行筛选 接着group by子句对where的输出分组,最后having子句从分组的结果中再进行筛选。语法:Select 字段列表 From 数据源 Where 条件表达式 Group by 分组字段 having 条件表达式
-
group by子句与group_concat()
- group_concat()与concat()有一个功能相同,另外还可以用逗号将字段的值连接起来(看例子)
-
group by
- With rollup函数 在分组最后添加一条汇总信息