Day03回顾
1、嵌套查询(子查询)
1、把内层的查询结果作为外层的查询条件
2、多表查询
1、笛卡尔积 :不加where条件
2、加where条件 :只显示匹配到的
3、连接查询
1、内连接 :只显示匹配到的
2、外连接
1、左连接 :以左表为主显示查询结果
2、右连接 :以右表为主显示查询结果
3、select ... from 表1 inner/left/right join 表2 on 条件;
4、约束
1、默认约束(default)
2、非空约束(not null)
sex enum("M","F") not null default "M"
5、索引(Btree)
1、优点 :加快数据检索速度
2、缺点 :占用物理存储空间,需要动态维护,消耗系统资源
3、SQL命令运行时间监测
1、开启 :mysql>set profiling=1;
2、查看 :mysql>show profiles;
3、关闭 :mysql>set profiling=0;
6、索引分类
1、普通(MUL)、唯一索引(UNI,字段值不能重复,可为NULL)
1、创建
index(...),index(...),unique(...)
create unique index 索引名 on 表名(字段名);
2、查看
desc 表名;
show index from 表名G;
3、删除
drop index 索引名 on 表名;
2、主键&&自增长(PRI,不能重复,且不能为NULL)
1、创建
id int primary key auto_increment,
alter table 表名 add primary key(字段名);
2、删除
1、alter table 表名 modify id int;
2、alter table 表名 drop primary key;
3、指定自增长起始值
1、create table 表名(...)auto_increment=1000;
2、alter table 表名 auto_increment=1000;
3、外键
1、使用规则
1、主表、从表数据类型要一致
2、主表被参考字段一定要为主键
2、语法格式
foreign key(...) references 主表(...)
on delete cascade
on update cascade
3、级联动作
1、casacde :删除、更新同步
2、restrict:不让主表删除、更新
3、set null:删除、更新,从表该字段设置为NULL
4、删除
1、show create table 从表;
2、alter table 表名 drop foreign key 外键名;
5、已有表
alter table 表名 add constraint 外键名
foreign key(...) ........
6、注意
1、在已有表中条件外键关联时,会受到表中原有数据的限制
***********************
Day04笔记
1、锁(MySQL自动加锁和释放锁)
1、目的 :解决客户端并发访问的冲突问题
2、锁分类
1、锁类型
1、读锁(共享锁)
select :加读锁之后别人可以查询,但是不能更改(update)
2、写锁(互斥锁、排他锁)
update :加写锁之后,别人不能查、不能改
2、锁粒度
1、行级锁 :可加读锁、写锁
2、表级锁 :可加读锁、写锁
2、存储引擎(处理表的处理器)
1、基本操作
1、查看所有存储引擎
show engines;
2、查看已有表存储引擎
show create table 表名;
3、创建表时指定
create table 表名(...)engine=MyISAM;
4、已有表
alter table 表名 engine=InnoDB;
2、常用存储引擎特点
1、InnoDB特点
1、支持外键、行级锁、事务
2、共享表空间
表名.frm :表结构和索引信息
表名.ibd :表记录
2、MyISAM特点
1、支持表级锁
2、独享表空间
表名.frm :表结构
表名.MYD :表记录
表名.MYI :索引信息
3、MEMORY特点
1、表结构存储在硬盘,表记录存储在内存
2、服务/主机重启后,表记录消失
3、如何选择使用哪个存储引擎
1、执行查询操作多的表用MyISAM(使用InnoDB浪费资源)
2、执行写操作多的表用InnoDB
3、数据备份(mysqldump,在Linux终端中操作)
1、mysqldump -u用户名 -p 源库名 > XXX.sql
2、源库名表示方式
--all-databases 备份所有库
库名 备份单个库
-B 库1 库2 库3 备份多个库
库名 表1 表2 表3 备份指定库的多个表
3、示例
1、备份所有库,放到mydata目录下:all.sql
mysqldump -uroot -p --all-databases>all.sql
2、备份db3库中sheng、city、xian三张表,scx.sql
mysqldump -uroot -p db3 sheng city xian > scx.sql
3、备份MOSHOU库和db4库,md.sql
mysqldump -uroot -p -B MOSHOU db4 > md.sql
4、备份db4库,db4.sql
mysqldump -uroot -p db4 > db4.sql
4、数据恢复(Linux终端中操作)
1、mysql -u用户名 -p 目标库名 < XXX.sql
2、示例
1、删除db3库,创建空库,从all.sql中恢复此库
mysql> drop database db3;
mysql> create database db3 character set utf8;
mysql> use db3;
终端 :mysql -uroot -p --one-database db3 < all.sql
2、做3件事
1、在db3.sheng表中新增加1条记录
insert into sheng values(11,200003,"日本省");
2、在db3库创建表t888,插入1条记录
create table t888(id int);
insert into t888 values(1),(2),(3);
3、从all.sql中恢复db3库
mysql -uroot -p --one-database db3<all.sql
3、注意
1、恢复库时,会将表中数据覆盖,新增表不会删除
2、恢复时,如果要恢复的库不存在,则先创建空库
5、数据导入
1、作用 :把文件系统的内容导入到数据库中
2、语法格式
load data infile "文件名"
into table 表名
fields terminated by "分隔符"
lines terminated by "
"
3、导入步骤
1、在数据库创建对应的表
1,大空翼,98.5,13030303030,AID1709
create table score(
id int,
name varchar(20),
score float(5,2),
phnumber char(11),
class char(7)
)charset=utf8;
2、把文件拷贝到数据库的搜索路径中
1、查看搜索路径
show variables like "secure_file_priv";
2、拷贝文件
sudo cp scoreTable.csv /var/lib/mysql-files/
3、执行数据导入语句
4、文件权限
-rwxr--r-- tarena tarena scoreTable.csv
最左侧-:代表文件
r :读
w :编辑
x :可执行
rwx r-- r--
第1组 :所有者权限 tarena
第2组 :同组用户权限 tarena2
第3组 :其他用户权限 mysql
5、修改文件权限
r : 4
w : 2
x : 1
chmod 777 文件名
chmod 666 文件名 rw-rw-rw-
chmod 644 文件名 rw-r--r--
6、数据导出
1、把数据库中表笔记导出到系统文件里
2、语法格式
select ... from 表名 where 条件
into outfile "文件名"
fields terminated by "分隔符"
lines terminated by "
"
3、示例
1、把MOSHOU库下的sanguo表英雄的姓名、攻击值和国家导出到 sanguo.csv
select name,gongji,country from MOSHOU.sanguo
into outfile "/var/lib/mysql-files/sanguo.csv"
fields terminated by ","
lines terminated by "
"
7、E-R模型(Entry-Relationship)
1、定义 :实体-关系模型,数据模型,用于设计数据库
2、三个概念
1、实体 :描述客观事物的概念
1、表示方式 :矩形框
2、示例 :一个人、一本书、一杯咖啡
2、属性
实体具有的特性
表示方式 :椭圆形
3、关系
1、各个实体之间的联系
2、分类
一对一(1:1):老公对老婆
A中1个实体,在B中只能有1个与其关联
B中1个实体,在A中只能有1个与其关系
一对多(1:n):父亲对孩子
A中1个实体,在B中有n个与其关联
B中1个实体,在A中只能有1个与其关联
多对多(m:n):兄弟姐妹对兄弟姐妹
A中1个实体,B中多个关联
B中1个实体,A中多个关联
3、ER图绘制
1、矩形框代表实体,菱形框代表关系,椭圆形代表属性
2、示例(老师与课题)
老师 :员工号、姓名、职称
课题 :课题号、课题名
关系 :m:n
3、练习
1、设计1个学生选课系统的ER图
实体 :学生、课程、老师
学生 :学号、姓名 ...
课程 :课程编号、课程名称
老师 :员工号、姓名
关系 :老师 - 教 - 学生 m:n
学生 - 选 - 课程 m:n
8、MySQL用户管理
1、开启远程连接
1、sudo -i
2、cd /etc/mysql/mysql.conf.d/
3、subl mysqld.cnf
44行 :bind-address = 127.0.0.1
4、/etc/init.d/mysql restart
2、添加授权用户
1、用root用户登录mysql
mysql -uroot -p123456
2、授权
grant 权限列表 on 库.表 to "用户名"@"%"
identified by "密码"
with grant option;
权限列表 :all privileges 、select 、drop
库.表 :库.* 、 *.*(所有库所有表)
2、示例
1、添加授权用户 tiger,对db4库有所有权限,密码123