mysql

mysql基础

  1mysql存储结构: 数据库 -> 表 -> 数据   sql语句

  2)管理数据库:

增加: create database 数据库 default character utf8;

删除: drop database 数据库;

修改: alter database 数据库 default character gbk;

查询: show databases / show create database 数据库;

  3) 管理表:

 选择数据库:use 数据库;

 增加: create table (字段名字段类型,字段名字段类型......);

 删除: drop table ;

 修改:

添加字段: alter table 表 add [column] 字段名 字段类型

删除字段:   alter table 表 drop [column] 字段名;

修改字段类型: alter table 表 modify 字段名 新的字段类型;

修改字段名称 : alter table 表 change 旧字段名 新字段名 字段类型;

        修改表名称:   alter table 表 rename [to] 新表名;

查询: 

show tables  /  desc student;

 4) 管理数据:

  增加: insert into (字段1,字段2,。。。) values(1,值2.。。。。);

  删除: delete from 表 where 条件;

  修改: update 表 set 字段1=1,字段2=2...... where 条件;

  查询: 

 4.1)所有字段: select * from ;

 4.2)指定字段: select 字段1,字段2.... from ;

 4.3)指定别名: select 字段1 as 别名 from ;

                         4.4 )合并列: select (字段1+字段2) from ;

 4.5)去重: select distinct 字段 from ;

 4.6)条件查询:

a)逻辑条件 :and()     or(或)

select * from 表 where 条件1 and/or 条件2

    b)比较条件: >  <  >=  <=  =  <>   between and(在。。。之间)

select * from 表 where servlet>=90;

c)判空条件: 

 判断null: is null   /  is not null

判断空字符串: =''    /  <>''

d)模糊条件: like 

  %:  替换任意个字符

  _:   替换一个字符

4.7 分页查询:limit 起始行,查询行数

起始行从0开始

4.8 排序: order by 字段 asc/desc

asc: 正序,顺序

desc:反序,倒序

4.9 分组查询:group by 字段

4.10: 分组后筛选: having 条件

SQL语句的分类:

DDL: 数据定义语言

create / drop / alter 

DML:数据操作语句

insert / delete /update / truncate 

DQL: 数据查询语言:

            select / show 


mysql加强

1)数据约束(表约束)

 默认值: default 默认值

 非空:   not null

唯一: unique

主键: primary key (非空+唯一)

自增长: auto_increment

外键: foreign key   约束两种表

2)关联查询(多表查询)

2.1 交叉连接(产生笛卡尔积:原因:连接条件不足够)  表数量-1

2.2 内连接查询: inner join  

只有满足连接条件的数据才会显示!!!

2.3 左【外】连接查询:left [outer] join

左表的数据必须全部显示,用左表去匹配右表的数据,如果右表有符号条件的数据则显示符 合条件的数据;如果不符合条件,则显示null

2.4 右【外】连接查询: right [outer] join

右表的数据必须全部显示,用右表去匹配左表的数据,如果左表有符号条件的数据则显示符 合条件的数据;如果不符合条件,则显示null

2.5 自连接查询

3)存储过程

-- 创建存储过程语法

delimeter 结束符号

create procedure 名称(IN/OUT/INOUT  参数名称 参数类型)

begin

带逻辑的sql语句

end 结束符号

 

--调用存储过程

CALL 存储过程名称(实际参数);


存储引擎:某一张表的存储数据的格式,mysql数据库特有的,可以在my.ini文件中修改  default-storage-engine

MyISAM:可以设置为只读来加快检索效率,设置压缩节省空间  格式.frm,数据.MYD ,索引文件.MYI

InnoDB:默认的,支持事物,支持外键以及引用的的完整性,包括级联删除和更新。.frm格式表示,崩溃后提供自动恢复

MEMORY:速度快,表数据、索引存储在内存中。表级锁机制,不包含TEXT或BLOB字段,不能存图片


事物:Transaction

一个最小的不可在分的工作单元。

通常一个事务对应一个完整的业务。如转账

而一个完整的业务选由批量的DML语句(insert,update,delete)共同联合完成。

事物只和DML语句有关系,或者说DML语句才有事务。

原子性:事务的最小工作单元,不可再分

一致性:事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败

隔离性:事务A和事务B之间具有隔离

持久性:事务的保证,事务终结的标志。


