数据库知识点总结1(针对MySQL)

数据库管理阶段的发展历程:

人工管理阶段、文件管理阶段、数据库管理系统阶段

层次模型:类似文件菜单,一级下面还有很多子文件夹(类似于树状)

网状模型:

关系模型:二维表的形式

关系:实体之间的关系

一对一、一对多、多对多、多对一

索引:提高查询效率,(但是也会增加数据库的空间,相当于以空间换时间)

SQL语句分类:

DDL(Data Definition Language):数据定义语言,定义对数据库对象(库、表、列、索引、约束)的操作。

CREATE、DROP、ALTER、RENAME、 TRUNCATE等

DML(Data Manipulation Language): 数据操作语言,定义对数据库记录的操作。

INSERT、DELETE、UPDATE、SELECT等

DCL(Data Control Language): 数据控制语言,定义对数据库、表、字段、用户的访问权限和安全级别。

GRANT、REVOKE等

Transaction Control:事务控制

COMMIT、ROLLBACK、SAVEPOINT等

--------------------------------------------------

DDL:对表结构的操作,增删改查

一个实体对应一个Java bean,一个实体就是一张表。

cmd中的命令:

desc 表名 ---用于查看表的字段信息,字段类型

show create table 表名 -----

列类型:包含数值类型、日期类型、字符串

常用类型

数值类型:

tinyint 1个字节

smallint 2个字节

bool -----tinyint的同义词

日期类型:

date

datetime

字符串:

text 长文本

varchar

----------------------------------------------------------

修改列类型

ALTER TABLE 表名 MODIFY 列名 列类型;

增加列

ALTER TABLE 表名 ADD 列名 列类型;

删除列

ALTER TABLE 表名 DROP 列名;

列改名

ALTER TABLE 表名 CHANGE 旧列名 新列名 列类型;

更改表名

ALTER TABLE 表名 RENAME 新表名;

RENAME TABLE 表名 TO 新表名;

删除表:

drop table 表名

约束:

NOT NULL非空

UNIQUE Key唯一键

PRIMARY KEY主键

FOREIGN KEY外键

CHECK检查

----------------------------

null值

所有数据类型的值都可以是NULL。

空字符串不等于NULL。

0也不等于NULL。

唯一约束:

唯一性约束条件确保所在的字段或者字段组合不出现重复值

唯一性约束条件的字段允许出现多个NULL

同一张表内可建多个唯一约束

唯一约束可由多列组合而成

建唯一约束时MySQL会为之建立对应的索引。

如果不给唯一约束起名,该唯一约束默认与列名相同。

主键约束:

主键从功能上看相当于非空且唯一(因为:主键要用来唯一标识一个字段,如果主键为空或者不唯一,不符合逻辑)

一个表中只允许一个主键

主键是表中唯一确定一行数据的字段

主键字段可以是单字段或者是多字段的组合

当建立主键约束时,MySQL为主键创建对应的索引

外键约束

格式:FOREIGN KEY (外键列名) REFERENCES 另外一个表的表名(参照列)

外键包含非空约束,但不包含唯一约束

为什么外键最好是另一个表的主键?

例子:

CREATE TABLE tb_dept(

dept_id INT PRIMARY KEY,

NAME VARCHAR(18),

description VARCHAR(255)

);

CREATE TABLE tb_employee(

employee_id INT PRIMARY KEY,

NAME VARCHAR(18),

gender VARCHAR(10),

dept_id INT REFERENCES tb_dept(dept_id),

address VARCHAR(255)

);

注意:有一些框架固定要用id作为主键,(如)否则会找不到主键

-----------------------------------------------------------------------------------------

作业中遇到的一些问题总结:

作业06

第5题:

DB2是关系型数据库,IMS是层次型数据库,都是由IBM公司开发的

第3题:

 Mysql中自带的前端工具是workbeach

-----------------------------------------------------------------------------------

--------------------------------------------------------------------------------------

数据库操作语言:DML

单表操作:

主要是查询和修改(增加insert、修改update、删除delete都是修改)

插入:

insert into my_student(id,name,age,gender) values (1,'cxk',24,m); //单条数据插入

insert into my_student values (1,'cxk',24,m),(2,'xxk',24,m),(3,'cxc',24,f);//批量插入

查询:

