1、ER模型——三个元素:实体、联系和属性
E表示entry:实体:代表的是一类事物
R表示realationship,联系:表示一个或者多个实体之间的关联关系,关系数据类型包括一对一、一对多、多对多
属性:实体的某一特性陈伟属性
一对一:多个人、多个个人简介(这个不经常使用,所以由这个来维护关系)
一对多:多个班级,多个学生
多对多:多个课程、多个学生、多个成绩
2、命令行客户端
装完mysql之后,就会有数据库 命令行
cd 安装目录下/bin/
2.1、连接
mysql -u root(用户) -p 回车再输入密码
2.2、查询所有库
show databases;
2.3、查看所有表
show tables;
2.4、查询表结构
desc students;
或者show create table student;
2.5、 进入库
use ceshi;
2.6、 查表(可能是乱码)
select * from students;
2.7、 改成国标显示
set charset gbk;
2.8、查询当前用的仓库
select databases();
2.9、 创建库
creat databases test charset='utf8'
2.10、 删除数据库
drop databases test;
2.11、换行写命令的话,括号分行,在按回车
creat table test(
id int;
name char)
3、命令行客户端-备份与恢复
必须以管理员身份运行命令行
3.1、备份
mysqldump -uroot -p123456 ce>beifen.sql
3.2、恢复
mysql -uroot -p123456 back<beifen.sql
4、函数——内置函数
41、字符串函数
4.1.1、拼接字符串
select contact(123,'abc');
例子:查询结果是一个人的家乡
select name,hometown,contact(name,'的家乡是',hometown) from students
4.1.2、长度——中文字符是3,其他是1
select length('123') select length('温') ——>结果是3
例子:查询名字是3个字的
select * from student where length(name)=9;
4.1.3、截取字符串
select right('abc',2) bc
select left('abc',2) ab
select substring('abc',1,1),从左往右截取角标为1开始,的一个字符,就是b
例子:温某某
select name,sex,contact(left(name,1),'某某'),'的家乡是',hometown) from students
4.1.4、去除空格
ltrim(str)去除左边的空格
rtrim(str)去除右边的空格
例子:
select ltrim(rtim(' abc '))
或者select trim(' abc ')
4.1.5、大小写
upper()
lower()
例子
select upper(' abc ')
4.1.6、四舍五入
select round (1,65,1)
4.1.7、幂
select pow(2,32) 2的32次方
4.1.8、圆周率
select ronud(PI(),100)
4.1.9、随机——这个有点用
例子:随机0到10的整数 rand是0-1的整数
select round(rand(()*10);
4.1.10、随机从一个表中取一个记录
select *,rand() from students order by rand() limit 1
4.1.11、日期和时间函数
当前日期
select current_date();
当前时间
select current_date(); 或者select now();
格式化时间2020/07/06-10:10:00
select date_format(now(),'%Y/%m/%d-%h:%i:%s')
5、流程控制
select
case 1
when 1 then 'one'
when 2 then 'two'
else 'zeero'
end as result;
例子:
select name,sex,
case sex
when '男' then contact(left(name,1),'先生')
when '女' then contact(left(name,1),'女士')
else contact(left(name,1),'XX')
end as res
from students
6、自定义函数
语法
create function 函数名称(参数列表) return 返回类型
begin
sql语句
end
例子:
create function my_trim(str varchar(100)) returns varchar
begin
return ltrim(rtrim('100'));
end
select my_trim(' abc ')
delimiter $$ 把分号替换成$$,方便在命令行中创建函数使用,分号就可以正常使用,结束运行的haul需要输入$$
7、存储过程——可以写多条语句,然后使用存储过程来执行
delimiter //
create procedute 函数名称(参数列表) return 返回类型
begin
sql语句
end
存储过程调用是:call而不是select
8、视图
对于复杂的查询,采用视图进行查询——create view 虚拟表名 as
视图是从一个或几个基本表(或视图)中导出的虚拟的表。在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。
视图是原始数据库数据的一种变换,是查看表中数据的另外一种方式。可以将视图看成是一个移动的窗口,通过它可以看到感兴趣的数据。 视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。
视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中。通过视图看到的数据存放在基表中。
视图看上去非常像数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些视图可以修改对应的基表,而有些则不能(仅仅能查询)
create view v_stu as
select * from students … (这是一个查询语句)
以后查询的话,就只需要select * from v_stu
9、事物
只要一个功能,多步操作。要不全部执行,要么全部不执行。
特点:
1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。 [1]
2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序 串行执行的结果相一致。 [1]
3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。 [1]
4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障
例子:转账
王:500
温:100
过程:
update account set money=money-100 where name="王";
update account set money=money+100 where name="温";
begin;
所有操作都成功;
commit;
begin;
任何一步失败;
rollback;
10、索引——作用在某一列,进行创建索引之后,提升查询速度。缺点:修改表每次都要改变结构,则会降低更新速度。
设置时间:set profiles=1;
查询语句;
查询用了多少时间show profiles;
语法:
查看索引
show index from 表名;
创建索引
方式一:创建表时创建索引
create table create_index(
name varchar(10),
age int,
key (age)
);
方式二:已经存在的表创建索引
create index 索引名称 on 表名(字段名称,长度)
create index i_name on test(name(10))
分析查表的方式,用这个,可以查看是否用了索引。
explain
select * from test_name where title='0011100'
11、外键
| 主键 | 外键 | 索引 | |
|---|---|---|---|
| 定义: | 唯一标识一条记录,不能有重复的,不允许为空 | 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 | 该字段没有重复值,但可以有一个空值 |
| 作用: | 用来保证数据完整性 | 用来和其他表建立联系用的 | 是提高查询排序的速度 |
| 个数: | 主键只能有一个 | 一个表可以有多个外键 | 一个表可以有多个惟一索引 |
外键:比如学生表的班级,只能在一个范围内,这个范围就是外键另一张表的班级表
主表——>从表(约束)
缺点:在开发中,很少用到外键,降低更新效率
12、修改密码:(md5解密)
root登陆,修改user表,使用password
进入mysql。有个user表,里面就有password
select password('123') 加密的函数
upadte user set password=password('123')这个就是修改密码
修改成功需要执行:flush privileges;
13、忘记root密码
安装目录下my.ini
[mysqld]
skip-grant-tables 跳过密码验证。再使用上面的功能进行设置新的密码。