数据库(mysql)基本使用命令大全
1、查看数据库及表属性:
1)查看所有数据库
SHOW DATABASES;
2)选择使用的数据库
USE <DATABASE_NAME>
3)查看当前数据库下面的表
SHOW TABLES;
4)选择使用的表
USE <TABLE_NAME>
5)查看表结构
DESC <TABLE_NAME>
6)查看数据库编码
SHOW VARIABLES LIKE 'CHARACTER_SET_DATABASE'
7)查看表编码
SHOW CREATE TABLE <TABLE_NAME>
8)查看表属性
SHOW TABLE STATUS FROM <table_name>
2、用户操作:
1)创建用户
create user 'test'@'localhost(127.0.0.1)' identified by '12345678'; 本地使用
create user 'test'@'%' identified by '12345678'; 任意IP使用
2)删除用户
drop uesr 'test'@'IP地址'
3)赋予权限
grant insert, create, update on db.test to 'test'@'IP地址';
grant all on *.* to 'test'@'ip地址 // 赋予除了grant 外的所有权限
4)查看权限
show grants for 'test'@'IP地址''
5)取消权限
revoke all on *.* from 'test'@'ip地址'
3、数据库操作
1)修改数据库密码
set password for root@localhost='12345678'
2)创建/删除数据库并制定编码
CREATE DATABASE <数据库名> character set utf8
drop database <数据库名>
3)修改数据库编码
ALTER DATABASE <database_name> DEFAULT CHARACTER SET UTF8 COLLATE utf8_bin
4、表操作
1)创建表并制定编码
create table <table name>(name varchar(50) not null comment '姓名', price double not null) ENGINE=InnoDB default charset=utf8
create table test(id int(5) not null auto_increment, dt date default null comment '日期', hour tinyint(2) default 0 comment '小时', primary key(id), unique key dt_hour(dt, hour)) engine=InnoDB auto_increment=1 default charset=utf8 comment='测试数据'
InnoDB支持事物,原子性操作。即在同一个事物中操作数据库,要么全成功,要么全失败。
2)修改表编码
ALTER TABLE <table_name> DEFAULT CHARACTER SET UTF8 COLLATE utf8_bin
3)修改表名
ALTER TABLE <table_name> RENAME <new_name>
4)复制表
复制表结构:
create table table1 like <tablename>
create table tb1 select * from tb2 where 1=2
复制表数据
insert into table1 select * from <tablename>
5、字段操作
1)添加列
ALTER TABLE <table_name> ADD COLUMN <column_name> <column_type>
alter table test add name varchar(30) not null, add age(3) int not null default(23);
alter table test add gender enum("male", "female") default "female" first;
2)修改列类型
ALTER TABLE <table_name> change<column_name> <column_type>
3)修改列名
ALTER TABLE <table_name> CHANGE COLUMN <column_name> <new_column_name> <new_column_type>
4)删除字段
alter table test drop gender;
5)添加外键
ALTER TABLE<表名> add constraint <外键名> foreign key <字段名> reference <外表表明>(<字段名>) ON DELETE CASECADE ON UPDATE CASECADE
ON DELETE CASECADE ON UPDATE CASECADE:它告诉数据库在主表记录删除时,该怎么做
CASECADE:主表和从表保证一致性,删除主表记录,从表记录自动删除
SET NULL:将删除有关的记录设置为NULL值
RESTRICT:不允许删除(这是默认设置,也是最安全的设置)
NO ACTION:啥也不做
6)删除外键
ALTER TABLE <表名> DROP FOREIGN KEY<外键名>
这里要注意,外键名,不是字段名,所以删除的时候,不能用数据库中的字段名作为删除时候的外键名,否则或报错
7)修改已有字段为联合主键
alter table test add primary key(id,name);
8)删除主键
alter table test drop primaty key;
9)数据库自增
create table test1(name varchar(20) not null, id int not null auto_increment primary key)
create table test2(nid int not null auto_increment, name varchar(20), index(nid)) engine=InnoDB auto_increment=2 default charset=utf8
对于自增列,必须是索引(含主键)
10)修改自增起始值
alter table test auto_increment =10
如果当前自增值已经大于了我们设置的这个值,那么这个值会被忽略。
11)联合主键
create table tb1(id int not null, name varchar(30) not null, primary key(id, varchar))
insert into tb1(id, name) select 1,'jone' union select 1, 'marry';
12)修改主键
alter table test modify id int not null primary key aotu_increment
13)删除主键
alter table test modify id int not null;
14)删除表/数据
drop table tb1 删除表数据及表结构,不支持事物回滚
delete from table 删除表中所有数据,每删除一行就会写入日志,所以是支持事物回滚的。
truncate table 删除速度快于delete,也是删除全部数据,但是不支持事务回滚
速度 drop>truncate>delete
6、数据查询
1)条件查询
select name,age from tb1 where age (not) between 20 and 25;
select name,age as p_age from tb1 where gender="male" and age>20;
2)NULL查询
select * from tb1 where name is (not) NULL
3)ifnull
select ifnull(name, '你猜') as name, age from tb1
当name为null的时候,ifnull函数会取下标为1的值
3)IN 查询
select * from tb1 where age=20 or age=30 or age=40 or age=50;
= select * from tb1 where age in (20,30,40,50);
4)模糊查询(like)
select * from tb1 where name like 'han%'
select * from tb1 where name like 'han_'
select * from tb1 where name like "%/_%" escape '/'
这里用到了三种通配符:
%:匹配任意多个字符
_:匹配任意一个字符(包括中文)
escape '/':'/' 斜线后面的那一个通配符作为不同字符使用,不再作为通配符。其他地方的通配符 仍旧作为通配符使用。
5)分页查询
select * from tb1 limit 10 // 取10条数据
select * from tb1 limit start, num // 从第start条开始取,向后取num条
select * from tb1 limit 10 offset 20 // 从第20条数据开始取,向后取10条
6)结果集排序
select * from tb1 order by id desc, age asc // desc:从大到小 asc:从小到大
select * from tb1 order by id desc limit 10 // 取后10条数据
7)分组查询 group by
分组函数规则:
1)select [聚合函数] 字段名 from <tablename>
[where 查询条件]
[group by 查询条件]
[having过滤条件]
2)出现在select子句中的单独列必须出现在group by子句中作为分组列
3)分组列中可以不出现在select子句中
4)分组列可以出现在select子句中的一个复合表达式中
5)如果group by后面是一个复合表达式,那么在select子句中,它必须整体作为一个表达式的部分才能使用
select year(d) as '年', month(d) as '月', day(d) as '日', date(d) as '日期', count(to_days(d)=to_days(now())) from tb2 group by tb2
8)group_concat()
返回的是一个组的所有值以逗号隔开的字符串
select year(d) as '年', group_concat(d) from tb2 group by year(d)
9)having 子句:对分组结果进行过滤
与where子句的区别:
where子句在分组前过滤; having在分组后过滤
不能在where子句中使用组函数,原因就是组函数只能在分组函数执行完成之后执行
having子句可以单独使用,不用和group by组合
如果有group by函数,则having子句中的列必须出现在group by函数中,或者是select子句的聚合函数。
10)去重复查询 distinct
select distinct * from tb1
7、数据插入
insert into tb1(字段1,字段2...) values(值1,值2...) , (值1,值2...), (值1, 值2)
insert into tb1(字段1,字段2...) select 字段1,字段2 from tb1
insert into tb1(字段1,字段2...) select 值1,值2 union select 值1,值2 union select 值1,值2;
时间插入 now()
create table tb2(d date, t time, dt datetime)
insert into tb2 values(now(), now(), now())
select * from tb2;
8、数据删除
delete from tb1 where ...
9、修改数据
update tb1 set 字段1='值1', 字段2='值2' where ...
10、聚合函数
常用的聚合函数有 count(), sum(), max(), min(), avg()
count():求个数
select count(*) from tb1 //求tb1表行数
select count(name) from tb1 // 求tb1表中name为非null 的行数 (为空的也算一个)
sum():求和
max():求最大值
min():求最小值
avg():求平均值
select sum(price), max(price) as '最贵', min(price) as '最便宜', avg(price) from tb1
11、多表相关查询
1)union:用于合并两个或多个select语句的结果集
使用union的各select语句必须拥有相同数量的列,且列的类型要相同。
union默认是去重的,如果要显示所有数据,需要用union all
union结果集中列名,总是使用第一个select语句的列名
2)JOIN:实现多表联合查询,默认是inner join
多表查询的时候,要注意多变之间的关联,否则会容易引起笛卡尔乘积现象
语法:
select 查询类别
from 表1 别名
join(连接类型) 表2 别名
on 连接条件
【where 筛选条件】
【group 分组】
【having 帅选条件】
【order by 排序列表】
内连接:inner join和等值连接效果是一样的。
join(inner join):返回匹配条件的数据项;连接条件放在on后面,筛选条件放在where后面。
select * from tb1 join tb2 on tb1.t_id = tb2.id
外连接:主要用于查询一个表中有,另一个表中没有的记录。
外连接查询的结果=内连接的结果+主表中有而从表中没有的记录。
如果从表中有和主表匹配的记录,则返回匹配的值
如果从表中没有和主表匹配的记录,则显示null
left join:左边是主表。返回join左侧的所有数据,join后边的表中如果没有匹配的数据,值设为为null
right join:右边是主表。返回join右侧的所有数据,join左侧的表中如果没有匹配的数据,值设为null
如查询没有学生的学校的名字
select sc.name from school sc left join student st on st.school_id = sc.id where st.school_id is null;
3)多表查询规则:
a)烦是可以使用table表名的地方,都可以使用一个(括号)括起来的join语句
select * from ((A join B on A.b_id=B.id) join C on B.id = C.b_id) on A.c_id=C.id
4)直接连表操作
select * from tb1, tb2 where tb1.tid = tb2.id
12、起别名 as或者空格
select s.name '学生名字',s1.name '学校名字' from student s, schools1 where s.school_id=s1.id;
select * from (select name, school_id from student union select name, id from school) as e where e.school_id=2;
13、mysql 运算符
+-*/:数学运算 加 100+100-->200 '100'+100--->200 'abcd'+100--->100 null+100--->null
1)尝试将不是数字的字符串转化为数字
2)转化不了为数字的字符串为0
3)只要有一方为null,则结果为null
14、字符串连接 concat
说明:
char是定长字符串,varchar是变长字符串,char更快,varchar更节省空间,但是对于本身就是定长的如IP等,使用char就会比使用varchar好
创建数据库或者优化的时候,也应该把char放到前面,这样效率更高
参考资源:
https://blog.csdn.net/longting_/article/details/80658105
https://www.cnblogs.com/Jeffding/p/7535192.html
http://www.runoob.com/mysql/mysql-administration.html
数据库(mysql)基本使用命令大全的更多相关文章
- mysql常用的命令大全
常用的MySQL命令大全一.连接MySQL格式: mysql -h主机地址 -u用户名 -p用户密码1.例1:连接到本机上的MYSQL.首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令 ...
- MySQL语句和命令大全
前言 这里记录的是这两年学习工作过程中遇到的常用的 MySQL 语句和命令,部分是网上收集来的,出处已经不记得了,这里先谢过这些大佬.本文包括常见 SQL 语句,还有部分运维语句和命令,没有做详细的说 ...
- 数据库 【redis】 命令大全
以下纯属搬砖,我用Python抓取的redis命令列表页内容 如果想看命令的具体使用可查去官网查看,以下整理为个人查找方便而已 地理位置GEOADD 将指定的地理空间位置(纬度.经度.名称)添加到指定 ...
- 在cmd中 操作 数据库 MySQL 的一些命令
环境变量配置配置好以后, 打开cmd 连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样) 断开:exit (回车) 创建授权:grant sele ...
- Mysql精华版(命令大全)
数据库的操作 a) 创建数据库:create database 库名[库选项]; b) 查看数据库:show databases; show create database 库名; c) 删除数据库 ...
- MySql数据库内部常用命令大全
1. 连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1) 连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命 ...
- 【数据库开发】MySQL命令大全
1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码1.连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...
- 常用mysql命令大全
常用的MySQL命令大全 一.连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再 ...
- MySQL 常用命令大全
Mysql常用命令行大全 第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键 ...
- ref:mysql命令大全
Mysql常用命令行大全 ref:https://www.cnblogs.com/bluealine/p/7832219.html 1)查看表结构:desc table_name; 2)查看创建表的s ...
随机推荐
- java----堆区、方法区和栈区
堆区:只存放类对象,线程共享: 方法区:又叫静态存储区,存放class文件和静态数据,线程共享; 栈区:存放方法局部变量,基本类型变量区.执行环境上下文.操作指令区,线程不共享; class A { ...
- memory 监控 mysql vs percona vs maria
oracle mysql 5.7 在performance_schema 通过以下表展现内存信息.这些表实际engine为performance_schema.这些表数据实际是以数组的形式存储在内存中 ...
- Linux下键盘值 对应input_evnet的code值。
最近做了一个linux下面的模拟鼠标和键盘的app,但不是很清楚字符对应的键值:查找内核源码,在kernel/include/uapi/linux/input.h文件中找到: 下面给出普通键盘上面对应 ...
- Vue 学习笔记之快速入门篇
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与 ...
- 【Teradata】四舍五入函数
1.round函数(四舍五入) (1)dbscontrol设定使用普通四舍五入方式 //使用root用户登录数据库节点 dbscontrol display general . RoundHalfwa ...
- C#基础知识之泛型集合转换为DataTable
在做项目中,遇到了将集合转换为DataTable的使用,在网上看了资料,在这里记录下来,分享. using System; using System.Collections.Generic; usin ...
- 微信H5开发,页面被缓存,不更新
原文:https://blog.csdn.net/qq_27471405/article/details/79295348 这里只是备份 前言:每一次请求,我们都知道浏览器会做一定处理,其中就包括对 ...
- Docker for Windows 中文文档(3)——Docker Settings
Docker设置 Docker运行时,显示Docker鲸鱼. 默认情况下,Docker鲸鱼图标被放置在“通知”区域中. 如果隐藏,单击任务栏上的向上箭头显示. 提示:您可以将鲸鱼固定在通知框外面,使其 ...
- P3399 丝绸之路 dp
题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚.西亚和欧洲,将那里的香 ...
- Architecture of SQLite
Introduction This document describes the architecture of the SQLite library. The information here is ...