Mysql数据库基本命令

◇◆丶佛笑我妖孽 提交于 2019-12-02 05:10:45

mysql数据库,数据库,数据表

安装完mysql后,可以创建很多个数据库,每个数据库又可以有许多表
在这里插入图片描述

数据库的操作

  • 登入,退出
mysql -h 127.0.0.1 -uroot -p #-h主机地址,-u用户名 -p密码
输入密码:

mysql -u用户名 -p密码 #直接带密码,少用

exit  退出
quit
ctrl+d

  • 常用操作
show databases#查看所有数据库
use database#操作database数据库
select database();#查看当前使用的数据库
select version();#显示数据库版本 
select now();#显示时间
show create database `student`;#查看创建数据库student的详细内容
  • 创建数据库
create database 数据库名 参数 ...;#注意没有s
参数如
charset="utf8"

show create database xxx;#查看创建xxx数据库的语句
  • 删除数据库
 drop database 数据库名;#请谨慎操作

创建数据表

  • show tables;查看当前数据库中的所有表
  • 创建表语法create table …
创建语法
create table 数据表名字 (字段 类型 约束[, 字段 类型 约束]);
例如:
CREATE TABLE students(
            id INT UNSIGNED NOT NULL  PRIMARY KEY AUTO_INCREMENT,#unsigned表示无符号    
            `name` VARCHAR(30),#占用30个字符
            age TINYINT UNSIGNED DEFAULT 0,
            high DECIMAL(5,2),#小数值
            gender ENUM('男','女','中性','保密') DEFAULT '保密',
            cls_id INT UNSIGNED         -- 班级id
    );



  • show create table 表名字;查看表的创建语句
  • desc 表名字; #查看数据表结构
  • 常用类型
    int整形,char字符,enum枚举等

https://www.runoob.com/mysql/mysql-data-types.html

  • 约束
    – auto_increment表示自增
    – not null 表示非空
    – primary key 表示主键
    – default 0 默认值为0

表的操作

表结构

  • 修改表结构操作alter table…
-- alter table 表名 add 字段 类型 约束;
    alter table students add birthday datetime;   
  • 修改字段alter table … modify(change)…
    alter table 表名 modify 字段 类型及约束;
    alter table 表名 change 原名 新名 类型及约束;
-- 修改表-修改字段:不重命名版
    -- alter table 表名 modify 列名 类型及约束;
    alter table students modify birthday date default '1997-01-01';

    -- 修改表-修改字段:重命名版
    -- alter table 表名 change 原名 新名 类型及约束;
    alter table students change birthday birth date default '1997-01-01';
  • 删除字段alter table … drop …
    -- alter table 表名 drop 字段;
    alter table students drop high;
  • 删除表drop table …
--drop table 表名;
    drop table students;

表的增删改查

  • 增insert into…values
#1.全列插入,insert into 表名 values(...)
INSERT INTO demo VALUES(0,'苏',30,1,2)
"
第4个字段为枚举类型,enum('男','女','中性','保密')
1 表示 '男'
2 表示 '女'
3 表示 '中性'
4 表示 '保密'
"
#2.部分插入,insert into 表名(列1,...) values(值1,...)
INSERT INTO demo(id,`name`,age) VALUES(0,'林',25);
"
name在mysql中是关键字。
创建表时用了name作为字段,操作表的name字段时需要用``引起来表示区别。
id为主键,可用 0,null,default 来占位。
"
#3.多行插入,insert into 表名(列1,...) values(值1,...),(值2,...)
INSERT INTO demo(id,`name`,age) VALUES(0,'lin',30),(0,'诸葛',30);
  • 删delete from
#1.物理删除,delete from 表名 where 条件
DELETE FROM demo WHERE id=13;

#2.逻辑删除
        -- 用一个字段来表示 这条信息是否已经不能再使用了
        -- 给demo表添加一个is_delete字段 int 类型  0 未删除  1 删除
ALTER TABLE demo ADD is_delete INT DEFAULT 0;
UPDATE demo SET is_delete = 1 WHERE id = 5;
  • 改update…set
#update 表名 set 列1=值1,列2=值2... where 条件;
UPDATE demo SET age=28,gender=1 WHERE `name`='123';
  • 查select…from
select 去重选项 字段列表[as 字段名] from 数据表 where [group by 子句] [having子句] [order by 子句] [limit子句];

#去除重复字段,只保留一个
SELECT DISTINCT age,`name` FROM demo;

#指定列,select 列1,列2,... from 表名;
select id,`name` from demo;