select *from student; //select* from 表名; 查询表中所有字段

select 列名1,列名2,列名3 from 表名; //查询指定列

注意:insert, update, delete 之间不能嵌套,也不能和select嵌套

delete from 表名; //删除的是表的数据,表还在

drop table 表名;//删除的是整个表

查l询为空:用 is null 而不是= null

模糊查询:like '张_' //查询姓张并且名字为两个字符的,_代表占一个字符

ike '张%' //查询所有姓张的,不管‘张’后面还有几个字符

排序:

order by

注意:null在排序中时是最小的

select * from my_student limit 2 查询前两条

select * from my_student limit 0,2 ;//查询从0开始的两条

select* from my_student limit 2,2 //分页

--------------------------------------------------

多表查询:

外连接:

左外连接(左连接):A 表 left (outer) join B表 on ...

右外连接(右连接): A表 right (outer) join B表 on...

内连接:

A表 inner join B表 on ...

自然连接:

交叉连接:交叉连接是不带WHERE 子句的多表查询,它返回被连接的两个表所有数据行的笛卡尔积

全连接:

MySQL不支持全连接,所以只能采取关键字UNION来联合左、右连接的方法。

SELECT * FROM class a RIGHT OUTER JOIN t_studentnew b ON a.class_id = b.s_id UNION SELECT * FROM class a LEFT OUTER JOIN t_studentnew b ON a.class_id = b.s_id;

子查询(嵌套查询):

SELECT class.class_name FROM class WHERE class.class_id IN(SELECT student.student_class_id FROM student WHERE student_name LIKE "%强");

聚合函数:

AVG() 返回某列的平均值

COUNT() 返回某列的行数

MAX() 返回某列的最大值

MIN() 返回某列的最小值

SUM() 返回某个列之和

分组查询:

group by

group_concat() //查看对哪些数据进行了分组

group by + group_concat() :

group_concat(字段名)可以作为一个输出字段来使用,

分组之后,根据分组结果,使用group_concat()来放置每一组的某字段的值的集合

SELECT GROUP_CONCAT(student_name),student_class_id from student GROUP BY student_class_id;

group by + 聚合函数:

SELECT student_class_id,AVG(student_math_score)AS avg_score FROM student GROUP BY student_class_id;

group by + having

having 条件表达式:用来分组查询后指定一些条件来输出查询结果

having作用和where一样,但having只能用于group by

SELECT student_class_id,AVG(student_math_score)AS avg_score FROM student GROUP BY student_class_id HAVING student_class_id>1;

--------------------------------------------------------------------------------

MySQL系统函数

ABS(x)  返回x的绝对值

RAND() 0-1的随机数

ROUND(x,y) 返回参数x的四舍五入的有y位小数的值

MOD(x,y) 返回x/y的模(余数)

PI() 返回pi的值(圆周率)

SQRT(x) 返回一个数的平方根

GREATEST(x1,x2,...,xn) 返回集合中最大的值

LEAST(x1,x2,...,xn) 返回集合中最小的值

ASCII(str)   返回字符串的ASCII码

CONCAT(str1,str2,...) 将给定字符串拼接

LENGTH(str) 返回给定字符串长度

LEFT(str,len) 返回给定字符串最左len个字符

RIGHT(str,len) 返回给定字符串最右len个字符

SUBSTRING(str,pos) 字符串str的起始位置pos返回一个子串

REVERSE(str) 将str顺序反转

LOWER(str) Str转为小写

UPPER(str) Str转为大写

CURTIME() 功能: HH:MM:SS或HHMMSS返回当前时间值

NOW() 功能:YYYY-MM-DD HH:MM:SS’或YYYYMMDDHHMMSS

CURDATE() 功能:YYYY-MM-DD’或YYYYMMDD

WEEKDAY(date) 功能:返回日期的星期索引(0开始)

DAYOFYEAR(date) 功能: 返回给定日期的天数

注意:

对哪个字段进行限制,having 后面跟的是分组的字段

MySQL中字符串可以用单引号,也可以用双引号,SQLserver中字符串只能用单引号,

MySQL中限制行数查询用limit,SQLserver中查看前几条记录用top,

MySQL可以用limit分页

发布了81 篇原创文章 · 获赞 25 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_43090158/article/details/95084027