ParisGabriel
每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰
开局一张图
今天接着昨天的说
索引有4种:
普通 索引 :
index
唯一索引:
unique
主键索引:
primary key
外键索引:
foreign key
索引查询命令:
show index from 表名\G;
Non_Unique:1 :index
Non_Unique:0 :unique
外键索引(foreign key):
定义:让当前字段的值
在另一个表的范围
内选择
语法:
foreign key(参考字段名)
references 主表(被参考字段名)
on delete 级联动作
on update 级联动作
使用规则:
主表、
从表字段
数据类型要一致
主表
被参考字段一般是:
主键
删除外键:
alter table 表名 drop foreign key 外键名;
外键名查询:show create table 表名;
级联动作:
cascade
级联
删除、更新(只限于参考字段)
restrict(默认)
从表有相关
记录,
不允许主表操作
set NULL
主表删除、更新,
从表关联记录
字段值为NULL
已有表添加外键:
alter table 表名 add
foreign key(参考字段)reference主表(被参考字段)
on delete ...
on update ...
表的复制
复制表:
create table 表名 select... from where 表名;
表结构:
create table 表名 select * from 表名 where false;
注意:
复制表的时候
不会把原表的
键(key)属性复制过来
SQL 查询(高级)
嵌套查询(子查询):
定义:
把内层
查询结果作为外层的
查询条件
语法格式:
select ...from 表名 where 条件(select...);
多表查询:
两种方式
1.
select 字段名列表 from 表名列表;(笛卡尔积)
select * from t1,t2
select t1.name,t2.name from t1,t2;
2.
select t1.name,t2.name from t1,t2
where 条件
链接查询:
1.内链接
select 字段名 from 表1
inner join 表2 on 条件
inner join 表3 on 条件...;
2.外链接
1.左链接
以左表为主显示查询结果
select 字段名 from 表1
left join 表2 on 条件
left join 表3 on 条件...;
2.右链接
以右表为主显示查询结果
select 字段名 from 表1
right join 表2 on 条件
right join 表3 on 条件...;
数据备份:
mysqldump 在Linux终端操作
完全备份:
mysqldump -u用户 -p源库名 > ~/xxx.sql
--all-databases 备份所有库
库名 备份单个库
-B 库1 库2.. 备份多个库
库名 表1 表2... 备份指定库指定表
数据恢复:
恢复单个库
mysql -uroot -p < 目标库名 xxx.sql
从所有库备份中恢复某一个库(-one-database)
mysql -uroot -p --one-database 目标库名 < xxx.sql
注意:
1.
恢复库
时如果
恢复到原库会将
表中的
数据覆盖,
新增表不会删除
2.数据恢复时
如果恢复的
库不存在,则
必须先创建空库
MySQL的账户管理:
1.开启mysql的远程连接
sudo -i
cd /etc/mysql/mysql.conf.d/
subl mysql.cnf
#bind-address = 127.0.0.1 注释掉
/etc/init.d/mysql restart
2.添加授权用户
用root用户登录mysql
mysql -uroot -p123456
授权:
grant 授权列表 on 库.表 to “用户名“@”%”
identified by “密码” with grant option
权限列表:
all privileges、select、insert
库.表: *.* 所有库所有表
示例:
1、添加授权用户tiger,密码123,对所有库的所有表有所有权限
grant all privileges on *.* to "tiger"@"%" identified by "123" with grant option;