第一章:
启动数据库:net star mysql 服务名
停止数据库:net stop mysql 服务名
登录MySQL:mysql – hlocalost -P3306 -u root -p
查看数据库下所有表:show databases;
切换数据库:use 数据库;
查看某个数据库下所有表:show tables;
展示表结构:desc 表名;
创建数据库:create database 数据库名称;
删除数据库:drop database 数据库名称;
创建数据表:create table 数据表名称;
SQL语句分类:
1.DDL(数据定义语言)sreate drop alter truncate
2.DQL(数据查询语言)select show
3.DML(数据操作语言)insert update delete
数据库类型:
1.整型
2.浮点型
3.字符型
4.布尔型
5.日期型
(其中布尔型的char是固定长度字符,varchar是可变长度字符串)
图片类是二进制,用的数据类型是blob类型。
银行记录资金用的数据类型是double类型。
第二章:
数据完整性的概念:
数据的完整性是指数据的精确性和可靠性。他的目的是为了防止数据库中存在不符合语义规定的数据或者因错误信息的输入而造成无效的操作。
数据完整性:
1.实体完整性(Entyty Integrity)
2.域完整性(Domain Integrity)
3.引用完整性(Referential Integrity)
4.用户自定义完整性(User-difined Integrity)
实体完整性:1.主键约束 2.唯一约束
域完整性:1.外键约束 2.默认值约束 3.非空约束
引用完整性:MySQL中的引用完整性是通过外键约束来实现的。
使用主键约束要求:每张表只能由一个主键,主键列的数据唯一,并且不允许为空(not null)。
在MySQL中主键分为:单字段主键和多字段主键。
在定义列的同时设置主键:字段名 数据类型 primary key
在定义完成所有列之后设置主键:primary key(字段名)
设置多个字段为主键(联合主键):primary key(字段1,字段2,字段3,…,字段N)
设置表的字段为自动增长:字段名 数据类型 auto_increment primary key
在设置自动增长(auto_increment)时需要遵从以下规则:
1.一个表中只能有一个字段使用auto_increment
2.auto_increment必须做为主键的一个部分(只有主键可以设置),不得单独使用。
3.auto_increment的数据类型必须为整数类型。
约束:
外键约束:
外键约束——将⼀个列添加外键约束与另⼀张表的主键(唯⼀列)进⾏关联之后,这个外键约束的列添加的数据必须要在关联的主键字段中存在。
非空约束:
限制数据表中的此列的值必须提供。
唯一约束:
在表中的多条数据,此列的值不能重复。
数据库设计:
6大阶段:
1.需求分析阶段
2.概念结构设计阶段
3.逻辑结构设计阶段
4.数据库物理设计阶段
5.数据库实施阶段
6.数据库允许与维护阶段
4个步骤:
1.收集信息
2.标志实体
3.标志实体之间的关系
4.标志实体之间的联系
E-R图:
矩形:代表实体
椭圆:代表属性
菱形:代表实体之间的关系
映射基数:
1:1(一对一,一本书对应一个同学)
1:N(一对多,一本书对应多条借阅记录)
N:1(多对一,多条记录对应一本书)
M:N(多对多,图书与借阅者之间的关系)
3条规范:
1.1NF(第一范式)表中的每个字段小到不能再拆分
2.2NF(第二范式)表中的每个字段与主键相关
3.3NF(第三范式)表中的字段都与主键直接相关。
第三章:
插入数据:在指定表中插入数据
语法:
insert into 表名(字段名1,字段名2…)
values(value1,value2….);
修改数据:对数据表中已经添加的记录进⾏修改
语法:
update 表名 set columnName = value[where conditions]
删除数据:从数据表中删除满⾜特定条件(所有)的记录
语法:
delete from 表名 [where conditions];(记录日志)
truncate删除数据不记录日志
条件查询:
where子句限制查询结果
distinct消除重复行
limit限定查询返回行
使用orderby进行查询排序:
升序排列:asc
降序排列:desc
内置函数:
字符串函数
日期函数
数学函数
系统函数
模糊查询:
— 查学生信息表中姓张的同学
SELECT studentname from studentinfo WHERE studentname LIKE ‘张%’;
— 差名字中带有信字的同学的姓名,年龄,省份
SELECT studentname,age,province FROM studentinfo WHERE studentname LIKE ‘%信%’;
— 查姓名为两个字的姓张的同学
SELECT*FROM studentinfo WHERE studentname LIKE ‘张_’;
— 查姓名为三个字的姓张的同学
SELECT*FROM studentinfo WHERE studentname LIKE ‘张__’;
— 查姓名为两个字的结尾为新并且是两个字的同学
SELECT*FROM studentinfo WHERE studentname LIKE ‘_信’;
— 查询所有同学的平均年龄
SELECT avg(age) FROM studentinfo;
— 查询学号为20200912的同学的所有成绩的平均分
SELECT avg(exam) FROM exam WHERE studentid = ‘20200912’;
— 查询某校区总共有多少名学生
SELECT COUNT() from studentinfo; — count()不会排除为null的记录
SELECT COUNT(age) from studentinfo; — 指明某个字段将会排除为空记录
— 查询某校区男声有多少人
SELECT COUNT(*) from studentinfo WHERE gender = ‘男’;
— 查年龄最大的同学的年龄是多少
SELECT max(age) FROM studentinfo;
— 查年龄最小的同学的年龄是多少
SELECT min(age) FROM studentinfo;
— 查询课程表中课时最多的课时数是多少
SELECT max(credithour) FROM subject;
— 学号为20200912的同学的所有成绩的总分
SELECT SUM(exam) FROM exam WHERE studentid = ‘20200912’;
在MySQL中可以使⽤join实现多表的联合查询——连接查询,join按照其功能不同分为
三个操作:
inner join 内连接
left join 左连接
right join 右连接
内连接 inner join
select … from tableName1 inner join tableName2 ON 匹配条件 [where 条件];
左连接 LEFT JOIN
显示左表中的所有数据,如果在有右表中存在与左表记录满⾜匹配条件的数据,则进⾏匹配;如果右表中不存在匹配数据,则显示为Null
语法:
select * from leftTabel LEFT JOIN rightTable ON 匹配条件 [where 条件];
显示左表中的所有记录:
select * from students LEFT JOIN classes ON students.cid = classes.class_id;
右连接 RIGHT JOIN
— 右连接 :显示右表中的所有记录
select * from students RIGHT JOIN classes ON students.cid = classes.class_id