一.主键
  1.每个 表只有一个主键
  2.每个主键可以由多个列组成.(如果主键由多个组成,只要有一行列值不等即可)

CREATE TABLE NAME (
id INT auto_increment,
NAME CHAR (20),
sid int,
PRIMARY KEY (id, sid)
);
插入数据(1,'a',1),主键值为:(1,1) ,插入(1,'b',2),主键为(1,2),两个主键值不完全相等即可

主键示例

二.唯一索引
  唯一索引也是一种约束,约束内容为:
  1.可以为空,但是不能重复
  2.加快查询速度

CREATE TABLE name1 (
id INT auto_increment,
NAME CHAR (20),
UNIQUE qu_name (NAME),
INDEX (id)
)

唯一索引示例

  唯一索引的值可以为多列,称为联合唯一索引
  和主键的区别:
    1.主键不允许为空,唯一索引可以为空
    2.主键可在表外部被调用,唯一索引只能在表内使用
 
 

三.自增

  1.修改自增列起始值
    1.1.查看表数据
      DESC hostinfo;
    1.2.查看创建表时的命令:
      show CREATE TABLE tablename
      show CREATE TABLE tablename \G 竖着显示数据
CREATE TABLE `more2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pc_name` char(20) DEFAULT NULL,
`owner_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_more2` (`owner_id`),
CONSTRAINT `one2_more2` FOREIGN KEY (`owner_id`) REFERENCES `one2` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
    1.3.通过修改表的auto_increment值来进行自增初始值的修改
      ALTER TABLE tablename auto_increment=9;
     这时候会从9开始自增,新插入的数据自增列值为9.
  2.修改步长
  mysql的步长单位和其他的数据库软件不同,部分数据库的步长为表级别的,可以针对表设置步长,而mysql的步长修改为会话级别的,一次连接修改的步长仅本次连接有效,如果新建连接,而步长依旧为1.
  2.1 查看步长
    show session variables like '%auto_inc%';     #查看session变量

        +--------------------------+-------+
        | Variable_name | Value |
        +--------------------------+-------+
        | auto_increment_increment | 1 |   #步长
        | auto_increment_offset | 1 |       #数量默认起始值
        +--------------------------+-------+

  2.2 修改session级别自增变量值
     set session auto_increment_increment=3;   #设置步长为3
    set session auto_increment_offset=5;           #设置自增列默认起始值为5
  2.3 查看修改后的值   

        +--------------------------+-------+
        | Variable_name | Value |
        +--------------------------+-------+
        | auto_increment_increment | 3 |
        | auto_increment_offset | 5 |
        +--------------------------+-------+

    新建连接,查看自增起始值和步长

        +--------------------------+-------+
        | Variable_name | Value |
        +--------------------------+-------+
        | auto_increment_increment | 1 |
        | auto_increment_offset | 1 |
        +--------------------------+-------+

  我们发送,通过修改session变量,仅本次连接有效,如果要使修改的值永久有效,需要修改global变量

  2.4查看global自增相关变量值

    show global variables like '%auto_inc%'; 

        +--------------------------+-------+
        | Variable_name | Value |
        +--------------------------+-------+
        | auto_increment_increment | 1 |
        | auto_increment_offset | 1 |
        +--------------------------+-------+

  2.5 修改global变量

    set global auto_increment_increment=2;  #修改自增步长

      set global auto_increment_offset=2;      #修改自增列起始值

  2.6 新建连接查看,配置依旧生效 。但是不建议使用该方法进行修改

四.外键
  补充:当主键为多个时,外键可以关联多个

 create table morekey(
id int auto_increment,
sid int,
name char(20),
PRIMARY KEY(id,sid)
);
CREATE table morekey1(
id1 INT,
sid1 INT,
name1 CHAR(20),
CONSTRAINT fk_moremore FOREIGN KEY(id1,sid1) REFERENCES morekey(id,sid)
)

关联多个外键

  1.一对多
    当我们对两个表通过外键建立约束关系时,此时表A的值对应应表B的多个值时,且B表的值仅对应A表的一个值,则该关系为一对多。例如部门表和员工表。一个员工仅对应一个部门,而一个部门却可以对应多个员工。

 create table morekey(
id int auto_increment,
sid int,
name char(20),
PRIMARY KEY(id,sid)
);
CREATE table morekey1(
id1 INT,
sid1 INT,
name1 CHAR(20),
CONSTRAINT fk_moremore FOREIGN KEY(id1,sid1) REFERENCES morekey(id,sid)
)