#可以使用as为列或表指定别名
SELECT id,`name` AS 姓名 FROM demo;


高级查询

  • 条件查询select…from…where
    select 去重选项 字段列表[as 字段名] from 数据表 where [group by 子句] [having子句] [order by 子句] [limit子句];
1 比较运算符 ><>=<==!=或者 <>表示非空不等于
SELECT id,`name` FROM demo WHERE age != 18;

2 逻辑运算符and,or,not
SELECT id,`name`,age FROM demo WHERE NOT age = 18;#非空不等于18岁

3 模糊查询,like配合%(一个或多个)或者 _(一个)使用
SELECT * FROM demo WHERE `name` LIKE '__%';#名字至少2个字

4 范围查询1 不连续 id in (1,3,8),括号内的关系是or关系
SELECT * FROM demo WHERE id IN (3,6,7);
SELECT * FROM demo WHERE id=3 OR id=6 OR id=7;查询结果相同

5 范围查询2 连续范围,闭合区间 between ... and ...
SELECT * FROM demo WHERE id BETWEEN 3 AND 7;查id为34567

6 空判断 is null  (注意与=''2个概念)
SELECT * FROM demo WHERE age IS NULL;

  • 聚合函数
count()计数
SELECT COUNT(*) FROM demo;

max()最大值
SELECT MAX(age) FROM demo;

min()最小值
SELECT MIN(age) FROM demo;

sum()求和
SELECT SUM(age) FROM demo WHERE gender=1;

avg()平均值,默认保留4位小数
SELECT AVG(age) FROM demo WHERE gender=1;

round(123.23 , 1)四舍五入 第二个参数保留几位小数
SELECT ROUND(AVG(age),2) FROM demo WHERE gender=1;
  • 分组group by
1  按gender分组,显示gender,max(age)2SELECT gender AS 性别,MAX(age) FROM demo GROUP BY gender;

2  group_concat(...)   查看组内的成员信息name,age
SELECT gender AS 性别,GROUP_CONCAT(`name`,age) FROM demo GROUP BY gender;

性别  group_concat(`name`,age)     
------  -----------------------------
(NULL)  hu16,陈而他0,25,lin30  
男       Ghoo18,湖啊28,苏额30     
女       hu16,丫头18,33          
保密      (NULL)

3  having分组之后的筛选
SELECT gender AS 性别,COUNT(*),GROUP_CONCAT(`name`) FROM demo GROUP BY gender HAVING COUNT(*)>2;
按性别分组后,分组数量大于2的组内姓名

性别  count(*)  group_concat(`name`)       
------  --------  ---------------------------
(NULL)         5  chen,hu,陈而他,,lin  
男              3  Ghoo,湖啊,苏额         
女              3  hu,丫头,
  • order by 排序
1  order by 字段 asc(desc)   -- asc升序,默认;desc降序

SELECT `name`,age FROM demo WHERE age>20 ORDER BY age DESC;
name       age  
------  --------33
苏额          30
lin          30
湖啊          2825

2  order by 字段1,字段2...字段n

SELECT id,`name`,age FROM demo WHERE age>20 ORDER BY id,age DESC;
先按第一个order by条件排序,若第一个条件相同,按第二个条件排序。。。

    id  name       age  
------  ------  --------
     7  湖啊            28
     9  苏额            30
    1025
    1133
    12  lin           30
  • limit分页
1 limit i开始 n显示条数
i为开始的条数,默认为0;n为显示的条数

SELECT id,`name`,age FROM demo WHERE age>20 ORDER BY id LIMIT 0,2;

    id  name       age  
------  ------  --------
     7  湖啊            28
     9  苏额            30

2  制作分页limit (i-1)*n  n  
i表示第几页   n为每页的条目
  • 连接查询inner join … on
1 select ... from 表A inner join 表B;

SELECT d.`id`,d.`name`,d.`class_id`,c.`id`,c.`NAME` FROM demo AS d INNER JOIN classes AS c ON d.class_id=c.`id`;
2个表的某个字段表示同一个意思,就可以通过连接查询,用as起别名,(.字段)表示一个列

2 select ... from 表A left join 表B;
查询出来的结果按表B的顺序


在这里插入图片描述

  • 子查询
1 
SELECT * FROM demo WHERE age=(SELECT MAX(age) FROM demo);

2
SELECT * FROM demo WHERE class_id IN(SELECT id FROM classes);
找出demo表中class_id能够与classes表id对应的条目,in是非连续的范围
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!