一、mysql中not null unique和primary key 的区别

  1、not null unique 是给一个字段设置非空且唯一的特性,当表中字段没有设置primary key的主键特性时那么第一个设置了非空且唯一特性的字段就是该表的主键。

  2、在一个表中可以有多个字段的特性是非空且唯一但是只能有一个字段的特性是主键。 

  3、主键必须要有非空且唯一的特性,但是有非空且唯一特性的字段并不一定是主键。

二、联合主键

  1、主键的创建格式(两种方式):

    eg:create table table_name (字段 字段属性 [约束条件] ........)

    eg:create table student (id int  primary key auto_increment,name varchar(11) not null,book_id int not null unique);

    eg:create table student (id int   auto_increment,name varchar(11) not null,primary key(id));

  2、联合主键的创建方式:

    eg:create table student (id int  auto_increment,name varchar(11) not null,book_id int not null unique,primary key(id,book_id));

  3、联合主键的应用场景

    联合主键一般应用于一张表分别关联多张表的场景,并且关联的每个主键都是非空且唯一。

三、数据库搜索引擎

  1、什么是存储引擎?

    在现实生活中不同类型的文件存储机制是不同的,文本文件就用txt类型存,表格文件就用excel类型存。。。。。。。

    在mysql中不同类型的表存储机制也是不同的,mysql5.6以上版本的数据库默认存储引擎是innodb,以下版本的数据库默认存储引擎是myisam

  2、存储引擎的查看及修改方式

    2.1可以用 show engines;方式来查看数据库支持的存储引擎,以及默认的存储引擎

    2.2在建库或者是建表中如果不加存储引擎的类型,就是默认的存储引擎类型,如果加的话可直接在建库或建表的后面加。

     create table student3 (id int not null ,name varchar(11) not null)engine=myisam;

    2.3可以用show variables like 'default_tmp_storage_engine%';的方式来查看当前库的搜索引擎。

四、索引

  1、什么是索引?

    在mysql中索引也叫键(index|key),如果在表中没有索引的话想要查询一条记录就会遍历整张表才能查出自己想要的数据,如果这个表存储记录很多而且要查询的记录有可能刚好在表的最后面那么遍历的查询效率是极其低下的那么就应用到了索引的概念。索引的作用就相当于用字典查一个字,如果遍历这个字典查的话效率低下,但是使用拼音或者是偏旁部首来查的话就能直接定位到在哪一页。

  2、mysql中创建索引

    2.1建立表时直接创建索引的语法:

     CREATE TABLE 表名 (字段名1  数据类型 [完整性约束条件…],字段名2  数据类型 [完整性约束条件…],

    [UNIQUE] [FULLTEXT]  INDEX | KEY  [索引名]  (字段名1[,字段名2]]  [ASC |DESC])
                );

    2.2建完表后插入索引的语法:

      方法1:CREATE [UNIQUE] INDEX 索引名 ON 表名 (字段名[(长度)] [ASC |DESC]) ;

      方法2:ALTER TABLE 表名 ADD [UNIQUE] INDEX 索引名 (字段名[(长度)] [ASC |DESC]) ;

    2.3删除索引语法:

      DROP INDEX 索引名 on 表名

    2.4创建索引实例:

      --创建普通索引示例: CREATE TABLE emp1 ( id INT,name VARCHAR(30) , resume VARCHAR(50),
                      INDEX index_emp_name (name));
      --创建唯一索引示例: CREATE TABLE emp2 (id INT,name VARCHAR(30) ,  resume VARCHAR(50),
                      UNIQUE INDEX index_emp_name (name) );
      --创建全文索引示例: CREATE TABLE emp3 ( id INT,name VARCHAR(30) ,resume VARCHAR(50),
                      FULLTEXT INDEX index_resume (resume) );
      --创建多列索引示例: CREATE TABLE emp4 (id INT,name VARCHAR(30) ,resume VARCHAR(50),
                      INDEX index_name_resume (name,resume));

五、pycharm操作mysql

  1、pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同

  2、在pycharm中执行mysql语句

    import pymysql
    # 创建连接
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
    # 创建游标
    cursor = conn.cursor()
    # 执行SQL,并返回收影响行数
    effect_row = cursor.execute("update hosts set host = '1.1.1.2'")
    # 执行SQL,并返回受影响行数
    #effect_row = cursor.execute("update hosts set host = '1.1.1.2' where nid > %s", (1,))
    # 执行SQL,并返回受影响行数
    #effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])
    # 提交,不然无法保存新建或者修改的数据
    conn.commit()
    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()

  3、获取查询数据

    import pymysql
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
    cursor = conn.cursor()
    cursor.execute("select * from hosts")
    # 获取第一行数据
    row_1 = cursor.fetchone()
    # 获取前n行数据
    # row_2 = cursor.fetchmany(3)
    # 获取所有数据
    # row_3 = cursor.fetchall()
    conn.commit()
    cursor.close()
    conn.close()

    4、注意:

      在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:
         cursor.scroll(1,mode='relative')  # 相对当前位置移动
         cursor.scroll(2,mode='absolute') # 相对绝对位置移动

    5、fetch数据类型

    关于默认获取的数据是元祖类型,如果想要或者字典类型的数据,即:

    import pymysql
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
    # 游标设置为字典类型
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    r = cursor.execute("call p1()")
    result = cursor.fetchone()
    conn.commit()
    cursor.close()
    conn.close()