一对多示例

  2.一对一
    当B表的值受A表的约束,且A表的值只能被B表使用一次,这时候A表和B表的值是一对一的。例如公司资产登记,一台pc只能归一个职工使用。或者是密码登陆管理,不允许用户名重复。
    我们知道,唯一索引的作用就是对表内的值进行约束,使其在表内是唯一的,不允许重复。我们利用外键和唯一索引,即可完成一对一的表格设计
-- pc编号
CREATE TABLE hostinfo(
id int auto_increment PRIMARY KEY,
host_name CHAR(20)
);
-- 用户资产信息
CREATE TABLE employ(
id int auto_increment PRIMARY KEY,
name char(20),
pc_id int,
UNIQUE uq_hostinfo_employ (pc_id),
CONSTRAINT fk_hostinfo_employ FOREIGN KEY (pc_id) REFERENCES hostinfo(id)
);

一对一示例

  3.多对多
    当A表的值和B表的值互相对应多个时,即两表之间有着多对多的关系。例如运维人员对公司服务器的主机管理,一个人可登陆多台服务器,一台服务器也可多人登陆。
    我们需要利用第三张表来记录A表和B表之间多对多的关系。

-- 主机信息表
CREATE TABLE pcinfo(
id int auto_increment PRIMARY KEY,
host_name char(20)
);
-- 管理员信息表
CREATE TABLE admininfo(
id int auto_increment PRIMARY KEY,
name char(20)
);
-- 管理员主机对应表
CREATE TABLE admin_pc(
id int auto_increment PRIMARY KEY,
pc_id int ,
user_id int,
UNIQUE uq_user_pc (pc_id,user_id),
CONSTRAINT fk_admin_pc FOREIGN KEY(pc_id) REFERENCES pcinfo(id),
CONSTRAINT fk_admin_user FOREIGN KEY(user_id) REFERENCES admininfo(id)
);

多对多示例

五.操作表内容高级运用补充

  1.笛卡尔积

    笛卡尔积是关系代数里的一个概念,表示两个表中的每一行数据任意组合。例如A表中有三条数据,B表中有三条数据,则使用命令:

    select * from A,B,则会产生九条结果。A表的每个值都会和B表的每个值产生一条对应的值。关系图如下:

            

  2.临时表,将过滤出来的数据临时当成一张表使用

命令格式:(SELECT 列名 FROM 表) as B

应用
连表操作:
SELECT * FROM (SELECT sid FROM score) as B LEFT JOIN student on student.sid=B.sid;
把score表中过滤出来的数据和student表进行连表操作

3.insert插入过滤后的表内容

INSERT INTO class(caption) SELECT name FROM class2;
ps:需要注意的是,插入的列要跟表的列一致

  4.条件语句

  句型:case when 条件 then 条件为正返回 esle 条件为假返回 end

case when id<10 then 1 else 0 end;   #如果id小于10,则返回1,否则返回0

  5.利用常量来统计

select count(1) from tablename groub by id;

  6.插入动态值

SELECT
student_id,
(select num from score as s2 where s2.student_id=s1.student_id and course_id = 1) as 语文,
(select num from score as s2 where s2.student_id=s1.student_id and course_id = 2) as 数学,
(select num from score as s2 where s2.student_id=s1.student_id and course_id = 3) as 英语
from score as s1;

  s1表的值可以再内循环中使用。类似于:

for student_id in s1:
for id in s2:
s2=s1

  7.三元运算

    if(条件,为真返回,为假返回)

    e.g:if (isnull(xx),0,1)  如果为null,则返回0,否则返回1

  

