mysql阅读笔记八

 字符串类

CHARSET(str) //返回字串字符集
CONCAT (string2 [,... ]) //连接字串
INSTR (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0
LCASE (string2 ) //转换成小写
LEFT (string2 ,length ) //从string2中的左边起取length个字符
LENGTH (string ) //string长度

Not uniquetable/alias: 出现该错误,是由于在该mysql语句中使用同一个表用了两次,导致前后发生歧义,解决办法就是给其中一个表或者两个表起一个别名即可,

 

每个数据库连接都有个全局变量@@autocommit,表示当前的事务模式,它有两个可选值:

–0:表示手工提交模式。

–1:默认值,表示自动提交模式。

•如果要察看当前的事务模式,可使用如下SQL命令:

–mysql> select @@autocommit

•如果要把当前的事务模式改为手工提交模式,可使用如下SQL命令:

–mysql> set autocommit=0;

 

Select * into outfile 文件路径 from table;将查询结果存入文件 将outfile改为dumpfile适用于将数据库中二进制文件例如图片取出

 

 

 

 

关键字any等于集合中的任何一个即可;相当于in

!=all  不等于集合中的所有元素,相当于notin

!=any 不等于集合中的任何一个,只要和集合中的一些元素不相等即可,满足条件,例如李白!=any{李白,杜甫},因为李白与杜甫不相等,故满足条件的

Any 和some是同义词

Exists(subquery)

如果子查询返回记录,则exists返回1;否则返回假

Inner join,cross join [条件]。没有条件就是笛卡尔积。

Left join, right join 条件。左和右的区别在于,如果是左连接,那么即使左表的记录,连接不到,也会在最终结果内显示。

Where和on可以使用条件表达式。

Using (公共字段),需要使用公共字段。

内联可以使用whereon 和using条件

select *  from user_id a inner join user_profileb on a.id = b.id;

select * from user_id a,user_profile b where a.id = b.id;     

select *  from user_id a join user_profile b ona.id = b.id;    

 通常where还有筛选的含义,而on和using只有连接条件的意思。因此通常连接条件使用on或using。而筛选条件使用where加以区分。

On表示连接条件,在连接时进行数据过滤;where表示数据过滤条件,即先完成数据交叉连接,再进行数据过滤

外联 只可以使用using和on作为条件,using去掉重复字段,放在列表前

Using要求负责连接的两个实体的字段,完全一致;在数据字段相同时,使用using,在通用时使用on,在数据过滤时,使用where

  要查询在一个相关的表中不存在的数据, 通过id关联,要查出user_id表中存在user_profile中不存在的记录:
select count(*) from user_id left join user_profile on user_id.id =user_profile.id where user_profile.id is null;

 

内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索   students   和   courses   表中学生标识号相同的所有行。 

 

左向外联接的结果集包括   LEFT   OUTER   子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。 

 

完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。 

 

交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。 

 

创建视图:

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE |TEMPTABLE}]    VIEW view_name [(column_list)]   AS select_statement 

视图名必须唯一,同时不能与表重名。

视图可以使用select语句查询到的列名,也可以自己指定相应的列名。

可以指定视图执行的算法,通过algorithm指定。

查看结构

SHOW CREATE VIEW view_name

删除视图

DROP VIEW [IF EXISTS]    view_name[, view_name];

修改视图结构

ALTER VIEW view_name [(column_list)] ASselect_statement 

 

事务:事务是指逻辑上的一组操作,组成这组操作的各个单元,要不全成功要不全失败。

事务的特性:

1、原子性(Atomicity)

              事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

2、一致性(Consistency)

               事务前后数据的完整性必须保持一致。

3、隔离性(Isolation)

               多个用户并发访问数据库时,一个用户的事务不能被其它用户的事物所干扰,多个并发事务之间的数据要相互隔离。

4、持久性(Durability)

                一个事务一旦被提交,它对数据库中的数据改变就是永久性的。

事务的实现:

1,要求是事务支持的表类型

2,执行一组相关的操作前开启事务

3,整组操作完成后,都成功,则提交,如果存在失败,选择回滚,则会回到事务开始的备份点。

语法:

Start transaction

Rollback

Commit

是否自动提交?

Autocommit=0|1。

Start transaction;、///关闭自动提交,如果事务结束,成功或者失败都会回到自动提交状态,回到start之前的状态

 

普通索引:允许重复的值出现。
create table tableanme (fieldname1 columntype,fieldname2 columntype,index [indexname](fieldname1 [,fieldname2...]));

 

alter table tablename add index [indexname](fieldname1 [fieldname2...]);

 

删除索引
DROP INDEX index_name ON tbl_name;
alter table table_name drop index index_name;

 

查询索引
show index from table_name;
show keys from table_name;
desc table_Name;

 

Mysql遇到显著性能不良,可使用showprocesslist显示所有活动的进程与执行时间;可以使用kill终结某个特定的性能;

如果就已经输入几行查询命令,不想执行它,可以敲入\c来取消执行例如selectnow()\c

>mysql –h 远程主机 –p –u sampadm sampdb

命令将把sampadm用户连接到远程主机的sampdb的数据库上去。

对于包含null值的数据行,如果设定为升序排列,它们将出现查询结果的开头,如果按照降序排列,它们将出现查询结果的末尾,如果你想让按去世日期降序对总统的姓名进行排序,那么健在(去世日期为null)的总统的姓名将出现在查询结果的末尾,如果想让后者出现在查询结果的开头,应该使用下面这样的查询语句:

Select last_name,first_name,death from president

Order by if(deatb isnull,0,1),death desc;

If()函数的作用是对紧随其后的表达式(第一参数)进行求值,再根据表达式求职结果的真假返回它的第二或第三参数,在遇到null的值的时候,if()函数的求值结果将是0,遇到非空,if()函数的求值结果为1,最总将结果是把包含null值的数据行全部放在没有null值的数据行的前面。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值