248 lines
No EOL
8.2 KiB
Text
248 lines
No EOL
8.2 KiB
Text
MySQL有内置的SQL模型SQL_MODE:用来定义字符超出的操作和模仿别的数据库的类型,通过修改全局变量
|
||
常用的模式有:
|
||
TRADITIONAL 使用传统模式
|
||
STRICT_TRANS_TABLES 仅对支持事务的表的严格模式
|
||
STRICT_ALL_TABLES 对所有表使用严格模式
|
||
|
||
设定服务器变量的值:通常仅用于支持动态的变量
|
||
支持修改的服务器变量
|
||
动态变量:可以在MySQL运行时修改
|
||
静态变量:与配置文件中修改其值,并重启后方能生效
|
||
服务器变量从其生效范围来讲,分两类
|
||
全局变量:服务器级别,修改之后仅对新建立的会话生效
|
||
回话变量:会话级别,仅对当前会话有效
|
||
会话建立时,从全局继承各变量
|
||
查看服务器变量
|
||
mysql> show [{global|session}] variables [like ''];
|
||
mysql> select @@{globa|session}.variable_name
|
||
mysql> mysql> select * from information_schema.GLOBAL_VARIABLES where VARIABLE_NAME='SOME_VARIABLE_NAME'; 查看全局变量
|
||
mysql> mysql> select * from information_schema.SESSION_VARIABLES where VARIABLE_NAME='SOME_VARIABLE_NAME'; 查看会话变量
|
||
|
||
修改变量:
|
||
前提:默认仅管理员有权限修改全局变量
|
||
mysql> set {global|session} variable_name='value';
|
||
注意:无论是全局还是会话级别的动态变量修改,在重启mysql后都会失效,想永久有效,可以定义在配置文件中的响应段中[mysqld]
|
||
|
||
|
||
数据库:
|
||
创建数据库
|
||
create database
|
||
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
|
||
[[DEFAULT] CHARACTER SET [=] charset_name 字符集
|
||
| [DEFAULT] COLLATE [=] collation_name 排序方式]
|
||
删除数据库
|
||
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
|
||
修改数据库的字符集和排序字符以及数据字典
|
||
ALTER {DATABASE | SCHEMA} [db_name]
|
||
[[DEFAULT] CHARACTER SET [=] charset_name 字符集
|
||
| [DEFAULT] COLLATE [=] collation_name 排序方式]
|
||
ALTER {DATABASE | SCHEMA} db_name
|
||
UPGRADE DATA DIRECTORY NAME
|
||
表:
|
||
创建表:第一种方式
|
||
CREATE [TEMPORARY(临时表,保存在内存中)] TABLE [IF NOT EXISTS] tbl_name
|
||
(create_definition,...)
|
||
[table_options]
|
||
|
||
(create_definition,...)
|
||
字段的定义:字段名、类型和类型修饰符
|
||
键、索引和约束
|
||
primary key,unique key,foreign key,check
|
||
{index|key}
|
||
[table_options]
|
||
engine [=] engine_name
|
||
AUTO_INCREMENT [=] value 指定AUTO_INCREMENT的起始值
|
||
[DEFAULT] CHARACTER SET [=] charset_name 指定默认字符集
|
||
CHECKSUM [=] {0 | 1} 是否使用校验值
|
||
[DEFAULT] COLLATE [=] collation_name 排序规则
|
||
COMMENT [=] 'string' 注释
|
||
DELAY_KEY_WRITE [=] {0 | 1} 是否启用键延迟写入
|
||
ROW_FORMAT [=] {DEFAULT(默认)|DYNAMIC(动态)|FIXED(静态)|COMPRESSED(压缩)|REDUNDANT(冗余)|COMPACT(紧致)} 表格式
|
||
TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}] 表空间
|
||
|
||
myISAM引擎,每表有三个文件,都位于数据库目录
|
||
tb_name.frm:表结构定义
|
||
tb_name.MYD:数据文件
|
||
tb_name.MYI:索引文件
|
||
|
||
InnoDB表,有两种存储方式
|
||
1、默认,每表有一个独立文件和一个多表共享的文件
|
||
tb_name.frm:表结构的定义,位于数据库目录中
|
||
ibdata#:共享的表空间文件,默认位于数据目录(datadir指向的目录中)
|
||
2、独立的表空间
|
||
tb_name.frm每表有一个表结构文件
|
||
tb_name.ibd:一个独有的表空间文件
|
||
应该修改innodb_file_per_table为ON
|
||
|
||
表创建:第二种方式(复制表数据)
|
||
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
|
||
[(create_definition,...)]
|
||
[table_options]
|
||
select_statement
|
||
|
||
表创建:第三种方式(复制表结构)
|
||
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
|
||
{ LIKE old_tbl_name | (LIKE old_tbl_name) }
|
||
|
||
查看表的状态信息
|
||
show table status like ‘table_name’
|
||
|
||
删除表
|
||
DROP [TEMPORARY] TABLE [IF EXISTS]
|
||
tbl_name [, tbl_name] ...
|
||
[RESTRICT | CASCADE]
|
||
|
||
修改表:
|
||
ALTER TABLE tbl_name
|
||
[alter_specification [, alter_specification] ...]
|
||
修改字段定义:
|
||
插入新字段:
|
||
ADD [COLUMN] col_name column_definition
|
||
[FIRST | AFTER col_name ]
|
||
删除字段
|
||
DROP [COLUMN] col_name
|
||
修改字段
|
||
修改字段名称
|
||
CHANGE [COLUMN] old_col_name new_col_name column_definition
|
||
[FIRST|AFTER col_name]
|
||
修改字段类型及属性等
|
||
MODIFY [COLUMN] col_name column_definition
|
||
[FIRST | AFTER col_name]
|
||
表改名:
|
||
rename to|as new tb_name
|
||
修改存储引擎
|
||
engine =
|
||
指定排序标准的字段
|
||
ORDER BY col_name [, col_name] ...
|
||
|
||
|
||
MySQL的查询操作
|
||
单表查询:简单查询
|
||
多表查询:连续查询
|
||
联合查询
|
||
|
||
选择和投影
|
||
投影:挑选要符合的字段
|
||
选择:挑选符合条件的行
|
||
|
||
投影:select 字段1,字段2,... from tb_name
|
||
selcet * from tb_name
|
||
选择:select 字段1,字段2,.... from tb_name where 子句
|
||
布尔条件表达式
|
||
|
||
布尔条件表达式操作符
|
||
= 等值比较
|
||
<=>:跟空值比较不会产生额外信息
|
||
<>:不等值
|
||
<:
|
||
<=
|
||
>
|
||
>=
|
||
|
||
IS NULL:是否为空
|
||
IS NOT NULL:是否不空
|
||
LIKE:支持的通配符%(任意长度的任意字符) _(任意单个字符)
|
||
RLIKE,REGEXP:支持使用正则表达式作为条件
|
||
IN:判断某行的某一字段的值是否在给定的列表中
|
||
BETWEEN...AND....:判断指定的值是否位于指定的范围之间
|
||
|
||
组合条件测试
|
||
NOT |
|
||
AND &&
|
||
OR ||
|
||
|
||
排序
|
||
order by ‘排序字段’
|
||
默认为升序:ASC
|
||
降序:DESC
|
||
|
||
内置的聚合函数
|
||
sum():和
|
||
AVG():平均值
|
||
MAX():最大值
|
||
MIN():最小值
|
||
COUNT():个数统计
|
||
|
||
分组
|
||
group by
|
||
对分组的条件过滤
|
||
having
|
||
只返回有用的行
|
||
LIMIT
|
||
一个数为显示的行数
|
||
两个数字为偏移第一个数字行,显示第二个数字
|
||
|
||
select语句的执行流程
|
||
from clause --> where clause --> group by --> having clause -->order by --> select -->limit
|
||
|
||
select语句
|
||
distinct 重复的只显示一次
|
||
SQL_CACHE 缓存查询结果
|
||
SQL_NO_CACHE 不缓存查询结果
|
||
|
||
|
||
MySQL多表查询和子查询
|
||
|
||
联结查询:事先将两张或者多张表join,根据join的结果进行查询
|
||
|
||
cross join:交叉联结
|
||
自然联结
|
||
等值联结:把相同的字段进行等值连接
|
||
|
||
外联结:
|
||
左外联接:只保留出现在左外连接元算之前(左边)的关系中的元组(以左表为准,)
|
||
left_tb LEFT JOIN right_tb ON 条件
|
||
右外联接:只保留出现在右外连接元算之后(右边)的关系中的元组(以右表为准)
|
||
left_tb RIGHT JOIN right_tb ON 条件
|
||
全外联接:
|
||
|
||
自联结:
|
||
|
||
别名:AS
|
||
表别名:
|
||
字段别名
|
||
|
||
子查询:在查询中嵌套的查询
|
||
用于WHERE中的子查询
|
||
1.用于比较表达式中的子查询
|
||
子查询的返回值只能有一个
|
||
2.用于EXISTS中的子查询
|
||
判断存在与否
|
||
3.用于IN中的子查询
|
||
判断存在于指定列表中
|
||
用于FROM中子查询
|
||
select alias.col,....FROM(SELECT CLUSE) alias WHERE condition
|
||
|
||
MYSQL不擅长于子查询,应该避免使用子查询
|
||
|
||
总结:mysql的连接查询与子查询
|
||
联结:
|
||
交叉联结:
|
||
内联结:
|
||
外联结:
|
||
左外
|
||
右外
|
||
自联结
|
||
子查询:
|
||
用于where中的子查询
|
||
用于条件比较:
|
||
用于exists
|
||
用于IN中
|
||
用于FROM
|
||
|
||
MYSQL的联合查询:
|
||
把两个或多个查询语句的结果合并成一个结果进行输出
|
||
select clauase union select clause union.....
|
||
索引
|
||
show indexs from tb_name 查看索引
|
||
alter table tb_name add index(字段)
|
||
创建索引
|
||
|
||
explain 解释命令,查看命令的执行过程
|
||
|
||
MYSQL视图(虚表)
|
||
存储下来的select语句
|
||
创建:
|
||
create view 视图名 as select语句
|
||
删除:
|
||
drop view 视图名 |