MySQL基本语法
仅供参考
MySQL基本操作:
查询数据库:
SHOW DATABASES; (show databases;)
使用指定的数据库:
USE 数据库名称; (use 数据库名称;)
查看数据库中所有的表:
SHOW TABLES; (show tables;)
创建指定名称的数据库:
CREATE DATABASE 数据库名称; (create database 数据库名称;)
删除指定名称的数据库:
DROP DATABASE 数据库名称; (drop database 数据库名称;)
创建表:
CREATE TABLE 表名(字段名1,数据类型[约束],字段名2,数据类型[约束]…); (create table 表名();
查看数据表:
SHOW CREATE TABLE 表名; (show create table 表名;)
DESCRIBE 表名; (describe 表名;)
DESC 表名; (desc 表名;)
删除表:
DROP TABLE 表名; (drop table 表名;)
数据操作(DML):
插入数据:
INSERT INTO 表名(字段1,字段2,字段3…) VALUES(值1,值2,值3…);
删除数据:
DELETE FROM 表名 [WHERE 条件]; (delete from 表名[where 条件];
更新数据:
UPDATE 表名 SET 列名1=值1,列名2=值2… WHERE 条件;
表的约束:
非空约束:
NOT NULL; (not null;) 不允许某列的内容为空
设置默认值:
DEFAULT; (default;)
唯一约束:
UNIQUE; (unique;) 在该表中,该列的内容必须唯一
主键约束:
PRIMARY KEY; (primary key;) 非空且唯一
主键自增长:
AUTO_INCREMENT; (auto_increment;) 从1开始自增,增长为1,MySQL特有(使用前提是主键),一张表只能有一列是主键自增长,必须是数字类型。
外键约束:
FOREIGN KEY; (foreign key;)
单表查询(DQL):
比较符:
< > = <= >= != <>
逻辑运算符:
AND(&&) OR(||) NOT(!)
运算符比较级:
括号 > 比较符 > NOT > AND > OR
算术符:
对于NUMBER (数值)类型可以+ - * / 运算符操作 对于DATE(时间)类型可以+ - 运算操作
列别名:
SELECT 列 别名 FROM 表名; 没特殊情况都使用英文名,有空格特殊字符、大小写敏感、空格等使用””(双引号)标记
LIKE运算符(模糊查询,非搜索查询):
% 通配符:可表示零或多个字符。
_ 通配符:可代表一个字符。
SQL语句执行顺序:
首先执行FROM语句,其次执行WHERE语句,接着执行SELECT语句,最后执行ORDER BY语句
简单查询:
SELECT * FROM 表名; SELECT 列1,列2… FROM 表名; 一个临时二维表
SELECT DISTINCT 列1… FROM 表名; 过滤重复(多列时,每列都一样才过滤)
SELECT 列名… FROM 表名 WHERE 列名 BETWEEN 数值 AND 数值; 取某一值域范围(闭区间)
SELECT 列名… FROM 表名 WHERE 列名 NOT BETWEEN 数值 AND 数值; 不取某一值域范围
SELECT 列名… FROM 表名 WHERE 列名 IN(值1,值2…); 查找列名中符合集合内值的结果
SELECT 列名… FROM 表名 WHERE 列名 NOT IN(值1,值2…);
SELECT * FROM 表名 WHERE 列名 IS NULL; 查询列为NULL的行数据
结果排序:
SELECT FROM 表名 WHERE 条件 ORDER BY 列名1[ASC/DESC]; 单列排序
SELECT FROM 表名 WHERE 条件 ORDER BY 列名1[ASC/DESC],列名2[ASC/DESC]…; 多列排序,先按列名1排,列名1的值相等时再按列名2排
聚合函数:作用于一组数据,并对一组数据返回一条记录
当列中的值为NULL时,不参与运算
SELECT SUM(IFNULL(列名,数值)) FROM 表名; 用IFNULL把列中为空的值改为数值计算
COUNT:统计结果记录数
SELECT COUNT(列名) FROM 表名; 列名为 * 或者是 常量 时,自动统计主键结果记录数
MAX:统计计算最大值
SELECT MAX(列名) FROM 表名;
MIN:统计计算最小值
SELECT MIN(列名) FROM 表名;
SUM:统计计算求和
SELECT SUM(列名) FROM 表名;
AVG:统计计算平均值
SELECT AVG(列名) FROM 表名;
分页查询:
**假分页:**把数据存储到内存中,需要时直接读取
-
优点:读取速度快
-
缺点:占内存,容易发生内存溢出
**真分页:**需要数据时才去数据库中读取(推荐)
-
优点:占内存小
-
缺点:读取速度慢
分页已知量:
当前页:currentPage
每页显示记录数:pageSize
语法:
SELECT * FROM表名 LIMIT (currentPage-1)*pageSize,pageSize;
想要得到一页数据,当前页与每页数据条数是必须要知道的。
获取出指定页的信息前,首要要知道总数据,因为有了总数据才能得到总页数。
总页数用于判断是否还有下一页,最后一页的计算方式:总条数 % pageSize == 0 ?总条数 / pageSize :总条数 / pageSize + 1;
总条数可以使用count()函数获取,参数可以是具体的列或者*、1都行
多表查询:
笛卡尔积:
表之间没有连接条件返回的结果。多表查询就会产生笛卡尔积。
结论:连接n张表,至少需要n-1个连接条件。
外键约束:
A表中的外键列的值必须参照于B表中的主键列的值,外键列允许为NULL。
注意:在MySQL中,InnDB支持事务和外键,因此要修改表的存储引擎为InnDB
主表和从表关系:主表可以单独存在(被参考的表),从表中的数据参照于主表中的数据。
删除表时:先删除从表,才能删除主表
其中主表的一条数据在从表中能有多条数据与之对应(一对多的关系)
开发中为了提高性能,往往不要外键,但是依然使用InnDB存储引擎
内连接:
隐式:
SELECT 表.列 , 表.列… FROM 表1,表2… WHERE 条件; 条件是多表之间的关系
显式:
SELECT 表.列 , 表.列… FROM 表1 JOIN 表2 ON 条件; (推荐使用) 条件是多表之间的关系
自连接:
把一张表当作两张表用:
SELECT 别名1.列名 , 别名2.列名 FROM 表名 别名1, 表名 别名2 WHERE 条件;