how to use mysql with CMD
标签(空格分隔): 数据库
连接本地MySQL:
进入mysql路径连接:
mysql -h localhost -u root -p 密码 -P3306(默认端口可以省略)
退出:
exit;
\q
quit;
查看数据库:
show databases;
show database 数据库名;
-- 匹配以xx开头的数据库
show database like 'xx%';
-- 匹配以xx开头后面跟一个字符的数据库
show database like 'xx_';
查看数据库创建语句
show create database 数据库名;
创建数据库:create database name [库选项]
库
选
项
{
字符集设置(charset )
校队集设置(collate)
库选项 \begin{cases} \text{字符集设置(charset )}\\ \text{校队集设置(collate)} \end{cases}
库选项{字符集设置(charset )校队集设置(collate)
create database 数据库名;
create database if not exists 数据库名;
create database 数据库名 charset utf8;
修改数据库(不能修改数据库名,只能修改数据库的库选项)
-- 修改字符集,校对集也会随着改变
alter database name charset gbk;
删除数据库:
drop database 数据库名;
新建表:
先进入数据库
use database name;
创建表:create table name () [表选项]
表
选
项
{
字符集设置(charset )
存储引擎(engine)
表选项 \begin{cases} \text{字符集设置(charset )}\\ \text{存储引擎(engine)} \end{cases}
表选项{字符集设置(charset )存储引擎(engine)
create table 表名
(
字段名 数据类型 null/(not null) default auto increment primary key,
字段名 数据类型。。。
)charset utf8 engine innodb;
查看表:
show tables;
-- 查看表结构
desc name;
describe name;
show columns from name;
修改表结构
-- 修改表名
rename table oldname to newname;
-- 修改字段名
alter table name change oldname newname 字段类型 (字段位置);
-- 增加字段,默认在最后
alter table name add column 字段名 数据类型...;
-- 修改字段位置
alter table name modify 字段名 after 字段名;
-- 修改字段类型
alter table name modify 字段名 数据类型;
-- 删除字段
alter table name drop 字段名;
删除表:
drop table 表名1,表2;
插入数据:
insert into 表 (字段名) values (值);
注意:
值的个数,类型,顺序必须与字段名一致
插入字段名的顺序可以和表中的字段顺序不一致
通过插入null执行插入自动增长
通过default来插入默认值
名字是关键字、中文等加反引号(键盘ESC下面)
_等前面加转义
名字使用字母、下划线、数字构成
删除数据:
delete from 表 where 条件;
修改数据:
update 表名 set 字段= 值 , 。。。 where 条件
查询数据:
select 列名 from 表名 where 条件 order by 排序(默认asc升序 ,desc表示降序) limit 限制
-- 查询所有字段
select * from 表名;
-- 查询为空的字段
select * from 表名 where 字段 is null;
查看警告
show warnings;
增加主键
alter table name add primary key;
-- 无法修改主键,需要修改需要先删除主键
alter table name drop primary key;
删除唯一键(unique key)
alter table name drop index 唯一键名(字段名)
插入主键冲突的解决
-- 使用主键冲突:主键不存在就插入,存在就更新
insert into 表名 values('字段值','字段值',...) on duplicate key update 字段名=字段值,...;
-- 替换插入:其实是先删除再插入
reolace into 表名 values(值列表);
limit用于分页
-- 显示0-7 八个数据
select * from name where 条件 limit 0,8;
-- 显示8-15八个数据
select * from name where 条件 limit 8,8;
-- 显示16-23八个数据
select * from name where 条件 limit 16,8;
联合查询
select * from name1
-- union选项默认distinct
union all/distinct
select * from name2;
------------------------------
-- union中使用order by需加括号
(select * from name1)
union all
(select * from name2);
视图
-- 创建视图
create view 视图名 as select 字段1,2 from 表名;
-- 查看视图
desc 视图名;
-- 查看创建语句
show create table 视图名;
-- 查看数据
select * from 视图名;
-- 修改视图
alter view 视图名 as select 字段1,2 from 表名;
-- 删除视图
drop view 视图名;
-- 单表视图插入数据(必须保证原表中没在视图中的字段可以为NULL),没有在视图中的字段插入数据时为NULL
insert into 视图名 values ();
-- 单表视图删除数据
delete from 视图名 where 条件;
-- 多表视图无法插入数据,无法删除数据
-- 单表、多表视图的修改数据
update 视图名 set 字段='xx' where 条件;
-- 视图算法
-- 将外部的select语句与视图的select语句合并后执行
create algorithm=merge view 视图名字 as select语句
--将视图先执行存成一张临时表,然后再执行select 语句
create algorithm=temptable view 视图名字 as select语句
-- undefined系统根据需要会自动选择,默认merge(效率高)
create algorithm=undefined view 视图名字 as select语句
数据库的备份与还原
KaTeX parse error: Expected '}', got '\t' at position 118: …与字段直接用什么分开,默认的是\̲t̲)}\\ \text{esca…
$$lines格式 \begin{cases} \text{terminated by(行以什么结束,默认是\r\n)}\\ \text{starting by(行以什么开始,默认是’’)} \end{cases}$$
-- 数据的备份,文件在目录不存在才能新增
select 字段列表 into outfile '文件路径/文件名' [fileds格式] [lines格式] from 表名
-- 数据的还原
load data infile '文件路径/文件名字' into table 表名
[fileds格式]
[lines 格式];
-- 数据与结构的备份(备份形式以sql语句存在),使用mysqldump.exe备份
mysqldump -hlocalhost -P3306 -uroot -p 数据库名 数据表名,数据表名 >文件路径\文件名
-- 数据与结构的还原
-- 外部还原使用mysql.exe(路径中\)
mysql -hlocalhost -P3306 -uroot -p 数据库名 数据表名,数据表名 <文件路径\文件名
-- 内部还原使用source(路径中/)
mysql>source 文件路径/文件名
事务
-- 开始事务
start transaction;
begin transaction;
-- 执行sql语句
-- 成功提交事务
commit;
-- 失败提交事务回滚
rollback;
触发器
触
发
器
时
间
{
before
after
触发器时间 \begin{cases} \text{before} \\ \text{after} \end{cases}
触发器时间{beforeafter
触
发
器
时
间
{
insert
update
delete
触发器时间 \begin{cases} \text{insert} \\ \text{update} \\ \text{delete} \end{cases}
触发器时间⎩⎪⎨⎪⎧insertupdatedelete
-- 修改结束符
delimiter 临时符号(///)
create trigger 触发器名 触发时间 事件类型 on 表名 for each row
begin
//触发器的内容;
//可以是各种SQL语句,一般是增删改;
//流程控制:if,while;
end
临时符号(///)
-- 改回语句结束符
delimiter ;
-- 查看触发器
show triggers;
-- 删除触发器
drop trigger 触发器名;
常用的
- 查看数据库版本: select version() from dual;
- 多个字段链接:concat
select concat (id, name) as info from table;
···