MySQL问题总结(持续更新)

CHAR和VARCHAR的区别
存储方式和检索方式不同:
1、CHAR固定长度字符类型。CHAR存储定长数据,CHAR字段上的索引效率高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。 缺点是浪费空间,检索时CHAR列删除尾部空格,若果要保留程序需要对行尾空格进行处理,对于那些长度变化不大并且对查询速度有较高要求的数据可以使用CHAR类型;
 2、VARCHAR可变长度字符类型。存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。  
从空间上考虑,用varchar合适;从效率上考虑,用char合适。

import MySQLdb as mdb
db_host = 'localhost'

db_user = 'root'

db_pass = 'zjh'

db_name = 'databasename'

con = mdb.connect(db_host, db_user, db_pass, db_name)

从数据库中读取数据:
with con: 

cur = con.cursor()

cur.execute("SELECT id, ticker FROM symbol")

data = cur.fetchall() #返回一个元组组成的列表, 每个元组对应数据库表中的一行
con.close()

mysql中从一个表复制到另一个表
1. 复制数据到一个已经存在的表:
INSERT INTO table1 (***)
SELECT ***
FROM table2;
2. 复制旧表数据到另一张新表(未创建)可以用于实现表数据的备份:
CREATE TABLE newtable AS
SELECT * FROM oldtable;

复杂表结构的更改一般需要手动删除过程:
1.用新的列布局创建一个新表;
2.使用INSERT INTO SELECT 语句从旧表复制数据到新表
3.检验包含所需数据的新表
4.重命名旧表(如果确定,可以删除它)
5.用旧表原来的名字命名新表
6.根据需要,重新创建触发器,存储过程,外键和 索引

InnoDB的提供怎样的事务安全(数据库事务四个特性),为什么事务能保证失败回滚
事务机制可以确保数据一致性。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
  • 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
  • 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
  • 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  • 持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

原文地址:https://www.cnblogs.com/songdanzju/p/7423112.html