Mysql基础

1.事务ACID

  • 原子性(atomicity)一个事务必须被视为一个不可分割的最小工作单元,整个事务中所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作;
  • 一致性(consistency)数据库总是从一个一致性的状态转换到另外一个一致性的状态;
  • 隔离性(isolation)一个事务所做的修改在最终提交以前,对其他事务是不可见的;
  • 持久性(durability)一旦事务提交,则其所做的修改就会永久保存到数据库中。

2.四种隔离级别

  • READ UNCOMMITTED(未提交读),事务中的修改,即使没有提交,对其他事务也都是可见的,事务可以读取未提交的数据,也被称为脏读(Dirty Read),这个级别会导致很多问题;
  • READ COMMITTED(提交读),大多数数据库系统的默认隔离级别,一个事务开始时,只能“看见”已经提交的事务所做的修改,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的,也叫不可重复读(nonrepeatable read),有可能出现幻读(Phantom Read),指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(Phantom Row);
  • REPEATABLE READ(可重复读),通过InnoDB和XtraDB存储引擎,是MySQL的默认事务隔离级别;
  • SERIALIZABLE(可串行化)最高级别,通过强制事务串行执行,避免了幻读问题,会在读取的每一行数据上都加锁,可能导致大量的超时和锁争用的问题。

3.MySQL存储引擎

  • InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定, MySQL 5.5 起成为默认数据库引擎
  • MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事物。是MySQL 5.0 之前的默认数据库引擎。
  • Memory存储引擎将表中的数据存储到内存中,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在 MySQL 重新启动时丢失。

存储引擎的选择
不同的存储引擎都有各自的特点,以适应不同的需求,如下表所示:

功 能 MYISAM Memory InnoDB Archive
存储限制 256TB RAM 64TB None
支持事物你 No No Yes No
支持全文索引 Yes No No No
支持数索引 Yes Yes Yes No
支持哈希索引 No Yes No No
支持数据缓存 No N/A Yes No
支持外键 No No Yes No

如果要提供提交、回滚、崩溃恢复能力的事物安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择

如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率

如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果

如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息可以使用Archive

使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能

查看系统支持的存储引擎:show engines;
查看当前默认的存储引擎:show variables like '%storage_engine%';
查看某个表使用的存储引擎:show create table table_name;
修改表引擎:alter table table_name engine=innodb;

关闭MySQL:mysqladmin -u root -p shutdown
连接MySQL:mysql -u root -h localhost -p
创建数据库:create database db_name;
查看: show databases;
选择:use db_name;
查看当前use了哪个库:select database();
创建表: create table user(
id int not null auto_increment comment '主键,自增',
name varchar(40),
PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
查看所有表:show tables;
查看表结构:desc db_name;
修该表所用的字符集:alter table table_name character set utf8;
重命名表:rename table old_table_name to new_table_name;
删除表:drop table table_name;

主键约束 primary key

主键约束 主键列的数据类型不限,但此列必须是唯一并且非空。当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。

创建主键约束

create table temp(

    id int primary key,
    name varchar(20)
);

添加主键约束:alter table temp add primary key(id,name);

外键约束 foreign key

外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系

-- 主表

create table temp(

    id int primary key,
    name varchar(20)
);

-- 副表

create table temp2(

    id int,
    name varchar(20),
    classes_id int,
    foreign key(id) references temp(id)
);

多列外键组合,必须用表级别约束语法

-- 主表

create table classes(
    id int,
    name varchar(20),
    number int,
    primary key(name,number)
);

副表

create table student(

    id int auto_increment primary key,
    name varchar(20),
    classes_name varchar(20),
    classes_number int,
    /表级别联合外键/
    foreign key(classes_name, classes_number) references classes(name, number)
);

删除外键约束:alter table student drop foreign key student_id;

增加外键约束:alter table student add foreign key(classes_name, classes_number) references classes(name, number);

唯一约束unique

唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。

创建唯一约束:创建表时设置,表示用户名、密码不能重复

create table temp(

    id int not null ,
    name varchar(20),
    password varchar(10),
    unique(name,password)
);

添加唯一约束:alter table temp add unique (name, password);

修改唯一约束:alter table temp modify name varchar(25) unique;

删除约束:alter table temp drop index name;

非空约束 not null 与 默认值 default

非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。

创建非空约束:创建table表,ID 为非空约束,name 为非空约束 且默认值为abc

create table temp(

    id int not null,
    name varchar(255) not null default 'abc',
    sex char null
);

增加非空约束:alter table temp modify sex varchar(2) not null;

取消非空约束:alter table temp modify sex varchar(2) null;

取消非空约束,增加默认值:alter table temp modify sex varchar(2) default 'abc' null;

存储过程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容