一 数据库
1)数据库基本操作
数据库安装完成连接(MySQL -u root -p)
显示已有数据库(show databases)
创建数据库(create database ***)
切换数据库(use database ***)
2)表基本操作
显示所有已存在表(show tables)
约束:主键(primary key)唯一且非空,
外键(foreign key),保证数据一致性,完整性
唯一(unique),默认(default),不为空(not null),自增(auto_increment)
创建表(create table ***(字段名 子段类型,,,,,字段名 子段类型);)
显示表信息(desc ***)
修改表信息:
- 修改表名:alter table tablename rename newtablename
- 修改列名:alter table tablename change oldcolname newcolname
newcoltype - 修改列类型:alter table tablename modify oldcolname newcoltype
- 修改列位置:alter table tablename modify oldcolname oldcoltype after
col2name|first - 添加列:alter table tablename add newcolname newcoltype
(constraints)(after col2name|first) - 删除列:alter table tablename drop colname
删除约束:alter table tablename drop constrainttype constraintname
删除表:drop table ***;
二 数据类型
注意敲黑板:数值类型后的数字只显示长度,不影响精度。字符串类型后的数字,限制了最大字符数。
三 数据库函数
- 绝对值 : ABS(x)
- 四舍五入:(round(x,y))进位 truncate(x,y)直接舍去小数点后y位 不进位
- 计算字符长度:char_length(str) 字符串自负的个数length(str)字符串字节个个数(不同编码下,不同)
- 删除空格:ltrim(str) rtrim(str)删除左右空格trim(str)删除开头结尾空格
- 合并字符串:concat(s1,s2…..),若有参数为null,则返回null;
- 字符串相连concat_ws(x,s1,s2…..)字符串间用x相连,若x为null,则返回null,若其它参数为null,忽略该参数
- 格式化函数:format(x,n)四舍五入format(N,frombase,tobase)不同进制之间的转换
- 当前日期 : curdate()和current_date()
- 当前时间 : current_timestamp()、localtime()、now()、sysdate()
- 获取日期:月month(date)周几dayname(date)一年的第几周week(date)一周内的第几天dayofweek() 一年内的第几周weekofyear()
- 条件判断:if(expr,v1,v2) ifnull(v1,v2)v1是null则v2否则v1
- 加密函数 : password(str);MD5(str);encode(str,pswd_str)
- 解密函数 : decode(crypt_str,pwd_str)
- 获取最后一个自动生成id值的函数:last_insert_id 返回最后一个insert或update为auto_increment设置的第一个发生的值,一次性插入多个值时,返回第一个
- 等等就不一一列举了,反正函数多多
四 查询数据(important)
- 基本查询语句 : select 字段名 from 表名;
- 单表查询 : 查询指定记录 : select 列名 from 表名 where 条件;
带in关键字查询 :in操作符用来查询满足指定范围内的条件的记录,使用in操作符,将所有检索条件用括号括起来,并用逗号分隔,只要满足条件范围内的一个值即为匹配项。与之相反,检索不在条件范围的用not;
带between and的范围查询 : 范围查询,需要两个参数
带LIKE的字符匹配查询 : 可以和LIKE一起使用的通配符有“%”“_”;百分号通配符‘%’匹配指定的位置任意长度的字符,甚至包括零字符,下划线通配符‘_’一次只能匹配任意一个字符
查询是否为空值 : null 和 not null;
带OR的多条件查询 : 满足其中一个条件的记录即可返回,与关键字IN作用一样(IN执行的速度快于OR,使用IN可执行更复杂的嵌套查询);
查询结果不重复 : select distinct 字段名 from 表名;
对查询结果排序 : ORDER BY(ASC 升序, DESC 降序)
分组查询 : GROUP BY 字段【HAVING<条件表达式>】GROUP BY关键字通常和集合函数一起使用,例如:MAX(), MIN(), COUNT(), SUM(), AVG()。
在GROUP BY字句中使用WITH ROLLUP,在所有查询出的分组纪录之后增加一条记录,计算查询出的所有记录总和。使用WITH ROLLUP时,不能同时使用ORDER BY子句进行结果排序。
使用limit限制查询结果的数量:limit 【位置偏移量】行数;位置偏移量,可选参数,指示MySQL从哪一行开始显示,第二个参数指示返回的的记录条数。
注意哦:limit放在order by之后,否则报错
3. 集合函数查询:
- COUNT()函数:COUNT(*)计算总行数,不管是否有数值或空值;COUNT(字段名)计算行数忽略空值的行。
- SUM()函数:求总和的函数,返回指定列值的总和。
- AVG()函数:指定数据的平均值
- MAX()函数:返回指定列的最大值
- MIN()函数:返回指定列的最小值
4. 连接查询:关系数据库最主要的查询
- 内连接查询(INNER JOIN)使用比较运算符进行表间某列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组成新的记录,在内连接查询中,只有满足条件的记录才能出现在结果关系中
- 外连接查询:连接查询将查询多个表中相关联的行,内连接时返回查询结果集合中的仅是符合查询条件和连接条件的行。外连接时需要包含没有关联的行中数据,即返回查询结果集中的不仅包含符合连接条件的行,而且还包括左表(左外连接或左连接)、右表(右外连接或右连接)或两个边接表(全外连接)的所有数据行
- left join :左连接,包括left outer子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果行中,右表所有选择列表列均为空值。A左连接B的记录=图3公共部分记录集C+表A记录集A1
- right join:右连接,返回右表中的所有行。如果右表的某行在左表中没有匹配行,左表将返回空值。A右连接B的记录=图3公共部分记录集C+表B记录集B1
5. 子查询:一个查询语句嵌套在另一个查询语句内部的查询,先计算子查询,结果作为外层另一个查询条件
- 带ANY、SOME关键字的子查询:只要满足内层子查询中的任何一个比较条件,就返回一个结果作为条件
- 带ALL关键字的子查询:使用ALL需要同时满足所有内层查询的条件
- 带EXISTS关键字的子查询:参数是一个人一多子查询,判断它是否返回行,如果至少返回一行,那么EXISTS结果为true,外层将进行子查询。
- 带IN关键字的子查询:内层查询语句仅仅返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较操作。
6. 合并查询结果:利用UNION关键字,可以给出多条select语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同。各个select语句之间使用UNION或UNION ALL关键字分隔。UNION不使用关键字ALL,执行时删除重复的记录,所有返回的行都是唯一的;使用关键字ALL的作用是不删除重复行也不对结果进行自动排序。格式如下:
SELECT column...FROM 表1
UNION [ALL]
SELECT column...FROM 表2;
7. 为表取别名: 表名 【AS】 表别名
8. 正则匹配:REGEXP关键字指定字符匹配模式
五. 索引
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可提高数据库中特定数据的查询速度。
- 创建索引:在create表时添加,在所有列之后 index indexname(col_name(length))
- /**alter table** tablename add index indexname(colname(length))**/
- create index** indexname on tablename(colname(length))
- 普通索引:只有索引加快数据的查询
- 唯一索引:unique index,索引列值必须唯一,可空,组合唯一索引,所有列的组合唯一
- 单列索引:在某一列上简历索引
- 组合索引:index
indexname(colname(length),colname2….)在多个列上建立索引,索引的使用遵循最左原则,不能使用局部(A,B,C)可用A,(A,B),(A,B,C),其他均不可用 - 全文索引:fulltext,只有MyISAM引擎支持,且char,varchar和text类型的字段,适合用于大字段
六. 数据库存储过程与函数
- 创建存储过程 CREATE PROCEDURE创建存储过程关键字 sp_name存储过程名称([ proc_paramrter参数列表 ] ) [ characteristics... ] runtine_body代码内容,可用BEGIN...END
- 创建存储函数 CREATE FUNCTION func_name ( [func_parameter] ) RETURNS type [characteristic...] routine_body
- 声明变量:declare var1 int; set var1 = 表达式。
七. 流程控制语句
- IF语句
IF expr_condition THEN sratement_list
[ELSEIF expr_condition THEN state_list]
[ELSEIF statement_list]
ENDIF
**如果expr_contidion求值为真,相应SQL语句列表被执行;没有则执行ELSE子句列表
2. CASE语句
CASE case_expr
WHEN when_value THEN state_list
[WHEN when_value THEN state_list]...
[ELSE statement_list]
END CASE
**case_expr表示条件判断的表达式,决定哪一个WHEN子句被执行
3. LOOP语句
[loop_label]LOOP
statement_list
END LOOP[loop_label]
**loop_label表示LOOP语句的标注名称,可省略
4. LEAVE语句
LEAVE label
**用来退出任何被标注的流程控制构造,label参数表示循环的标志
add_num:LOOP
SET @count=@count+1;
IF @count=50 THEN LEAVE add_num;
END LOOP add_num;
5.ITERATE语句
ITERATE label
**ITERATE只可以出现在LOOP、REPEAT和WHILE语句内。ITERATE表示再次循环
egg:CREATE PROCEDURE doiterate()
BEGIN
DECLARE p1 INT DEFAULT 0;
my_loop:LOOP
SET p1=p1+1;
IF p1< 10 THEN ITERATE my_loop;
ELSEIF p1> 20 THEN LEAC=VE my_loop;
END IF;
SELECT 'p1 is between 10 and 20';
END LOOP my_loop;
NED
6. REPEAT语句
【repeat_label:】REPEAT
statement_list
UNTIL expr_condition
END REPEAT[repeat_label]
**创建一个带条件判断的循环过程,每次语句执行完毕之后,会对条件进行判断,条件为真循环结束,否则重复执行
7. WHILE语句
【while_label】WHILE expr_condition DO
statement_list
END WHILE[while_label]
**创建一个带条件判断的循环过程,执行语句执行前,先对指定的表达式判断,如果为真,则执行循环内的语句,否则退出循环
七. 视图
数据库的视图是一个虚拟表,同真实的表一样,视图包含一系列带有名称的行和列数据,来自于由定义视图查询查询所引用的表,并且在引用视图中动态生成。
- 视图的作用
- 简单化:被经常使用的查询可以定义为视图,从而使用户不必为以后操作每次指定全部条件
- 安全性:通过视图用户只能查询和修改能见到的数据。其他数据既看不到也取不到。通过视图,用户可以被限制在数据的不同子集上
- 逻辑数据独立性:可帮助用户屏蔽真实表结构变化带来的影响
- 创建视图
CERATE[OR REPLACE] [ALGORITHM = {UNDEFINED| MERGE| TEMPTABLE}] VIEW view_name[(column_list)] AS SELECT_statement [WITH [CASCADED| LOCA] CHECK OPTION] **CREATE表示创建新视图
- 查看视图:DESCRIBE 视图名
- SHOW TABLE STATUS语句查看视图基本信息
- SHOW CREATE VIEW语句查看视图详细信息
- ALTER语句修改视图
- 删除视图 DROP VIEW IF EXISTS view_name
八. 触发器
- 创建只有一个执行语句的触发器
CREATE TRIGGER trigger_name trigger_time trigger_event ON tab_name FOR EACH ROW trigger_stmt **trigger_name触发器名称;tirgger_time触发时机,可以指定为before或after;trigger_event标识触发事件包括INSERT,UPDATE和DELETE
- SHOW TRIGGERS语句查看触发器信息
- 删除触发器DROP TRTGGER
九. MySQL用户管理