mysql终结篇的更多相关文章

  1. 我叫Mongo,干了「查询终结篇」,值得您拥有

    这是mongo第三篇"查终结篇",后续会连续更新5篇 mongodb的文章总结上会有一系列的文章,顺序是先学会怎么用,在学会怎么用好,戒急戒躁,循序渐进,跟着我一起来探索交流. 通 ...

  2. 看看C# 6.0中那些语法糖都干了些什么(终结篇)

    终于写到终结篇了,整个人像在梦游一样,说完这一篇我得继续写我的js系列啦. 一:带索引的对象初始化器 还是按照江湖老规矩,先扒开看看到底是个什么玩意. 1 static void Main(strin ...

  3. 一起学微软Power BI系列-官方文档-入门指南(7)发布与共享-终结篇+完整PDF文档

    接触Power BI的时间也只有几个月,虽然花的时间不多,但通过各种渠道了解收集,谈不上精通,但对一些重要概念和细节还是有所了解.在整理官方文档的过程中,也熟悉和了解了很多概念.所以从前到后把微软官方 ...

  4. JS组件系列——表格组件神器:bootstrap table(三:终结篇,最后的干货福利)

    前言:前面介绍了两篇关于bootstrap table的基础用法,这章我们继续来看看它比较常用的一些功能,来个终结篇吧,毛爷爷告诉我们做事要有始有终~~bootstrap table这东西要想所有功能 ...

  5. JavaScript中的正则表达式(终结篇)

    JavaScript中的正则表达式(终结篇) 在之前的几篇文章中,我们了解了正则表达式的基本语法,但那些语法不是针对于某一个特定语言的.这篇博文我们将通过下面几个部分来了解正则表达式在JavaScri ...

  6. 转摘 MySQL扫盲篇

    一下文章摘自:http://www.jellythink.com/archives/636 MySQL扫盲篇 2014-09-15 分类:MySQL / 数据库 阅读(1412) 评论(1)  为什么 ...

  7. WPF自定义控件与样式(15)-终结篇 & 系列文章索引 & 源码共享

    系列文章目录  WPF自定义控件与样式(1)-矢量字体图标(iconfont) WPF自定义控件与样式(2)-自定义按钮FButton WPF自定义控件与样式(3)-TextBox & Ric ...

  8. 关于C++对汉字拼音的处理——终结篇

    以前写过了3个博文,都是关于汉字转拼音的,后来发现都不是很“完美”的解决方案,第一个和第二个利用的unicode编码的范围进行确定汉字的拼音,但是难免有遗漏,这个在后面的实践中发现的,后来第三个方法是 ...

  9. WPF自定义控件与样式(15)-终结篇

    原文:WPF自定义控件与样式(15)-终结篇 系列文章目录  WPF自定义控件与样式(1)-矢量字体图标(iconfont) WPF自定义控件与样式(2)-自定义按钮FButton WPF自定义控件与 ...

随机推荐

  1. 自己实现strcpy函数

    #include //printf #include //ssert #include //malloc #include //strlen char * sstrcpy(char * strdst, ...

  2. NGINX扩展

    https://github.com/cuber/ngx_http_google_filter_module

  3. Java并发编程(四)可见性

    除了使用synchronized关键字用于实现原子性或者确定"临界区(Critical Section)",还有一个重要的方面就是:内存的可见性(Memory Visibility ...

  4. libubox组件(1)——usock

    一:相关API介绍 1.相关源码文件:usocket.h usocket.c 2.类型标志 1: #define USOCK_TCP 0 2: #define USOCK_UDP 1 3: #defi ...

  5. 个人博客开发之 ueditor 安装

  6. Spring MVC参数方法名称解析器

    以下示例显示如何使用Spring Web MVC框架来实现多动作控制器的参数方法名称解析器. MultiActionController类可在单个控制器中分别映射多个URL到对应的方法. 所下所示配置 ...

  7. 报错:org.apache.jasper.JasperException: /jsp/head.jsp (line: 1, column: 2) Page directive: illegal to

    上面报错提示的是org.apache.jasper.JasperException: /jsp/head.jsp (line: 1, column: 2) Page directive: illega ...

  8. hadoop2.4完全分布式部署

    hadoop2.4完全分布式部署 感谢:http://blog.csdn.net/licongcong_0224/article/details/12972889 集群组成: 两台red hat en ...

  9. Java中将时间戳转化为Date类型

    时间戳timestamp,从前端接收到后.他能够是一个long或者包装类Long再或者是个String类型.仅仅需 new Date(时间戳) 就能够直接转化为java.util.Date类型. 转化 ...

  10. 强大的find命令

    find命令确实很强大,自己懒得计,转载一篇: 原文出处:http://roclinux.cn/?p=18 1. 想查看当前文件夹及子文件夹里有没有文件名为“abc”的文件 # find . -nam ...