看到了mysql必知必会
总结了以下几个以后很有可能用到的知识点:
1.在检索多列的时候,需要再列名之间用“,”进行分开,最后的列名后面不加。
select id,uid,name from 表名; select* from 表名 代表检索所有的列
2.在检索指定从第几行开始后的几行
select id from 表名 limit 3,4;第3行开始的后4行,要注意的是检测出来的第一行为0.(limit 4 OFFSET 3)
3.可以用 order by 语句对检测数来的进行排序,因为数据会受到修改编辑的影响导致顺序错乱。
4.同理,行的检索。在列 select id,uid,name from 表名 order by name ,uid 进行排序(接下来就是对order by的延伸,比如指定关键字进行排序,用DESC为降序,ASC为升序)
5.利用我们在TP中常用的where。 select id,name from 表名 where name XX
只会返回名字XX的数据,而且只会返回id name两列,where语句的大小于比较使用的还是 > < = (where列名is null可以用于检测该列数据为空的数据)
6.当使用where进行条件筛选的时候,可以用AND进行删选条件的增加。OR的话是让MYSQL检索匹配任一条件进行。AND的优先级高于OR,在进行组合的时候需要注意。
7.where 可以用In来进行数据过滤:where 条件 in (1,2)(一般是指范围);类似于OR的功能。NOT可放在IN进行否定的条件筛选。
8.通配符,用于查询未知范围或数值的的数据。需要用到LIKE进行操作。
例:where uid like “ab%” 就会出现ab123 ab222等等;注意点是数据搜索的时候是最好尾部加一个%避免空格的影响。”_”和”%”类似,但是”_”只能对一个字符进行筛选。
9.正则表达式 where id REGEXP “.000”将解锁出1000.2000.3000......
如果我们的id数据有1000和2000
(1)where id LIKE 1000,返回为空;(2)where id REGEXP 1000,返回1000
10.OR在正则中表现形式为 where id REGEXP”1000|2000”
匹配字符 where id REGEXP “[123]people”
如果数据存在,id输出1 people;2 people;3 people
[]可以用来[1-5];[a-c]
- 比如我们想找存在.的数据,需要进行\\.来进行操作,称之为前导。通配符类详情P58
12.定位符 ^ ,可以规定搜索匹配开始的位置。5^[0-9] 在0-100中,会搜索出50-59
13.字符串的拼接:Concat()函数可以用来拼接两个列(这个是MYSQL特别之处,其他SQL可能使用”+”或者是”||”) Concat(name,” (“,uid,”)”) 输出::名字 (10);注意名字和(10)之前有空格!!!
14.函数。RTrim()去除列值右边的空格;Upper()将文本转为大写,数据输出的时候会出现两次。语法 Upper(uid) AS uid_upcase 1.AC ab 2.AC AB
有个神奇的函数 Soundex()函数可以匹配所有发音类似的名字,时间的函数详看P71,数值处理P74
15.聚集函数 AVG() COUNT(确定表中行的数目或符合特定条件的行的数目) MAX() MIN() SUM()
DISTINCT参数与ALL不同,只会选择输出不同的值,ALL为默认行为。
16.分组数据,使用GROUP BY指示MySQL分组的数据,将对选出的组进行聚集,不会对整个结果进行。HAVING可以代替WHERE,区别是HAVING可以过滤筛选分组,WHERE只能过滤筛选行。注:在使用GROUP BY会出现一定顺序问题,需要使用ORDER BY对其进行重新排序。
17.子查询。顾名思义,就是在查询内再套一层查询,但是子查询优先级高。
18.联结:关系表:利用主键和外键。主键为唯一标识,外键包含另一个表的主键值,定义了两个表之间的关系。
19.组合查询。我们可以用UNION将两句SQL语句进行组合查询,且输出组合原单个查询的结果集。UNION在查询的时候会自动去除重复的行。
20.全文本搜索。可以使用 Match()和Against()执行全文本的搜索,Match()指定被搜索的列,Against()指定要使用的搜索表达式
21.布尔文本搜索。操作符在P128,简单来说,就是在检索的时候增加条件。
-------------------------------------------------------------------------------------------------------------------
22.数据插入。INSERT为数据插入,SELECT为数据查询。
基本语法INSERT INTO 表名
VALUSE(按列所需要的数据进行,注,由于第一列为自增,所以填NULL)
NSERT插入多行的时候用”;”区分。
23.INSERT SELECT就是插入检索出的数据。基本语法:
INSERT INTO 表名1(id,name) SELECT id,name FROM 表名2
注意的是,MYSQL关心的是位置而不是列名。
----------------------------------------------------------------------------------------------------------------------
24.更新表中特定的行UPDATE ; 删除数据DELETE
基本语法 UPDATE 表名 SET name=”fjf ” WHERE id = 1;
DELETE 表名 SET name=”fjf ” WHERE id = 1;
25.NULL的使用。 CREATE TABLE(创建表)
CREATE TABLE 表名(
id int NOT NULL,
name int NOT NULL,
content text NULL,
PRIMARY KEY (order_num)
)ENGINE=InnoDB;
表示id和name字段不能为空,content字段可以为空(主键是默认不能为NULL的)
可以使用DEFAULT来指定默认值,在NOT NULL的条件下。
content text NOT NULL DEFAULT 123456789 ,
26.AUTO_INCREMENT确定了哪一个字段可以成为主键。每个表只能允许存在一个。
27.ENGINE=InnoDB;为指定引擎,如果省略这个,会使用默认引擎。MYSQL使用多个引擎处理。(P151)注:外键不能跨引擎使用。
28.ALTER TABLE:用于定义外键,可以使众多表一起修改列的信息
DROP TABLE:用于删除表
RENAME TABLE:用于重命名表
----------------------------------------------------------------------------------------------------------------------
29.使用视图。可以将查询包装成一个虚拟表。虚拟表不包含表中应有的任何列或者数据,只包含SQL语句。类似于封装,把需要的东西封装好,我们只需要知道调用的时候输入什么就可以了。
注:
(1)视图表唯一的名称;
(2)视图表可以使用ORDER BY,但是SELECT出来的数据含有ORDER BY,则视图中的ORDER BY将会被覆盖掉;
(3)视图表不能索引,也不会有关联的触发器和默认值。
(4)视图表可以和表在一起使用,如编写一条联结表和视图的SELECT语句。
30.视图用CREATE VIEW语句创建。使用SHOW CREATE VIEW viewname查看创建视图的语句。
使用DROP可以删除视频,其语法为DROP VIEW viewname。
更新视图的时候,可以先用DROP再用CREATE,也可以直接使用CREATE OR REPLACE VIEW(如果视图不存在,第二条语句会创建一个视图;如果更新的视图存在,第二条语句会替换原有视图)
31.视图的更新。可以使用INSERT,UPDATE和DELETE进行更新。
----------------------------------------------------------------------------------------------------------------------
32.存储过程。
(1)MYSQL的存储语句为CALL。例:CALL productpricing(@hight,@low,@average);执行了名为productpricing的存储过程。 注:所有MYSQL变量都必须@开始
(2)在创建存储过程中:
CREATE PORCEDURE productpricing()
BEGIN
SELECT Avg(prod_price) AS priceaverage
FROM products;
END;
可以使用BEGIN和END来限定存储的过程体。
(3)CALL productpricing()执行刚创建的存储过程并显示返回的结果。存储实际上是一种函数,所以在存储过程名后需要加()。
33.删除存储过程。 DROP PROCEDURE productpricing
删除的时候productpricing后面没有加()。为了防止指定的过程不存在而报错,可以使用
DROP PROCEDURE IF EXISTS,即指定的过程存在才删除。
34.检查存储过程。SHOW CREATE PROCEDURE。获取建表详情:SHOW PROCEDURE STATUS。
----------------------------------------------------------------------------------------------------------------------
35.游标。游标是一个存储在MYSQL服务器上的数据库查询,是被语句检索出来的结果集。游标可以用DECLARE语句创建
例:CREATE PROCEDURE 过程名()
BEGIN
DECLARE 游标名 CURSOR
FOR
SELECT 字段 FROM 表名;
END;
注:游标在存储完成之后会消失。
36.游标打开。由OPEN CURSOR语句打开。声明游标之后,再次打开OPEN+游标名;关闭 CLOSE+游标名,释放游标使用的资源和内存。如果不用CLOSE,当END语句会自动关闭。
游标的数据可以使用FETCH进行访问
----------------------------------------------------------------------------------------------------------------------
37.使用ROLLBACK可以撤销MYSQL语句;COMMIT可以确保明确提交。
38.保留点。设置:SAVEPOINT 标点名。 回退保留点ROLLBACK TO 标点名。
39.SET autocommit=0;可以让数据库不会自动提交更改。不管COMMIT语句,直到autocommit被设置为真时。
40.使用字符集和校对顺序。SHOW CHARACTER SET。显示所有可用的字符集以及每个字符集的描述和默认校对。SHOW COLLATION,显示所有可用的校对,以及他们使用的字符集。
41.CREATE USER创建新用户账号
CREATE USER 用户名 IDENTIFIED BY 口令;RENME UESR aaa TO bbb;名字从aaa变成bbb
DROP USER 用户名,删除了用户账号。
SHOW GRANTS FOR,设置账号的权限,可以登入,但是无法修改数据。
更好的是使用GRANT语句来设置权限。需要赋予的权限,赋予权限的数据库或者表,用户名。
GRANT SELECT ON 数据库名.*(这个数据库所有表) TO 用户名:表示用户在这个数据库上所有表只能执行查询的功能。
42.REVOKE为撤销赋予的权限。
REVOKE SELECT ON 数据库名.*(这个数据库所有表) TO 用户名;撤销的时候,权限必须在,否则容易出错。
43.GRANT和REVOKE可以在几个层次上使用
这个服务器,使用GRANT/REVOKE ALL ;整个数据库 GRANT/REVOKE ON 数据库名.*
特定的表 GRANT/REVOKE ON 数据库名.表名 ; 特定的列 ; 特定的存储过程。P202-203
44.SET PASSWORD FOR 用户名 = Password(‘新口令’);
SET PASSWORD = Password(‘新口令’);设置自己的密码
45.mysqldump将所有数据库内容到某个外部的文件。mysqlhotcopy从一个数据库复制所有数据。
BACKUP TABLE或者SELECT INTO OUTFILE转储所有数据到某个外部文件。这两个语句都接受要创建的系统文件名,此系统文件必须不存在,否则会出错。数据可以用RESTORE TABLE来复原。
46.ANALYZE TABLE检查表键是否正确;CHECK TABLE用来针对许多问题对表进行检查。CHANGED检查最后一次检查以来改动的表。MEDIUM检查所有被删除的链接并进行键检验。QUICK只进行快速扫描。
47.日志文件。
错误日志:通常命名为hostname.err,位于data目录中,该日志可以使用--log-error命令行选项更改.
查询日志。他记录MYSQL所有活动,通常命名为hostname.log,位于data目录中,该日志可以使用--log命令行选项更改.
二进制日志:记录更新过的数据,或者可能更新过数据的所有语句。通常命名为hostname.bin,位于data目录中,该日志可以使用--log-bin命令行选项更改.
缓慢插叙日志。这个日志记录执行缓慢的任何查询。可以优化数据库。通常命名为hostname-slow.log,位于data目录中,该日志可以使用--log-slow-queries命令行选项更改.