MySQL常用语句

语句分类

  • DDL(Data Definition Language) 数据定义语言,用来定义数据库对象:数据库,表,列等
  • DML(Data Manipulation Language) 数据操作语言,用来对数据库中表的数据进行增删改
  • DQL(Data Query Language) 数据查询语言,用来查询数据库中表的记录(数据)
  • DCL(Data Control Language) 数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户

DDL操作数据库

查询所有数据库

SHOW DATABASES;

创建数据库

CREATE DATABASE 数据库名称;

创建数据库(判断,如果不存在则创建)

CREATE DATABASE IF NOT EXISTS 数据库名称;

删除数据库

DROP DATABASE 数据库名称;

删除数据库(判断,如果存在则删除)

DROP DATABASE IF EXISTS 数据库名称;

使用数据库

USE 数据库名称;

DDL操作表

创建表

  • 语法
CREATE TABLE 表名 (字段名 数据类型, 字段名 数据类型);
  • 示例
CREATE TABLE 表名 (
    字段名 数据类型,
    字段名 数据类型,
    ...
    字段名 数据类型
);

查看所有表

SHOW TABLES;

查询表结构

DESC 表名;

删除表

DROP TABLE 表名;

修改表名

ALTER TABLE 表名 RENAME TO 新表名;

单独添加一个字段

ALTER TABLE 表名 ADD 字段名 数据类型;

修改某字段的数据类型

ALTER TABLE 表名 MODIFY 字段名 新数据类型;

修改字段名和数据类型

ALTER TABLE 表名 CHANGE 字段名 新字段名 新数据类型;

删除某一字段

ALTER TABLE 表名 DROP 字段名;

DML表数据的增删查改

给表新增数据

给指定列添加数据

  • 语法
INSERT INTO 表名(字段名1, 字段名2, …) VALUES (值1, 值2, …);
  • 示例
INSERT INTO goods (NAME, price, sales_volume, produced_date) VALUES ('华为P40', 5999, 1000, '2020-08-20');

给全部列添加数据

  • 语法
INSERT INTO 表名 VALUES (值1, 值2, …);
  • 示例
INSERT INTO goods VALUES ('小米11', 4999, 5000, '2020-12-28');

给表批量添加数据

  • 注意
    • 字段名和值的数量要对应
    • 值的类型和字段的类型要对应
    • 除了数值类型,其他数据类型的数据都需要加引号(单引双引都行,推荐单引)
INSERT INTO 表名 VALUES (值1, 值2, …), (值1, 值2, …), (值1, 值2, …);

修改表中数据

  • 注意:修改语句中必须加条件,如果不加条件,则会将所有数据都修改
UPDATE 表名 SET 字段名=新的值 [WHERE 条件];

删除表中的数据

  • 注意:删除语句中必须加条件,如果不加条件,则会将所有数据都删除
DELETE FROM 表名 [WHERE 条件];

DQL查询表中数据

查询指定字段的数据

SELECT 字段名1, 字段名2 FROM 表名;

查询所有字段的数据

SELECT * FROM 表名;

去除重复行

SELECT DISTINCT 字段名1 FROM 表名;

计算列的值(四则运算)

SELECT 字段名1 (+ - * /) 字段名2 FROM 表名;

起别名查询

SELECT 字段名1 AS 别名1, 字段名2 AS 别名2 FROM 表名;

条件查询

SELECT 字段名 FROM 表名 WHERE 条件;
  • 比较运算符
符号 功能
> 大于
< 小于
>= 大于等于
<= 小于等于
= 等于
<>或!= 不等于
  • 逻辑运算符
AND或&& 并且
OR或|| 或者
NOT或! 非、不是
  • 范围
BETWEEN...AND... 在某个范围之内(都包含)
IN(...) 多选一
  • NULL的处理
IS NULL 是NULL
IS NOT NULL 不是NULL

模糊查询

  • MySQL的通配符
    • %: 表示任意多个字符
    • _: 表示一个字符
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';

查询数据排序

  • 排序方式
    • ASC: 升序
    • DESC: 降序
