Docs/数据库/mysql/mysql增删改查说明
2022-10-18 16:59:37 +08:00

248 lines
No EOL
8.2 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 keyunique keyforeign keycheck
{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支持的通配符%(任意长度的任意字符) _任意单个字符
RLIKEREGEXP支持使用正则表达式作为条件
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 视图名