primary key主键 表中一列或者多列组成唯一的key,也就是通过一个或者多个列能唯一标识的一条记录 主键的列不能包含空值,主键往往设置为整型,长整形,且自增auto_increment 表中可以没有主键,但是一般表设计中,往往都会有主键 索引 可以看作事一本字典的目录,为了快速检索用的,空间换事件,显著提高效率 可以多一列或者多列字段设置索引 主键索引,主键会自动建立主键索引,主键本身就是为了快速定位唯一记录的 唯一索引:表中的索引列组成的缩影必须唯一,但可以为空,非空值必须唯一 普通索引:没有唯一性的要求,就是建了一个字典的目录而已 约束constraint unique约束(唯一键约束) 定义了为一键索引,就定义了为一键约束 primary key约束 定义了主键就定义了主键约束 foreign key约束 外键在表b中的列,关联表A中的主键,表B中的就是外键 如果在表B中插入一条数据,B的外键插入了一个值,这个值必须事表A中存在的主键值 修改表B的外键也是同样,外键值同样要在表A中存在 表A要删除一条记录就等于删除一个主键,表B中引用到了这个主键必须先删除表B中主键的记录,然后才能删除表A的记录,否则删除失败 修改表A的主键,由于主键唯一性,修改的主键相当于插入新主键,表B引用过这个主键,将阻止表A的主键修改,先删除表B相关记录,才能修改表A的主键 外键约束,是为了保证数据的完整性
DML语句
insert into table_name (col_name,,,,) values (values1,) 像表中插入一行数据,自增字段,缺省值字段,可为空字段可以不写 insert into table_name SELECT,,,,, 将select查询的结果插入到表中 insert into table_name (col_name,,,,) values (values1,) on DUPLICATE KEY UPDATE col_name1= values1 如果主键冲突,唯一键冲突就执行update后的设置,主键不在就新增,在就更新 insert ignore into table_name (col_name,,,,) values (values1,) 如果主键冲突,唯一键冲突就忽略错误,返回一个警告
update tbl_name set col_name1=expr1 where condition delete [ignore] from tbl_name [where condition] select [distinct] [from table_references] [where where_definiton] [group by {col_name |expr | position}] [asc |desc],...[with rollup] [having where_definition] [order by {col_name |expr | position}] [asc |desc],...[with rollup] [limit {[offset,] row_count | row_count OFFSET offset}] [for update|lock in share mode] for update会把行进行锁定,这就是排他锁
import pymysql conn = pymysql.connect('67.216.218.7', 'test', '1qazxsw2', 'blog') cursor = conn.cursor() try: insert_sql = "insert into blog (id,name,mail,password) values (1,'harden','harden@qq.com','hardenpassword)" rows = cursor.execute(insert_sql) conn.commit() except: conn.rollback() finally: if cursor: cursor.close() if conn: conn.close()