python之路-----MySql操作二的更多相关文章

  1. python之路-----MySql操作

    一.概述 1.什么是数据库 数据库就是按照数据结构来组织.存储和管理数据的仓库.如我们创建的文件夹,就是一个数据库. 2.什么是mysql,oracle,access,sqlit等? 他们都是一款软件 ...

  2. python之路-----MySql操作三

    mysql 概述 一.主要内容: 视图 create view name (select * from user where id>5); 触发器 函数 存储过程 索引 二.各模块详细说明 1. ...

  3. 百万年薪python之路 -- MySQL数据库之 MySQL行(记录)的操作(二) -- 多表查询

    MySQL行(记录)的操作(二) -- 多表查询 数据的准备 #建表 create table department( id int, name varchar(20) ); create table ...

  4. python中的mysql操作

    一. 数据库在自动化测试中的应用 存测试数据 有的时候大批量的数据,我们需要存到数据库中,在测试的时候才能用到,测试的时候就从数据库中读取出来.这点是非常重要的! 存测试结果 二. python中的数 ...

  5. python之路--MySQL 库,表的详细操作

    一 库操作 数据库命名规则 可以由数字,字母,下划线,@, #, $ 区分大小写 唯一性 不能使用关键字如 create  select 不能单独使用数字 最长128位 # 这些是对上次的补充. 二 ...

  6. 百万年薪python之路 -- MySQL数据库之 MySQL行(记录)的操作(一)

    MySQL的行(记录)的操作(一) 1. 增(insert) insert into 表名 value((字段1,字段2...); # 只能增加一行记录 insert into 表名 values(字 ...

  7. python之数据库(mysql)操作

    前言: 最近开始学django了,学了下web框架,顿时感觉又会了好多知识.happy~~ 这篇博客整理写下数据库基本操作,内容挺少.明天写SQLAlchemy. 一.数据库基本操作 1. 想允许在数 ...

  8. 百万年薪python之路 -- MySQL数据库之 Navicat工具和pymysql模块

    一. IDE工具介绍(Navicat) 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具,我们使用Navicat工具,这个工具本质上就是一个socket客户端,可视化的连接 ...

  9. python之路-Mysql&&ORM

    1. 数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据. 我们也可以 ...

随机推荐

  1. Solr中在使用过程中遇到的"与"和"或"的问题

    在进行全文检索的过程中,如果使用三星和手机,两个一块进行搜索的时候,关于三星的会被搜索出来,关于手机的信息也会被搜索出来,然后,需要将一些配置文件进行配置, <!-- DEPRECATED: T ...

  2. Gatling实战(一)

    对Gatling早有耳闻,据说比jmeter的性能要好很多,我第一次试用的时候因为本机安装的jdk版本不对无法跑起来,试用失败后,因为没时间就一直没继续研究了.我当时是去java官网下载最新的jdk覆 ...

  3. Exp1 PC平台逆向破解 20164303 景圣

    逆向及Bof基础实验 实验对象 文件名为pwn1的linux可执行文件. 实验目标:程序正常执行流程weimain调用foo函数,foo函数会简单回显任何用户输入的字符串.该程序同时包含另一个代码片段 ...

  4. mybatis配置与使用

    一:Mybatis简介 1.名称由来 Mybatis原名叫ibatis.Mybatis一开始属于Apache,2010年从Apache转移到了GoogleCode这个组织中. 2.Mybatis概念 ...

  5. JS的深度克隆,利用构造函数原型深度克隆

    我爱撸码,撸码使我感到快乐!大家好,我是Counter.今天来写写,JS中的深度克隆,这个在笔面试中,考的还是比较多的,主要是对象与数组的赋值,如果直接赋值的话,那么得到的是对象或者数组在堆里的地址, ...

  6. pat1003 迪杰斯特拉法和dfs求最短路

    本题的背景是求定点和定点之间的最短路问题(所有的最短路 不是一个解  是全部解,方法手段来自数据结构课程中的迪杰斯特拉算法和dfs(深度优先遍历). 分别用两种方法编程如下代码 dfs #includ ...

  7. 单元测试系列之八:Sonar 数据库表关系整理一(续)

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 简介:Sonar平台是目前较为流行的静态代码扫描平台,为了便于使用以及自己二次开发,有必要对它的数据库结构进行学习 ...

  8. mongodb修改和删除操作

    修改数据修改里面还有查询条件.你要该谁,要告诉 mongo.查找名字叫做小明的,把年龄更改为 16 岁:1 db.student.update({"name":"小明&q ...

  9. C# DataGridView 动态添加列和调整列顺序

    https://yq.aliyun.com/articles/421700 // DataGridView1的ColumnDisplayIndexChanged事件处理方法private void D ...

  10. Latex 经常见到的问题和解决方法

    Latex 经常见到的问题和解决方法 2017-04-10  22:05:48 [资源下载]Texlive 2018 下载地址:http://mirror.lzu.edu.cn/CTAN/system ...