1. 创建数据库
create database 'db_name';
创建表
create table tb_name (
col_name type constraint
) engine = 'Innodb' default charset = 'utf8'
2. 事务
(1)只有引擎是Innodb的才支持事务;
(2)事务保证批量操作要么全执行,要么全不执行;
(3)事务用来管理delete,update,insert的。
事务特性:
(1)原子性automicity:事务要么不执行,要么全执行;
(2)一致性consistency:事务的操作使数据库数据从一个状态到另一个状态,要跟预期的效果一样;
(3)隔离性isolution:数据库是允许事务并发的,对并发的控制要用隔离性来做;
(4)持久性durability:提交事务之后,数据就会被持久到本地磁盘上。
不隔离可能会发生的问题:
(1)脏读:其他的事务可以读取一个事务修改了但是未提交的数据。
(2)不可重复读:事务前后读取的值不一样,数据项中途被其他事务修改了。
(3)幻读:事务前后读取行数的行数不一样,其他事务中途插入或者删除了数据行。
(4)死锁:事务占领了彼此需要的数据,同时进入等待会发生死锁。
隔离级别:
(1)串行化:可能死锁,会避免脏读,不可重复读,幻读。
(2)可重复读:因为没加锁,所以不会死锁,可避免脏读,不可重复读。(MySQL默认)
(3)读已提交:不死锁,可避免脏读。(Oracle默认)
(4)读未提交:不死锁,其他的都不能避免。
事务控制语句:
begin 或 start transaction; //开启事务
rollback 或 rollback work; //回滚事务
commit 或 commit work; //提交事务
set autocommit = 1; //设置自动提交
set autocommit = 0; //禁止自动提交
参考:www.cnblogs.com/fjdingsd/p/…
3. alter, modify, change, rename 用法
(1)新增一列
alter table tb_name add x type;
(2)删除一列
alter table tb_name drop x;
(3)改变某列类型
alter table tb_name change old_col new_col new_type; //修改列类型及重命名列
alter table tb_name modify col new_type; //修改列类型,不能给列重命名
alter table tb_name alter col set default = 'default_value'; //修改列默认值
alter table tb_name alter col drop defalt; //删除列默认值约束
alter table tb_name rename to new_tb_name; //给新表重命名
4. 索引
(1)索引是存储引擎用于快速找到记录的数据结构。MySQL中有一张索引表,存储了主键和索引,并指向了实体表中的记录。
(2)索引经常用来作为条件筛选的字段上。
(3)弊端:索引加快了检索,但是,对于insert,delete,update这些操作却要系统去额外的维护检索文件。
(4)索引的类别:主键索引(也约束),唯一索引(也约束),普通索引
a.主键索引:该列或该组合列唯一且无null
alter table tb_name add primary key(col_name); //添加主键,也可创建表的时候添加
b.唯一索引:该列或该组合列唯一,可有多个null
alter table tb_name add unique [unique_name] (col_name(length)); //是char或varcharlength可小于实际长度去节省空间
create unique index index_name on tb_name(col_name(length));
c.普通索引:该列或该组合可不唯一,可有多个null
alter table tb_name add index index_name(col_name(length));
create index index_name on tb_name(col_name(length));
5. where 和 having 的区别
(1)where:它作为条件筛选时,它的筛选字段是数据库表里真实存在的,用函数临时产生的字段不能用作它的筛选字段,后面不能跟聚合函数;
(2)having:它作条件筛选时,筛选字段是在前面 select 中有出现过(select筛选之后再次筛选),函数临时产生的也可,后面可用聚合函数再次筛选。
注:a. SQL语句书写顺序select、form、where、group by、having、select、order by、limit
b. SQL语句执行顺序from、where、group by、having、select、order by、limit
6. 存储引擎
(1)存储引擎:数据库系统通过存储引擎来对数据进行创建、增删查改。当前的数据库支持多种存储引擎,可以在创建的时候进行指定所需的存储引擎。关系型数据都是以表的形式来存储的。
create table t('id' int auto_increament)engine = InnoDB default charset = utf8;
(2)InnoDB:支持事务,表级行级锁 ,外键
(3)MyISAM:插入查找快,不支持事务和外键,他的读操作与写操作,读操作与读操作是串行的,锁级别是表锁,加锁快,但是操作粒度太大,所以用在查找频繁的业务场景中
(4)表锁:共享锁和排他锁
共享锁:对读操作,一个线程要读取一张表中的数据,先要看这张表是否锁了,如果用排他锁锁住了,则不能读了;如果是共享锁锁住了,可以读;如果没有锁,就先用共享锁把该表锁起来再读,不允许其他线程写操作,但是其他线程也可以读。
排他锁:对于写操作,一个线程要修改一张表,先查看该表是否加锁了,若加了排他锁或者共享锁,则不能写,报异常;若没有加锁,则加排他锁锁起来,不允许其他线程读写。
(5)行锁:共享锁、排他锁和表锁(意向共享锁、意向排他锁)
共享锁:允许事务去读一行数据,禁止其他的事务给该行数据加排他锁
排他锁:事务修改数据时,禁止其他的事务获得共享锁和排他锁,即其他事务不能读写
意向共享锁:事务要给数据加共享锁,先要获得表的意向共享锁
意向排他锁:事务要给数据加排他锁,先要获得表的意向排他锁
(6)InnoDB的行锁:当条件字段是索引时才会给数据加行锁,否则就加表锁
参考:www.cnblogs.com/chenqionghe…
7. 存储过程