MySQL
1. Mysql外键
1. 外键设计
创建一个用户表 (被关联表)
create table userinfo(uid int primary key auto_increment not NULL,
name varchar(20) not NULL , ...);创建一个数据表 (关联表)
create table userdata(did int primary key auto_increment not NULL,
data text ...,
--指定该表的某个字段与其他表为外键关系
udid int not NULL,
foreign key(udid) references userinfo(uid));
--这样udid与 `userinfo` 表的uid构成外键关系
2. 数据操作
插入数据
- 1.必须先插入被关联表(userinfo)的数据,再插入关联表(userdata)的数据。
-- userinfo 表插入数据
insert into userinfo(uid,name,...) values(NULL,'root',...);
...
-- userdata 表插入数据
insert into userdata(did,data,udid) values(NULL,'data....',1)
--如果关联表(userdata)插入的uid在被关联表(userinfo)中不存在会报错
更新数据
update userdata set udid=999 where did=1;
--需要注意的是当你设置的udid在userinfo表中找不到的时候会报错
--同时还要注意did的主键约束
删除数据
-- 要先删除已关联表字段(userdata),才能修改被关联表(userinfo)中的关联uid字段。
-- 如果关联表(userinfo) uid 已经被关联了,那删除是就会报错
高级查询
内连接查询
select * from userdata join userinfo on userdata.udid = userinfo.uid;
-- 结果会连在一起
- 外连接查询 (__分为左连接和右连接 __)
```sql
-- 1.左连接
select * from userdata left join userinfo on userdata.udid = userinfo.uid;
-- 2.右连接
select * from userdata right join userinfo on userdata.udid = userinfo.uid;
-- 所谓左连接和右连接 无非是用哪个表做参考
- 联合查询
```sql
select * from userdata union select * from userinfo
```
- 子查询
```sql
select * from (select * from userdata) as newName;
select DISTINCT * from userdata where udid in (select * from userinfo);
-- DISTINCT表示去重的意思
```
2. Linux下Mysql数据导入导出
首先linux 下查看mysql相关目录
root@ubuntu14:~# whereis mysql
mysql:
/usr/bin/mysql---- mysql的运行路径
/etc/mysql
/usr/lib/mysql----- mysql的安装路径
/usr/bin/X11/mysql
/usr/share/mysql
/usr/share/man/man1/mysql.1.gz
此外还有一个:
var/lib/mysql --------mysql数据库data文件的存放路径
确定了运行路径,执行导入、导出mysql数据库命令
一、导出数据库用mysqldump命令
(注意:先cd到mysql的运行路径下,再执行一下命令):
1、导出数据和表结构:
mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql
mysqldump -uroot -p dbname > dbname .sql
敲回车后会提示输入密码
2、只导出表结构
mysqldump -u用户名 -p密码 -d 数据库名 > 数据库名.sql
mysqldump -uroot -p -d dbname > dbname .sql
二、导入数据库
1、首先建空数据库
create database dbname ;
2、导入数据库
方法一:
(1)选择数据库
use dbname ;
(2)设置数据库编码
set names utf8;
(3)导入数据(注意sql文件的路径)
source /home/xxxx/dbname .sql;
方法二:
mysql -u用户名 -p密码 数据库名 < 数据库名.sql