SELECT 字段名 FROM 表名 ORDER BY 列名 排序方式;

聚合函数

  • 注意:

    • 记录为NULL的不统计
    • 如果不是数值类型,那么计算结果为0
  • COUNT: 统计指定列记录数

  • SUM: 计算指定列的数值和

  • MAX: 计算指定列的最大值

  • MIN: 计算指定列的最小值

  • AVG: 计算指定列的平均值

SELECT 聚合函数(字段名) FROM 表名;

分组查询

  • 注意:分组之后,查询的字段为分组字段和聚合函数,查询其他字段无任何意义
SELECT * FROM 表名 GROUP BY 字段名;

-- 带分组条件
SELECT * FROM 表名 GROUP HAVING 分组过滤条件;
  • having与where的区别
    • where是在分组前对数据进行过滤,having是在分组后对数据进行过滤
    • where后面不可以使用聚合函数,having后面可以使用聚合函数

分页查询

  • 注意事项

  • 分页查询 limit 是MySQL数据库的方言,Oracle 分页查询使用 rownumber,SQL Server分页查询使用 top

  • offset是指偏移量,可以认为是跳过的记录数量,不写则默认为0

  • length是指需要显示的总记录数

SELECT * FROM 表名 LIMIT offset, length;

表约束

  • 约束:对表中的数据进行限定,保证数据的正确性、有效性、完整性
约束 说明
PRIMARY KEY 主键约束
UNIQUE 唯一约束
NOT NULL 非空约束
DEFAULT 默认值约束
FOREIGN KEY 外键约束
CHECK 检查约束
  • 注意
    • MySQL不支持检查约束
    • 约束通常是在创建表结构的时候创建

主键约束

  • 主键的作用:用来区分表中的数据

  • 主键的特点

    • 主键必须是唯一不重复的值
    • 主键不能包含NULL值
-- 建表
CREATE TABLE 表名 (
    字段名 字段类型 PRIMARY KEY,
    字段名 字段类型
);

-- 建表并设置外键约束
CREATE TABLE 表名(
   列名 数据类型,
   [CONSTRAINT] [约束名称] PRIMARY KEY(列名)
); 

删除主键约束

ALTER TABLE 表名 DROP PRIMARY KEY;

建表后,单独添加主键约束

ALTER TABLE 表名 ADD PRIMARY KEY (字段名);

设置主键自增长

  • 主键,如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值
字段名 字段类型 PRIMARY KEY AUTO_INCREMENT
  • 注意:AUTO_INCREMENT 的字段类型必须是数值类型

唯一约束

  • 唯一约束的作用:让字段的值唯一,不能重复
CREATE TABLE 表名 (
    字段名 字段类型 UNIQUE,
    字段名 字段类型
);

非空约束

  • 非空约束的作用:让字段的值不能为NULL
CREATE TABLE 表名 (
    字段名 字段类型 NOT NULL,
    字段名 字段类型
);

默认值约束

  • 默认值约束的作用:如果这个字段不设置值,就使用默认值
CREATE TABLE 表名 (
    字段名 字段类型 DEFAULT 值,
    字段名 字段类型
);

外键约束

  • 外键:一张表中的某个字段引用其他表的主键,这个字段称为外键
  • 主表:将数据给别人用的表
  • 副表/从表:使用别人数据的表

新建表时,增加外键约束

CREATE TABLE 表名 (
    字段名 字段类型,
    字段名 字段类型,
    -- 添加外键约束
    [CONSTRAINT 外键约束名] FOREIGN KEY(外键字段名) REFERENCES 主表(主键字段名)
);
  • 关键字解释
    • CONSTRAINT: 表示约束外键约束名: 给外键约束取个名字,将来通过约束名可以删除这个约束
    • FOREIGN KEY(外键字段名): 指定某个字段作为外键
    • REFERENCES 主表(主键字段名) : 引用主表的主键的值

删除外键约束

ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名;

已有表增加外键约束

ALTER TABLE 从表 ADD [CONSTRAINT 外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容