复习MySQL

表相关操作

创建表
sql 复制代码
CREATE TABLE [IF NOT EXISTS] table_name (
  `runoob_id` INT UNSIGNED AUTO_INCREMENT COMMENT '自增主键ID', 
  `runoob_title` VARCHAR(100) NOT NULL COMMENT '文章标题(非空)',
  `runoob_author` VARCHAR(40) NOT NULL COMMENT '作者(非空)',
  `submission_date` DATE DEFAULT NULL COMMENT '提交日期(允许空)',
  -- 统一指定主键(若单个主键,也可在 `runoob_id` 后直接加 PRIMARY KEY)
  PRIMARY KEY (`runoob_id`)
) 

ENGINE=InnoDB 
DEFAULT CHARSET=utf8mb4 
COLLATE=utf8mb4_general_ci 
COMMENT='文章信息表'; -- 表的备注
查看表结构
mysql 复制代码
desc table table_name;
删除表
mysql 复制代码
-- 表结构也会删除
drop table [IF EXISTS] table_name;
mysql 复制代码
-- 保留表结构, 只删除数据
truncate TABLE table_name;
插入数据
mysql 复制代码
insert into table_name (column1, column2, column3, ...)
values (value1, value2, value3, ...);

如果要在每一列列插入数据,可以省略列名:

mysql 复制代码
insert into table_name
values (value1,value1, value3, ...);
查询
mysql 复制代码
select [distinct] column1, column2, ...       -- distinct 去重  
from table_name                             
    [join table2 on table_name.column = table2.column]     -- 内连接(取两表中匹配的记录)  
    [left join table3 on table_name.column = table3.column] -- 左连接(取左表全部+右表匹配记录)  

where condition                            -- 过滤条件(分组前过滤)  
group by column_name(s)                    -- 按字段分组(通常和聚合函数一起用) 
having condition                           -- 分组后过滤(作用于聚合结果)  
order by column_name [asc | desc]          -- asc 升序(默认),desc 降序  
limit [offset,] row_count;                 -- 限制返回的行数,可带偏移量(分页)
更新
mysql 复制代码
update customers  
set total_purchases = (  
    select sum(amount)  
    from orders  
    where orders.customer_id = customers.customer_id  
)  
where customer_type = 'premium';
alter

添加列

mysql 复制代码
alter table table_name 
add column column_name datatype;

修改数据类型:

mysql 复制代码
alter table table_name  
modify column column_name new_datatype;

修改列名:

mysql 复制代码
alter table table_name  
change column old_column_name new_column_name datatype;

删除列:

mysql 复制代码
alter table table_name  
drop column column_name;

添加主键:

mysql 复制代码
alter table table_name  
add primary key (column_name);
通配符
  1. 百分号 %:匹配零个或多个字符。比如 'a%' 匹配以字母 'a' 开头的任何字符串。

  2. 下划线_ :表示一个字符

连接

INNER JOIN(内连接/等值连接)

返回两个表中满足连接条件的匹配记录(即两表的交集)。

sql 复制代码
  SELECT 列名 FROM 表1 INNER JOIN 表2 ON 表1.关联列 = 表2.关联列;

INNER可省略

LEFT JOIN(左连接)

返回左表的所有记录 ,以及右表中与左表匹配的记录;若右表无匹配,显示NULL

sql 复制代码
  SELECT 列名 FROM 左表 LEFT JOIN 右表 ON 左表.关联列 = 右表.关联列;
RIGHT JOIN(右连接)

返回右表的所有记录 ,以及左表中与右表匹配的记录;若左表无匹配,显示NULL

sql 复制代码
  SELECT 列名 FROM 左表 RIGHT JOIN 右表 ON 左表.关联列 = 右表.关联列;

数据库相关操作

注意 sql 结尾有分号

切换数据库:

mysql 复制代码
use database;  

列出所选数据库中所有表:

mysql 复制代码
show tables;

创建数据库:

mysql 复制代码
create database [if not exists] database_name
  [character set charset_name] -- 字符集
  [collate collation_name];   -- 排序规则

删除数据库:

mysql 复制代码
drop database database_name; -- 直接删除数据库,不检查是否存在 或 
drop database [if exists] database_name;

NULL值

NULL 表示缺失或未知,不等于空字符串("")或0,不代表任何具体值

普通的 =!= 对NULL无效,需使用以下运算符:

  1. IS NULL :当列值为NULL时返回true

    例:SELECT * FROM 表 WHERE 列 IS NULL;

  2. IS NOT NULL :当列值不为NULL时返回true

    例:SELECT * FROM 表 WHERE 列 IS NOT NULL;

  3. <=> :特殊比较运算符,当两值相等或都为NULL 时返回true

    例:SELECT * FROM 表 WHERE 列 <=> NULL;(等价于IS NULL

相关推荐
Jane Chiu1 小时前
Oracle DBMS_REDEFINITION(在线重定义)
数据库·oracle·分区表
我叫黑大帅1 小时前
MySQL 并发插入竞态问题:原子写入实践指南
后端·mysql·面试
全栈前端老曹1 小时前
【MongoDB】安全与权限管理 —— 用户认证、角色权限、SSL 加密
前端·javascript·数据库·安全·mongodb·nosql·ssl
怕孤单的草丛2 小时前
缓存管理面临的主要问题
java·数据库·缓存
Uncertainty!!2 小时前
Ubuntu 22.04 安装超好用中文输入法rime-ice(雾凇拼音)过程记录
linux·ubuntu·中文输入法
我会尽全力 乐观而坚强2 小时前
MySQL零基础入门(二)
数据库·mysql·adb
Asuicao3 小时前
centos7.9版本升级ssh OpenSSH 9.8p1 源码 OpenSSL 1.1.1w 源码包以及安装升级回滚文档
运维·ssh
kali-Myon3 小时前
某校园门禁系统高危 SQL 注入漏洞挖掘复盘
数据库·sql·安全·web安全
程序员在囧途4 小时前
likeadmin-api API 中转站怎么做统一报价?从 /pricing、/user/balance 到 task_id 回执的落地方法
运维·服务器·数据库·likeadmin-api·api中转站·token计费