一、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()