字符串类
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适用于将数据库中二进制文件例如图片取出
l 关键字any等于集合中的任何一个即可;相当于in
l !=all 不等于集合中的所有元素,相当于notin
l !=any 不等于集合中的任何一个,只要和集合中的一些元素不相等即可,满足条件,例如李白!=any{李白,杜甫},因为李白与杜甫不相等,故满足条件的
l Any 和some是同义词
l Exists(subquery)
如果子查询返回记录,则exists返回1;否则返回假
l Inner join,cross join [条件]。没有条件就是笛卡尔积。
Left join, right join 条件。左和右的区别在于,如果是左连接,那么即使左表的记录,连接不到,也会在最终结果内显示。
l 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值的数据行的前面。