参考:(30条消息) MySQL常用SQL语句大全_江南极客的博客-CSDN博客_mysql常用sql语句大全


SQL命令构成

(1)数据定义命令DDL(Data Definition Language)

  • CREATE–创建数据库中所有对象;
  • ALTER–修改表;
  • DROP– 删除表。

(2)数据操纵命令DML (Data Manipulation Language)

  • INSERT – 插入数据;
  • DELETE– 删除数据;
  • UPDATE–修改数据;
  • SELECT–查询数据。

用户管理

  • 新建用户 CREATE USER fifish@localhost IDENTIFIED BY ‘password’;
  • 查询用户 SELECT USER,HOST FROM mysql.user;
  • 删除用户 DROP USER fifish@localhost;
  • 更改密码 SET PASSWORD FOR fifish@localhost=PASSWORD(‘newpassword’);//实操失败

​ UPDATE mysql.user set PASSWORD=PASSWORD(‘newpassword’) WHERE USER=’fifish’;//实操失败

​ ALTER USER ‘fifish’@’localhost’ IDENTIFIED BY ‘123’;

​ 刷新 FLUSH PRIVILEGES;

  • 权限管理

    SHOW GRANTS FOR fifish@localhost;//查看fifish@localhost权限

    GRANT SELECT ON db_name.* TO fifish@localhost;//给fifish@localhost用户db_name数据库的所有权限

    image-20221010215229574

    REVOKE SELECT ON db_name.* FROM fifish@localhost;//删除fifish@localhost用户db_name数据库的所有权限

image-20221010184439522


数据库操作

  • 查看数据库 SHOW DATABASES;
  • 创建数据库 CREATE DATABASE db_name;
  • 使用数据库 USE db_name; //如果SQL模式中有多个数据库,那么在开始操作之前,需要选择一个将执行操作的数据库。

image-20221010220223032

  • 删除数据库 DROP DATABASE db_name;

表操作

  • 创建表

    CREATE TABLE table_name(

    id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, //id值,无符号、非空、递增——唯一性,可做主键。

    name VARCHAR(60) NOT NULL

    score TINYINT UNSIGNED NOT NULL DEFAULT 0, //设置默认列值

    PRIMARY KEY(id)

    ) ENGINE=InnoDB  //设置表的存储引擎,一般常用InnoDB和MyISAM;InnoDB可靠,支持事务;MyISAM高效不支持全文检索

    DEFAULT charset=utf8; //设置默认的编码,防止数据库中文乱码

如果有条件的创建数据表还可以使用 >CREATE TABLE IF NOT EXISTS tb_name(……..

1
2
tinyint 型的字段如果设置为UNSIGNED类型,只能存储从0到255的整数,不能用来储存负数;
tinyint 型的字段如果不设置UNSIGNED类型,存储-128到127的整数。

image-20221010223800031

  • 查看数据库中可用的表 SHOW TABLES;
  • 查看表的结构 DESCRIBE tb_name;

image-20221010223929685

  • 复制表 CREATE TABLE tb_name2 SELECT * FROM tb_name;
  • 部分复制 CREATE TABLE tb_name3 SELECT id,name FROM tb_name;

image-20221010224358874

  • 创建临时表 CREATE TEMPORARY TABLE tb_name;
  • 删除表 DROP [TEMPORARY] TABLE [IF EXISTS] tb_name[, tb_name2];

image-20221010225027141

  • 表重命名 RENAME TABLE tb_name TO newname;

    ​ ALTER TABLE tb_name RENAME newname;

    image-20221010225444134

image-20221010225559674

  • 修改表 ALTER TABLE tb_name1 ADD [CHANGE, RENAME, DROP]…;

    • ALTER TABLE tb_name1 ADD COLUMN address varchar(80) NOT NULL;
    • ALTER TABLE tb_name1 DROP address;

    image-20221010230356072

    • ALTER TABLE tb_name1 CHANGE score score TINYINT(4) UNSIGNED ZEROFILL NOT NULL;

image-20221010230512765


数据操作

  • 插入数据 INSERT INTO tb_name1(id,name,score) VALUES(NULL,’张三’,140),(NULL,’李四’,134); //主键id是自增的列,可以不用写。

image-20221010231940383

  • 插入检索出来的数据

​ INSERT INTO tb_name2 (id,name) SELECT id,name FROM tb_name1;

image-20221010231957165

  • 更新数据

    UPDATE tb_name1 SET score=145 WHERE id=2;

    image-20221010232254620

    UPDATE tb_name2 SET columnName=NewValue [WHERE condition];

    image-20221010233556336

  • 删除数据 DELETE FROM tb_name WHERE id=2;


条件控制

  • WHERE语句 SELECT * FROM tb_name WHERE id=3;
  • GROUP BY

image-20221011004105371

image-20221011004126059

  • HAVING语句 select from —>where过滤—>group by —>having过滤

​ having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。

image-20221011004233924

  • 相关条件控制符

 =、>、<、<>、IN(1,2,3……)、BETWEEN a AND b、NOT、AND 、OR

 Linke()用法中 % 为匹配任意、 _ 匹配一个字符(可以是汉字)

 IS NULL 空值检测

  • 正则表达式

    Mysql支持REGEXP的正则表达式:

        >SELECT * FROM tb_name WHERE name REGEXP ‘^[A-D]’ //找出以A-D 为开头的name

    特殊字符需要转义。

两表连接查询

select tb_name1.name,tb_name1.class,tb_name2.age from (tb_name1,tb_name2) where tb_name1.name=tb_name2.name;

image-20221021152507230

排序

  • order by

    select tb_name1.name,tb_name1.class,tb_name2.age from (tb_name1,tb_name2) where tb_name1.name=tb_name2.name order by age;

    image-20221021152543414

  • limit

image-20221021152558550