什么是数据库
存储数据的仓库
本质上是一个文件系统,还是以文件的方式存在服务器的电脑上的。
所有的关系型数据库都可以使用通用的
SQL
语句进行管理
为什么要使用数据库?
持久化存储,安全稳定,存储量大,存储的数据多样性 查找方便,效率高
mysql 修改密码:
1.以管理员的身份打开DOS
2.将mysql服务停掉-->net stop mysql;
3.在my.ini文件中的 mysqld下面加入 skip-grant-tablees并保存
4.重新以管理员身份打开DOS命令
5.启动mysql服务 net start mysql
6.use mysql
7.update user(mysql) set password = password("密码") where user ="root";
8.刷新列表 flush preivilges;
9.将my.ini文件中的skip-grant-tablees注释掉(#skip-grant-tablees) 并保存文件
10.重新打开DOS 使用新密码登录;
什么是 SQL?
Structured Query Language
结构化查询语言
是一种所有关系型数据库的查询规范,不同的数据库都支持。
通用的数据库操作语言,可以用在不同的数据库中。
不同的数据库
SQL
语句有一些区别
SQL 语句分类
Data Control Language(DCL
数据控制语言
)
,如:对用户权限的设置
Data Definition Language (DDL
数据定义语言
)
如:建库,建表
Data Manipulation Language(DML 数据操纵语言),如:对表中的记录操作增删改
Data Query Language(DQL 数据查询语言),如:对表中的查询操作
SQL语句中不区分大小写,
关键字
中认为大写和小写是一样的
DDL 操作数据库
创建数据库
create database 数据库名;
判断数据库是否已经存在,不存在则创建数据库
create database if not exists 数据库名
;
创建数据库并指定字符集
create database mldn character set utf8;
删除数据库
drop database数据库名;
判断数据库是否已经存在,不存在则创建数据库
drop database if exists 数据库名
修改数据库默认编码
alter database 数据库名 default character set gbk;
查看创建的数据库信息
show create database 数据库名;
查看当前用户的所有数据库
show databases;
查看当前使用的数据库
select database();
使用数据库
use 数据库;
DDL 操作表结构
mysql中常用的数据类型:
int:整型数据,存储的是真实的整型数据,例如存储5,数据库实际存储的就是5;
int(位数):整型数据,存储的数据不足位数,前面会补0,例如存储11,则实际存储的是011;
varcahr(x):字符型,x可以指定存储长度;
double:浮点型,例如double(5,2),表示可以存储一个保留两位小数,总长度是5位的小数,例如996.25;
date:日期
time:时间
datetime:日期时间
timestap:(时间戳,精确到毫秒)
blob:大字节类型,最大支持4G
clob:大字符类型,支持存储大文本存储,
创建表
create table 表名(
字段1 数据类型,
字段2 数据类型,
.....
字段 数据类型
);
查看当前数据库下的所有数据表:
show tables;
查看表结构:
desc 表名;
查看创建表的SQL语句:
show create table 表名;
创建一张表结构完全相同的表:
create table 新表名 like 旧表名;
删除数据表
drop table 表名;
判断数据表是否已经存在,存在则删除表
drop table if exists 表名;
修改表结构:
添加数据列:
alter table 表名 add 列名 数据类型;
修改列类型:
alter table 表名 modify 列名 新的数据类型
修改列名:
alter table 表名 change 旧列名 新列名 旧数据类型;
删除列:
alter table 表名 drop 列名;
修改表名:
rename table 表名 to 新表名;
修改数据表的字符集:
alter table 表名 character set 字符集;
DML语句:(对表中的数据进行增删改查操作)
插入数据:
a.插入全部数据:
insert into 表名 values(值1,值2.....);
b.一次插入多条数据
delete 和truncate的区别?
delete只会清空表中的数据,表结构丶约束条件等还在,比如主键id自增后的数据....外键约束,空约束等的;
truncate会将表中的数据以及这张表都删除掉,然后会按照原表结构重新创建一张新表,例如:表中的主键自增会从1开始,而不会记录原表中自增后的数据;
-- 查询数据库字符集
SHOW VARIABLES LIKE '%character%' ;
-- DQL语句之分组查询:group by
-- select 字段列表 from 表名 group by 分组字段名称;
-- 注意事项: 1)查询的字段列表中可以使用 分组字段
-- 2)group by之后不能使用聚合函数
带条件分组查询的语法: where 条件 必须放在group by 之前,否则语法错误!
-- select 字段列表包含分组字段,聚合函数.. from 表名 where 条件 group by 分组字段;
筛选查询 having
-- where条件,group by,having 必须先有条件,分组,然后才筛选!
-- 注意:筛选的后面可以使用聚合函数,group by的后面是不能使用聚合函数的
分页查询 limit
-- select 字段列表 from 表名 limit 起始行数,每页显示的条数;
-- 起始行数:从0开始算的,
-- 起始行数 = (当前页码-1)*每页显示的条数
数据库的约束
概念:限制用户操作数据库的一种行为(非法行为)
默认约束:
default '默认值' :如果某个字段没有插入数据,那么默认约束就会给设定的默认值
ALTER TABLE 表名 MODIFY 字段 字段类型 DEFAULT 默认值 ;
非空约束 not null,当前这个字段值不能为null:
ALTER TABLE 表名 MODIFY 字段 字段类型 NOT NULL ;
唯一约束unique (属于一种index :索引):
ALTER TABLE 表名 MODIFY 字段 字段类型 UNIQUE ;
主键约束 primary key(非空且唯一的) 一般和auto_increment(自增长约束)一起使用多一些, 一般设置在非业务字段上(如id)
字段 字段类型 PRIMARY KEY AUTO_INCREMENT -- 编号 加入主键约束,加入自增长
-- 通过sql将主键约束删除
ALTER table 表名 drop PRIMARY KEY ;
修改字段约束为主键约束
ALTER TABLE 表名 MODIFY 字段 字段类型 PRIMARY KEY ;
mysql中获取最后一次主键的自增长值
SELECT LAST_INSERT_ID() ;
外键约束 foreign key:
CONSTRAINT -- 声明
dept_emp_fk -- 外键名称 命名规则:主表名称_从表名称_fk
FOREIGN KEY (dept_id) -- 作用在这个dept_id字段上
REFERENCES dept(id) -- 关联主表的主键id
加入外键约束:修改和删除是很麻烦,需要先修改或者删除从表数据,然后修改/删除主表数据
-- 数据库的备份和还原
方式1:图形界面化工具
备份:选中库名,右键----->BACKUP/Export 备份导出---->
选中Sql脚本,存储到本地某个磁盘上----->StructureAndData:表的结构和数据都需要备 还原:先在SqlYog将myee_2203删除了,新建库右键---->Import 导入---->选中执行execute sql 脚本
数据库的备份和还原命令行的方式2
备份:
以管理员身份进入dos,不需要登录mysql
保存到指定路径上
mysqldump -uroot -p你的密码 库名 > 磁盘上的路径xx\xx\xx.sql
还原: 进入dos控制台,登录mysql
先将库删除,新建一个库
使用这个库 use库名;
加载指定路径的sql脚本
source 备份的sql脚本路径(D:\EE_2203\day9\code\mysql_01.sql)