数据库定义语言(DDL)
数据库
-
创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
-
删除数据库
drop database 数据库名;
-
切换数据库
use 数据库名;
-
查看所有数据库
show databases;
-
修改数据库编码
alter database 数据库名 character set utf8
表
-
创建表
create table if not exists 表名( 列名 数据类型[列级约束条件], 列名 数据类型[列级约束条件], ... [,表级约束条件])
-
SQL数据类型
- char(n)可以存储任意字符串,但是是固定长度为n,如果插入的长度小于定义长度时,则用空格填充。
- varchar(n)可以存储任意数量字符串,长度不固定,但不能超过n,不会用空格填充。
- smallint用于存储小的整数,范围在 (-32768,32767)
- int用于存储一般的整数,范围在 (-2147483648,2147483647)
- bigint用于存储大型整数,范围在 (-9,223,372,036,854,775,808,9,223,372,036,854,775,807)
- float用于存储单精度小数
- double用于存储双精度的小数
- date存储日期
- time存储时间
- year存储年份
- datetime用于混合存储日期+时间
-
列级约束条件
就是可以在列名后面写的
主键Primary key、外键foreign key 、唯一 unique、检查 check 、默认default 、非空/空值 not null/ null
-
表级约束条件
就是列都写完了,你可以单独拿出来在最下面写的,和列级约束条件是两种不同的书写模式,但是作用都是一样的
主键、外键、唯一、检查
-
-
删除表
drop table 表名
-
查看表
# 查看所有表 show tables; # 查看表的创建语句 show create table 表名; # 查看表结构 desc 表名
-
修改表
# 添加列 alter table 表名 add 列名 列类型 [列级约束条件], ... # 修改列 alter table 表名 modify 列名 列类型; # 修改列名 alter table 表名 change 原列名 新列名 列类型 # 删除列 alter table 表名 drop 列名 # 修改表名 alter table 表名 rename to 表名
数据库操纵语言(DML)
-
插入
INSERT INTO 表名 VALUES(值1, 值2, 值3); INSERT INTO 表名(列名1, 列名2) VALUES(值1, 值2), (值1, 值2), (值1, 值2);
-
修改
UPDATE 表名 SET 列名=值,... WHERE 条件
警告:如果忘记添加
WHERE
字句来限定条件,将使得整个表中此列的所有数据都被修改! -
删除
DELETE FROM 表名 WHERE 条件
警告:如果忘记添加WHERE
字句来限定条件,将使得整个表中此列的所有数据都被删除!
数据库查询语言(DQL)
-
单表查询
SELECT 列名1 as 列1, 列名2 as 列2 FROM 表名 -- 查询不重复值 SELECT DISTINCT * FROM 表名 WHERE 约束条件
- where后的约束条件
>, <, <=, >=, =, <>
between n1 and n2
in (n1, n2, ...)
列名 like %xxx%
isnull
and
,or
,not
- where后的约束条件
-
多表查询
-- 基础多表查询 SELECT * FROM 表1, 表2 WHERE 条件 -- 内联 -- 左联 LEFT JOIN 返回左边所有的行 -- 右联 RIGHT JOIN 返回右边所有的行 SELECT column_name(s) FROM table_name1 INNER[LEFT, RIGHT] JOIN table_name2 ON table_name1.column_name=table_name2.column_name
-
排序查询
SELECT * FROM 表名 WHERE 条件 ORDER BY 列名1 ASC|DESC, 列名2 ASC|DESC
- ASC(升序,即从小到大排序)
- DESC(降序,即从大到小排序)
-
分组查询
select 列名 from 表名 group by 列名 having 约束条件(可以使用聚集函数)
-
where 和 having 的区别?
-
where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
-
where 后不可以跟聚合函数,having可以进行聚合函数的判断。
-
-
-
分页查询
select * from 表名 limit n1, n2
-
嵌套查询
SELECT * FROM 表名 WHERE 列名 = (SELECT 列名 FROM 表名 WHERE 条件)
文章评论