MySQL二
来源:互联网 发布:linux 分配权限 编辑:程序博客网 时间:2024/05/21 06:16
约束
主键:非空,唯一,被引用
- 创建表时指定主键的两种方式:
CREATE TABLE stu( sid CHAR(6) PRIMARY KEY, sname VARCHAR(20), );
指定sid列为主键列,即为sid列添加主键约束
CREATE TABLE stu( sid CHAR(6), sname VARCHAR(20), PRIMARY KEY(sid) );
修改表时指定主键:ALTER TABLE stu ADD PRIMARY KEY(sid);
删除主键:ALTER TABLE stu DROP PRIMARY KEY;
- 非空约束:在定义时,在列的结构类型后面加上NOT NULL
- 唯一约束:在定义时,在列的结构类型后面加上 NOT NULL UNIQE
- 主键自增长
-因为主键列的特性是:必须唯一、不能为空,所以我们通常会指定主键类为整型,然后设置其自动增长,这样可以保证在插入数据时主键列的唯一和非空特性。
-创建表时指定主键自增长
CREATE TABLE stu( sid INT PRIMARY KEY AUTO_INCREMENT, gender VARCHAR(10) );
- 修改表时设置主键自增长:
ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT;
概念模型
对象模型:可以双向关联,而且引用的是对象,而不是一个主键!
关系模型:只能多方引用一方,而且引用的只是主键,而不是一整行记录。
外键约束
- 外键必须是另一表的主键的值(外键要引用主键!)
- 外键可以重复
- 外键可以为空
- 一张表中可以有多个外键!
语法:CONSTRAINT 约束名称 FOREIGN KEY(外键列名) REFERENCES 关联表(关联表的主键)
创建表时指定外键约束
create talbe emp ( empno int primary key, ... deptno int, CONSTRAINT fk_emp FOREIGN KEY(mgr) REFERENCES emp(empno) );
- 修改表时添加外键约束
ALERT TABLE emp ADD CONSTRAINT fk_emp_deptno FOREIGN KEY(deptno) REFERENCES dept(deptno);
- 修改表时删除外键约束
ALTER TABLE emp
DROP FOREIGN KEY fk_emp_deptno;
数据库一对一关系
- 需要让其中一张表的主键,即是主键又是外键。
create table husband(
hid int PRIMARY KEY,
…
);
create table wife(
wid int PRIMARY KEY,
…
ADD CONSTRAINT fk_wife_wid FOREIGN KEY(wid) REFERENCES husband(hid)
);
从表的主键即是外键!
数据库多对多
- 在表中建立多对多关系需要使用中间表,即需要三张表,在中间表中使用两个外键,分别引用其他两个表的主键。
create table student( sid int PRIMARY KEY, ... );create table teacher( tid int PRIMARY KEY, ... );create table stu_tea( sid int, tid int, ADD CONSTRAINT fk_stu_tea_sid FOREIGN KEY(sid) REFERENCES student(sid), ADD CONSTRAINT fk_stu_tea_tid FOREIGN KEY(tid) REFERENCES teacher(tid) );
数据库的备份与恢复.
- 数据库导出SQL脚本(备份数据库内容,并不是备份数据库!)
mysqldump –u用户名 –p密码 数据库名>生成的脚本文件路径
- mysqldump -uroot -p123 mydb1>C:\mydb1.sql
不要打分号,不要登录mysql,直接在cmd下运行,生成的脚本文件中不包含create database语句- 执行SQL脚本
第一种方式
mysql -u用户名 -p密码 数据库<脚本文件路径
例如:
*mysql -uroot -p123 mydb1<C:\mydb1.sql
第二种方式
登录mysql
source SQL脚本路径
例如:
- 先删除mydb1库,再重新创建mydb1库
- 切换到mydb1库
- source c:\mydb1.sql
mysqldump -uroot -p123 mydb3>c:/a.sql –> 备份
mysql -uroot -p123 mydb3<c:/a.sql --> 恢复
source c:/a.sql –> 恢复
多表查询
- 合并结果集
要求被合并的表中,列的类型和列数相同
UNION,去除重复行
UNION ALL,不去除重复行
SELECT * FROM cd
UNION ALL
SELECT * FROM ab;
连接查询
分类
内连接
外连接:
- 左外连接
- 右外连接
- 全外连接(MySQL不支持)
自然连接(属于一种简化方式)内连接
如果两张表有外键关系,可以使用内连接
- 方言:SELECT * FROM 表1 别名1, 表2 别名2 WHERE 别名1.xx=别名2.xx
- 标准:SELECT * FROM 表1 别名1 INNER JOIN 表2 别名2 ON 别名1.xx=别名2.xx(平时按这个格式写)
- 自然:SELECT * FROM 表1 别名1 NATURAL JOIN 表2 别名2(了解)
- 外连接
- 左外:SELECT * FROM 表1 别名1 LEFT OUTER JOIN 表2 别名2 ON 别名1.xx=别名2.xx
左表记录无论是否满足条件都会查询出来,而右表只有满足条件才能出来。左表中不满足条件的记录,右表部分都为NULL- 右外:SELECT * FROM 表1 别名1 RIGHT OUTER JOIN 表2 别名2 ON 别名1.xx=别名2.xx
右表记录无论是否满足条件都会查询出来,而左表只有满足条件才能出来。右表不满足条件的记录,其左表部分都为NULL- 全链接:可以使用UNION来完成全链接
子查询:
- 单行单列:SELECT * FROM 表1 别名1 WHERE 列1 [=、>、<、>=、<=、!=] (SELECT 列 FROM 表2 别名2 WHERE 条件)
- 多行单列:SELECT * FROM 表1 别名1 WHERE 列1 [IN, ALL, ANY] (SELECT 列 FROM 表2 别名2 WHERE 条件)
- 单行多列:SELECT * FROM 表1 别名1 WHERE (列1,列2) IN (SELECT 列1, 列2 FROM 表2 别名2 WHERE 条件)
- 多行多列:SELECT * FROM 表1 别名1 , (SELECT ….) 别名2 WHERE 条件
0 0
- MySQL(二)
- MYSQL<二>
- MYSQL(二)
- MySQL二
- mysql (二)
- Mysql(二)
- mysql二
- MySQL入門學習(二)
- MySQL入门学习(二)
- MySQL入门学习 二
- MySQL 优化(二)
- MySQL 同步(二)
- MySQL 优化(二)
- mysql 学习二
- MySQL入门学习(二)
- 社区(php&&mysql)二
- 聊天室php&mysql(二)
- MySQL入门学习(二)
- JAVAWEB开发之Hibernate详解(二)——Hibernate的持久化类状态与转换、以及一级缓存详解、关联关系的映射(一对多、多对多、级联)
- 电子应用常用英语
- linux配置ssh免秘钥登入
- 【学习python兴趣起源】计算字符串中字母出现的次数
- 欢迎使用CSDN-markdown编辑器
- MySQL二
- [BZOJ4555][Tjoi2016&Heoi2016]求和(FFT)
- RecyclerView使用介绍
- Laravel学习笔记(四)---操作数据库--原生SQL语句
- CAFFE FOR WINDOWS安装与配置
- Ubuntu14.04下安装Composer
- Python基础
- LSB Matching 隐写算法分析与理解
- Qt实现读取显示obj文件——动态绑定纹理与消除纹理