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)基本使用命令大全的更多相关文章

  1. mysql常用的命令大全

    常用的MySQL命令大全一.连接MySQL格式: mysql -h主机地址 -u用户名 -p用户密码1.例1:连接到本机上的MYSQL.首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令 ...

  2. MySQL语句和命令大全

    前言 这里记录的是这两年学习工作过程中遇到的常用的 MySQL 语句和命令,部分是网上收集来的,出处已经不记得了,这里先谢过这些大佬.本文包括常见 SQL 语句,还有部分运维语句和命令,没有做详细的说 ...

  3. 数据库 【redis】 命令大全

    以下纯属搬砖,我用Python抓取的redis命令列表页内容 如果想看命令的具体使用可查去官网查看,以下整理为个人查找方便而已 地理位置GEOADD 将指定的地理空间位置(纬度.经度.名称)添加到指定 ...

  4. 在cmd中 操作 数据库 MySQL 的一些命令

    环境变量配置配置好以后, 打开cmd 连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样) 断开:exit (回车) 创建授权:grant sele ...

  5. Mysql精华版(命令大全)

    数据库的操作 a) 创建数据库:create database 库名[库选项]; b) 查看数据库:show databases;  show create database 库名; c) 删除数据库 ...

  6. MySql数据库内部常用命令大全

    1.     连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1)         连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命 ...

  7. 【数据库开发】MySQL命令大全

    1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码1.连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...

  8. 常用mysql命令大全

    常用的MySQL命令大全 一.连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再 ...

  9. MySQL 常用命令大全

    Mysql常用命令行大全 第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键 ...

  10. ref:mysql命令大全

    Mysql常用命令行大全 ref:https://www.cnblogs.com/bluealine/p/7832219.html 1)查看表结构:desc table_name; 2)查看创建表的s ...

随机推荐

  1. SQL中常用日期函数

    --1 GETDATE() 返回当前系统日期SELECT GETDATE() --2 DATEADD(日期部分,常数,日期) 返回将日期的指定日期部分加常数后的结果返回 日期部分可以是: --常数为正 ...

  2. C和C++头文件大全

    C.传统 C++ #include <assert.h> //设定插入点#include <ctype.h>  //字符处理#include <errno.h>   ...

  3. 2017 Pig-0.16.0安装

    前提:已经装好hadoop2.7.3 单机版本: export PIG_HOME=/usr/local/pig    export PATH=$PATH:$PIG_HOME/bin 运行:pig -x ...

  4. C#-类(九)

    类的定义 类是描述具有相同特征与行为的事物的抽象,类内部包含类的特征和类的行为 类支持继承 类的定义是关键字class为标志 类的格式 访问标识符 class 类名 { 类主体 } 访问标识符:指定了 ...

  5. django加密解密api

    分别给出了两个API,一个创造密码,一个验证密码正好满足需求.于是赶紧试试: 首先,引入模块: 1 >>> from django.contrib.auth.hashers impo ...

  6. Windows 快捷方式(*.link)打开方式关联错误

    1.Win+r 组合键打开 “运行”,输入 “regedit” 打开 注册表 2.依次打开注册表,定位到以下位置: HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\WINDO ...

  7. 了解 IP 地址,默认网关,子网掩码,DNS 的概念和作用。

    DNS(Domain Name System):域名解析服务器,在 Internet 上域名与 IP 地址一一对应,域名便于人记忆,但是机器只认识 IP 地址,他们之间的转换工作称为 ‘域名解析’,域 ...

  8. HTML 页面自动刷新

    学习就是一个不断积累的过程,每一天能够学到一点新东西说明自己就在进步!! HTML head 里面设置页面自动刷新功能 <meta http-equiv="Refresh" ...

  9. May 28. 2018 Week 22nd Monday

    Do one thing at a time, and do well. 一次只做一件事,并且要做到最好. Why is it that about 25% to 50% of people have ...

  10. Kafka 0.11新功能介绍:空消费组延迟rebalance

    Kafka 0.11新功能介绍:空消费组延迟rebalance 在0.11之前的版本中,多个consumer实例加入到一个空消费组将导致多次的rebalance,这是由于每个consumer inst ...