开启事务:Start Transaction   任何dml语句的执行,标志事务的开启

事务结束:end Transaction  提交、回滚操作

提交事务:commit Transaction  将dml语句操作历史记录和底层硬盘文件的数据进行同步

回滚事务:rollback Transaction  将dml语句操作历史记录全部清空

和事务有关的SQL语句【TCL】

事务进行过程中,未结束之前,DML语句是不会更改底层数据文件中的数据


在mysql数据库管理系统中,默认情况下,事务是自动提交的。

关闭自动提交的方式:

1)手动开启事务。

2)查询自动提交状态。show variables like '%commit%'; 关闭自动提交 set autocommit=off;(on开启)

本次session有效:set session autocommit=off;

事务的四个特性之一:隔离性(isonlation)

4个隔离级别:

read uncommitted 读未提交

——事务A和事务B,事务B可以读取到。读到“脏数据”,“Dirty Read”脏读

——隔离级别最低,理论上存在,数据库默认的都高于该级别

read committed 读已提交

——事务A和事务B,事务A提交的数据,事务B才能读取到。

——导致“不可重复读”,假如A、B共用同一账户,A第一次读,余额1000,在次期间,B花掉200,A第二次看,只剩下800了。oracle默认是该级别

repeatable read 可重复读

——事务A和事务B,事务A提交之后的数据,事务B读取不到。

——事务B是可以重复读取数据的。

——换句话说:对方提交之后的数据我还是读取不到,类似读的缓存数据

——mysql默认该级别,可以达到重复读的效果,但插入操作是会导致“幻象读”,(innoDB无幻,尚未理解

serializable 串行化

——事务A和事务B,在事务A在操作数据库中表的数据的时候,事务B只能排队等待。

——很少用,效率低,可以避免幻读,因为每次都是读取数据库中真实的记录。不存在并发操作了。

以上4个级别,这篇博文写的通俗易懂:http://blog.csdn.net/qq_33290787/article/details/51924963

修改隔离级别方法:级别可在配置文件中设置:transaction-isolation = READ-COMMITTED

命令修改方式

           set  [无/session(会话级)/global(全局级)] transaction isolation level <isolation-level>;

<isolation-level>可选值:

READ UNCOMMITTED

READ COMMITTED

REPEATABLE READ

SERIALIZABLE

查看隔离级别:select @@tx isolation;  (@@session.tx 会话级,@@global.tx全局级)


1)什么是索引?

1。索引:index,相当于一本字典的目录,用于提高程序的检索【查询】效率

2.主键自动添加索引,所以通过主键查询,效率较高

3.索引和表相同,都是一个对象,表是存储在硬盘文件中,那么索引是表的一部分,索引也是存储在硬盘文件中。

4。在mysql数据库管理系统中,对表中记录进行检索的时候,通常包括几种检索方式:

——全表扫描【效率较低】

——通过索引进行检索【提高查询效率】

索引是排序的

5.一个表中的所有字段都可以添加索引。

6.什么情况下适合给表中的某个字段添加索引?

——字段数据量庞大

——字段很少进行DML操作【经常修改的字段,需要不断的维护索引,反而会影响效率

——字段经常出现在where条件中

7如何创建索引?例子:dept_dname_index:索引名称  dept 表名  dname 建索引的字段

create index dept_dname_index on dept(dname);

create unique(唯一性约束) index dept_dname_index on dept(dname);

8.怎么删除索引

drop index dept_dname_index


视图:创建格式

created view  myview(这是视图名) as   select * from emp;只来源于查询语句

create table emp3 as select * from emp;区别?

相当于建立了一张临时表:查询语法不变,更新操作会对应到  来源表

删除视图会影响到源表

用途:隐藏表的细节


DBA命令:待续

数据库设计三范式:

设计数据库表的时候所依据的规范,共三个

第一范式:要求有主键,并且要求每一个字段原子性不可再分

第二范式:所有非主键字段完全依赖主键,不能产生部分依赖(多对多关系,尽量别使用联合主键,以避免数据冗余)

第三范式:所有非主键字段和主键字段之间不能产生传递依赖

几个比较经典的设计:

一对一:分两张表,共享主键   分两张表,外键唯一

一对多:多的一方加外键,外键字段引用一的一方中的主键

多对多:学生表,教师表,师生关系表,

实际开发中是怎样的?

待续

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值