DDL(数据定义语言)
- 创建数据库
create database 数据库名称;
- 查看所有数据库
show databases;
在information_schema数据库下
- 使用选定的数据库
use 数据库名称;
- 删除数据库
drop database 数据库名称;
- 查看所有的表
show tables;
- 查看表的结构
desc 表名
- 查看之前创建表的语句
show create tables 表名;
- 删除表
drop table 表名
- 修改表
alter table 表名 modify 字段名 字段类型;
#如:alter table city modify province varchar(10);
- 修改表字段名
alter table 表名 旧字段名 新字段名;
- 增加表字段名
alter table 表名 add 字段名;
#后面自行添加字段属性,使用after添加字段在指定字段后面
- 删除表字段名
alter table 表名 drop 字段名;
- 修改表名
alter table 表名 rename (to) 新表名;
# to 可选
DML(数据操作语言)
- 插入表数据
insert into 表名(一个或多个字段名) values(各个字段对应的数值) ;
- 查询表数据
#查询所有的数据
select * from 表名;
#指定字段名查询,可增加where或having语句
select 一个或多个字段名(逗号隔开)from 表名;
- 更新数据
update 表名 set 字段名=数值 where条件;
#不加where条件会更新所有数据!!!
- 删除数据
delete from 表名 where条件;
#不加where条件会删除所有数据!!!
DCL(数据控制语言)
- 创建用户
create user 用户名@ip地址 identified by '密码’;
- 删除用户
drop user 用户名@ip地址;
- 用户授权
grant update/insert/delete on 数据库名.表名 to 用户
#授予所有权限
grant all privileges on *.* to 用户;
- 撤销授权
revoke 权限 on 数据库名.表名 from 用户名;
- 查看授权
show grants for 用户名;
DQL(数据查询语言)
select 字段名1,字段名2,... from 表名 where条件;
#过滤掉重复的列值
select distinct 列名 from 表名;
#连接多个列作为新列
select concat(列名,列名,..) from 表名;
#连接多个列作为新列,使用分隔符分开
select concat_ws('@',列名,列名,..) from 表名;
#给列名起别名
select 列名 as 别名 from 表名;
#模糊查询,比如查询包含hello的列
select 列名 from 表名 where 列名 like '%hello%';#%表示匹配一个或多个字符
#在支持fulltext索引的myisam引擎中使用全文检索
select 列名 from 表名 where match(索引的列名) against(查找的值);
- 排序
#降序和升序
select 列名 from 表名 order by 排序所依据的列名 desc/asc;
- 分组查询
select 列名 from 表名 group by 列名;
select 列名 from 表名 group by 列名 having语句;
- 内连接查询(where可以使用on代替)
- 左右连接查询(这里没体现出差异)
- 联合查询
select 语句 union all select语句
- limit m,n(从第m条开始选择n条记录)
others
- 连接数据库
mysql -u 用户名 -p 密码;
- 查看用户与主机的对应关系?
use mysql;#使用默认安装的数据库
#从user表中选出user,host字段,里面记录了数据库用户和主机的对应关系
select user,host from user;
- 修改用户与主机的对应关系
update user set host where user="用户名";
- 刷新权限
flush privileges;
- 修改密码
#终端下,知道原密码的情况下
mysqladmin -u 用户名 -p 原密码 password 新密码
#不知道密码的情况下
https://blog.csdn.net/whimewcm/article/details/83621358
-
查看编码设置
-
查询sql_mode等
-
查询autocommit等
-
指定引擎和编码
create table 表名(字段...) engine=InnoDB charset=utf8
alter table 表名 engine=Innodb;
- 查看支持的引擎
show engines;
- 查看支持的字符集
show character set;
- 指定字符集编码
create database 数据库名 character set gbk;
create table 表名(字段名..) charset=gbk;
- 查看表状态
show table status\G;
- transaction
使用transaction使得commit(确认修改)或rollback(撤销操作)之前的语句能够不中断的执行。结构如下:
start transaction
一系列sql语句
commit /rollback
- 关闭自动提交(不写入硬盘,先保存在内存,直到手动commit)
set autocommit=0
- 创建视图
create view 视图名(字段名.....) as select语句;
- 修改视图
alter view 视图名(字段名...) as select语句;
- 删除视图
drop view 视图名 if exists 视图名;
- 触发器
create trigger 触发器名 before/after insert/update/delete on 表名 for each row
begin
sql语句
end;
- 修改分界符
delimiter //
#可以将结束符;修改为//
- 删除触发器
drop trigger 触发器名;
sql语句优化查询
- 开启慢查询日志(记录查询时间较长的查询语句)
show variables like "%slow%";
Variable_name | Value |
+---------------------------+---------------------------------------------------------------+
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | OFF |
| slow_launch_time | 2 |
| slow_query_log | OFF |
| slow_query_log_file | xxxx |
#slow_query_log默认关闭,使用下列语句打开
set global log_slow_queries=on;
- 修改query_time对应的时间值
show variables like "%long%";
+----------------------------------------------------------+-----------+
| Variable_name | Value |
+----------------------------------------------------------+-----------+
| long_query_time | 10.000000 |
| performance_schema_events_stages_history_long_size | 10000 |
| performance_schema_events_statements_history_long_size | 10000 |
| performance_schema_events_transactions_history_long_size | 10000 |
| performance_schema_events_waits_history_long_size | 10000 |
+----------------------------------------------------------+-----------+
set long_query_time=0.5;
- 查看语句执行的详细信息
explain 查询语句;
- 性能分析工具profiling
show variables like "%profiling%";
#打开
set profiling=on;
#查看语句运行性能
show profiles;
+----------+------------+-----------------------------------+
| Query_ID | Duration | Query |
+----------+------------+-----------------------------------+
| 1 | 0.00234400 | show variables like "%profiling%" |
| 2 | 0.00016400 | ste profiling=off |
+----------+------------+-----------------------------------+
#指定query_id查询,找到耗时大的status处理;
show profile for query 2;
+---------------+----------+
| Status | Duration |
+---------------+----------+
| starting | 0.000108 |
| freeing items | 0.000051 |
| cleaning up | 0.000005 |
+---------------+----------+
- 查询缓存
show variables like "%cache%";
- 建立索引
alter table 表名 add index 索引名(列名);
create index 索引名 on 表名(列名);
- 导入和导出
#导入
load data infile "文件路径名" into table 表名;
#导出
select 列名,列名... into outfile '导出文件名路径' from 表名;
- 备份数据库
#使用mysql自带的mysqldump
mysqldump -u 用户名 数据库名>备份文件名;
mysqldump -u 用户名 数据库名 表名>备份文件名;
- 修改auto_increment的起始值
alter table 表名 auto_increment=100;#从100开始递增
- 复制表
#列属性和索引都相同,但是是空表。
create table 新表名 like 旧表名;
#完全复制表
create table 新表名 select * from 旧表名;
- 修改用户名
rename user 旧用户名 to 新用户名;
- 修改密码
set password=password("密码");#修改当前用户密码
set password for user=password("密码");
- 导入数据库
#如果你想批量处理某些SQL语句或者某些语句内容比较多,您可以考虑将SQL语句放到一个文件
#中然后告诉mysql从该文件读取输入。实现过程为:创建一个文本文件textfile,并包含你想
#要执行的语句。然后在命令行终端调用mysql:
mysql db name< text file --user=root;
#如果text_file文件中已经使用了USE db_name 指定了数据库,那么可以直接在命令行输入:
mysql< text_file --user=root;
- 为字段追加默认值
alter table school alter column subordinated_to set default '教育部';