1.查看MySQl数据库编码
- show variables like 'char%';
2.编码解释 - character_set_client:MySQL使用该编码来解读客户端发送过来的数据,例如该编码为utf-8,如果客户端发送过来不是UTF-8那么就会出现乱码
- character_set results:MySQL会把数据转换成该编码后,再发送给客户端,例如该编码为UTF-8,那么如果客户端不使用UTF-8来解读,那么就会出现乱码
3.控制台乱码问题
- 插入或修改时出现乱码
- 查询出的数据为乱码
- 设置变量的语句
4.指定默认编码
备份与恢复
1.数据库导出SQL脚本
mysqldump -u用户名 -p密码 数据库名>生成的脚本文件路径
2.执行SQL脚本
第一种方式
mysql -u用户名 -p密码 数据库<脚本文件路径
第二种方式
登录mysql
source SQL脚本路径
数据库 -->sql:备份
sql -->数据库:恢复
约束
- 约束是添加在列上的,用来约束列的
1.主键约束(唯一标识)
非空
唯一
*****被引用*****
当表的某一列被指定为主键后,该列就不能为空,不能有重复的值出现
创建表时制定主键的两种方式
create table stu(
sid char(6) primary key,
sname varchar(20),
age int
);
指定sid列为主键列,即为sid列添加主键约束
primary key(sid)
指定sid列为主键列,即sid列添加主键约束
修改表时指定主键,alter table stu ADD primary key(sid);
删除主键:alter table stu DROP primary key;
2.主键自增长
因为主键列的特性是:必须唯一,不能为空,所以我们通常会指定主键类为整形,然后设置自动增长,这样可以保证在插入数据时主键的唯一和非空特性。
创建表时指定主键自增长
sid INT PRIMARY KEY ATUO_INCREMENT
3.非空约束
因为某些列不能设置为null值,所以可以对列添加非空约束
sname varchar(20) not null
4.唯一约束
车库某些列不能设置重复的值,所以可以对列添加唯一约束
sname varchar(20) not null unique
5.概念模型
当我们要完成一个软件系统时,需要把系统中的实体抽取出来,形成概念模型。
列如部门,员工都是系统中的实体。概念模型中的实体最终会成为java中的类,数据库中表
实体之间还存在着关系,关系有三种
1对多:例如每个员工都从属一个部门,而一个部门可以有多个员工,其中员工是对方,而部门是一方
1对1:例如老公和老婆就是一对一的关系,一个老公只能有一个老婆,而一个老婆只能有一个老公。
多对多:老师与学生的关系就是多对多,一个老师可以有多个学生,一个学生可以有多个老师
概念模型在java中成为实体类(javabean)
类就使用成员变量来完成关系,一般都是双向关联!
多对一双向中关联,即员工关联部门,部门也关联员工
6.多表查询
1.分类: - 合并结果集(了解)
- 链接查询
- 子查询
合并结果集 - 要求被合并的表中,列的类型和列数相同
- union 去除重复行
- union all 不去除重复行
slecet * from cd
union all
selcet * from sb;
7.连接查询
1.分类 - 内连接
- 外连接
左外连接
右外连接
全外连接(MySQL不支持)
- 自然连接(属于一种化简方式)
2.内连接 - 方言:select * from 表1 别名1 ,表2 别名2 where 别名1.xx=别名2.xx
- 标准:select * from 表1 别名1 inner join 表2 别名2 on 别名1.xx=别名2.xx
- 自然:select * from 表1 别名1 narural join表2 别名2
- 内连接查询出的所有记录都满足条件
3.外连接 - 左外:select * from 表1 别名1 left outer join 表2 别名2 on 别名1.xx=别名2.xx
左表记录无论是否满足条件都会查询出来,而右表只有满足条件才能查询出来。左表中不满足条件的记录,右表部分都为null
右外:selcet * from 表1 别名1 right outer join 表2 别名2 on 别名1.xx=别名2.xx
全链接:可以使用union来完成全链接
子查询
查询中有查询(查看select关键字的个数!)
1.出现的位置: - where后作为条件存在
-
from后作为表存在(多行多列)
2.条件