MySQL基础语法汇总

SQL语言包括以下四个部分

在开始介绍语法之前先给大家介绍一下SQL的组成部分:
1、DML(数据操作语言):用来插入、修改和删除表中的数据,如INSERT(增)、DELETE(删)、UPDATE(改)语句。
2、DDL(数据定义语言):在数据库中创建或删除数据库对象等操作的,如CREATE(增)、DROP(删)、ALTER(改)等语句。
3、DQL(数据查询语言):用来对数据库中的数据进行查询,如SELECT(查)语句。
4、DCL(数据控制语言):用来控制数据库组件的存取许可、存取权限等,如GRANT(授予)、REVOKE(废除)等。

DML(数据操作语言)

DML(数据操作语言):用来插入、修改和删除表中的数据,如INSERT(增)、DELETE(删)、UPDATE(改)语句。

将数据插入到表格中

插入全部字段的时候字段名和字段的值需要一一对应:
INSERT INTO 表名(字段名1,字段名2…) VALUES (字段值1,字段值2);

使用INSERT 语句插入记录时,如果不包含字段名称,VALUES后值列表中各字段的顺序必须和表定义中各字段的顺序相同,如果表结构变了,则值列表也要变化,否则会出现错误:
INSERT INTO 表名 VALUES (字段值1,字段值2);

没有添加数据的字段可以使用NULL,有默认值的可以使用DEFAULT

插入多条数据的时候使用VALUE速度比较快,每个值列表之间使用逗号分隔最后一个再使用分号:
INSERT INTO 表名(字段名1,字段名2…) VALUE (字段值1,字段值2),(字段值1,字段值2)…;

更新数据记录

不带条件修改数据(会把所有的字段名都做修改):
UPDATE 表名 SET 字段名=新的值;
带条件修改数据:
UPDATE 表名 SET 字段名=新的值 WHERE 条件;

删除表记录

带条件删除数据:
DELETE FROM 表名 WHERE 字段名=值;
不带条件删除数据,删除所有数据:
DELETE FROM 表名;

数据库约束

关键字 字段属性、约束名
PRIMARY KEY(PK) 主键约束
UNIQUE(UK) 唯一约束
DEFAULT 默认约束
FOREIGH KEY(FK) 外键约束
AUTO_INCREMENT 自动增长(整数型自动增长)
NOT NULL 非空约束

已有表添加主键:
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
删除主键:
ALTER TABLE 表名 DROP PRIMARY KEY;
修改自增起始值:
ALTER TABLE 表名 AUTO_INCREMENT=起始值;
删除语法DELETE / TRUNCATE:
前者只删除表中数据,后者删除数据的同时,重置主键自增的值为1

蠕虫复制

创建表2结构和表1结构一样:
CREATE TABLE 表2 LIKE 表1;
将表1的数据复制到表2:
INSERT INTO 表名2 SELECT * FROM 表名1;

DDL(数据定义语言)

DDL(数据定义语言):在数据库中创建或删除数据库对象等操作的,如CREATE(增)、DROP(删)、ALTER(改)等语句。

创建数据库

直接创建数据库:
CREATE DATABASE 数据库名;
判断是否存在并创建:
CREATE DATABASE IF NOT EXISTS 数据库名;
创建指定格式数据库:
CREATE DATABASE 数据库名 CHARACTER SET GBK;

查看数据库

查看所有数据库:
SHOW DATABASES;
查看某个库的定义信息:
SHOW CREATE DATABASE 数据库名;
查看正在使用的数据库:
SELECT DATABASE();
使用/切换数据库:
Use 数据库名;

修改和删除数据库

修改数据库字符集:
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 新字符集;
删除数据库(数据无价谨慎使用):
DROP DATABASE 数据库名;

创建表

创建表:
CREATE TABLE 表名(字段名 数据类型,字段名 数据类型);
快速创建一个相同表结构的表:
CREATE TABLE 表名 LIKE 新表名;

查看表

查看数据库中所有表:
SHOW TABLES;
查看表结构:
DESC 表名;
查看创建表的SQL语句:
SHOW CREATE TABLE 表名;

删除表

直接删除表:
DROP TABLE 表名;
判断表是否存在并删除表:
DROP TABLE IF EXISTS 表名;

修改表结构

添加列:
ALTER TABLE 表名 ADD 字段名 字段类型;
修改列类型:
ALTER TABLE 表名 MODIFY 字段名 新的类型;
修改列名:
ALTER TABLE 表名 CHANGE 老字段名 新字段名 类型;
删除列:
ALTER TABLE 表名 DROP 字段名;
修改表名:
RENAME TABLE 旧表名 TO新表名;
修改表的字符集:
ALTER TABLE 表名 DEFAULT CHARACTER SET 新字符集;

DQL(数据查询语言)

DQL(数据查询语言):用来对数据库中的数据进行查询,如SELECT(查)语句。

标准语法格式

SELECT 字段 FROM 表名 WHERE 条件;

比较运算符

符号 含义
> 大于
< 小于
<= 小于等于
>= 大于等于
= 等于
<>、!= 不等于

逻辑运算符

符号 含义
AND(&&) 多个条件同时满足
NOT(!) 不满足
OR(II) 多个条件其中一个满足
in() in里面每个数据都会作为一次条件,只要满足的就会显示

模糊查询like

LIKE 语义:像什么
满足通配符字符串的数据就会显示:
SELECT * FROM 表名 WHERE 字段名 LIKE ‘通配符字符串’;
SELECT * FROM 表名 WHERE 字段名 LIKE ‘_陈%’;
MySQL通配符有两个:
%:表示任意多个字符
_:表示一个字符

查询语句-排序

关键字:
ORDER BY 字段名 [ASC|DESC]
ASC:升序 DESC:降序
单列排序:
使用字段数据排序:
SELECT * FROM 表名 ORDER BY 字段名 DESC;
组合排序:
当字段1数据有相同时,再用字段2数据进行排序
SELECT * FROM 表名 WHERE 条件 ORDER BY 字段名1 ASC, 字段名2 ASC;

查询语句-聚合函数

函数名 作用
COUNT() 返回某字段的行数
SUM() 返回指定列数值的和,如果不是数值类型,那么结果为0
MAX() 返回指定列最大值
MIN() 返回指定列最小值
AVG() 返回指定列平均值

聚合函数的使用: 写在SQL语句SELECT后:
SELECT 聚合函数(字段名) FROM 表名;

查询语句-分组

分组一般和聚合函数一起使用,单独分组用得很少
关键字:
GROUP BY 将字段中相同值作为一组,返回第一条数据

SELECT * FROM 表名 GROUP BY 字段名;
SELECT * FROM 表名 WHERE 条件 GROUP BY 字段名;

查询语句-limit语句

SELECT * FROM 表名 WHERE 条件 LIMIT offset, length;

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

length 指需要显示的总记录数

使用:
从第一条数据开始一共显示5条数据:
SELECT * FROM 表名 LIMIT 0,5;

外键约束

新建表时增加外键:
CREATE TABLE 表名(
字段名 字段类型,
字段名 字段类型,
-外键约束:

[CONSTRAINT 外键约束名] FOREIGN KEY(外键字段名)

REFERENCES 主表名(主键)
);
已有表时增加外键:
ALTER TABLE 从表 ADD [CONSTRAINT 外键约束名] FOREIGN KEY(外键字段名) REFERENCES 主表(主键字段名);
删除外键:
ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名;

外键级联操作

级联更新:
ON UPDATE CASCADE主表更新时,从表跟着更新
级联删除:
ON DELETE CASCADE 主表删除时,从表跟着删除

内连接

隐式内连接:
看不到JOIN关键字,条件使用WHERE指定
SELECT 字段 FROM 表1,表2 WHERE 条件;
显式内连接:
使用INNER JOIN … ON语句,可以省略INNER
SELECT 字段 FROM 左表 INNER JOIN 右表 ON 表连接条件 WHERE 查询条件;

左外连接

SELECT 字段 FROM 左表 LEFT OUTER JOIN 右表 ON 表连接条件 WHERE 查询条件;

子查询

单行单列:
在WHELE 后面作为条件
SELECT 查询字段FROM 表 WHERE 字段=(子查询);
多行单列:
在WHERE 后面作为条件
SELECT 查询字段 FROM 表 WHERE 字段 IN (子查询);
多行多列:
在FROM后面作为表
SELECT 查询字段FROM (子查询) 表别名 WHERE 条件;
子查询作为表需要取别名,否则这张表没有名称无法访问表中的字段

创建表

创建表

创建表

DCL(数据控制语言)

DCL(数据控制语言):用来控制数据库组件的存取许可、存取权限等,如GRANT(授予)、REVOKE(撤销)等。

GRANT(授权)

在授权给数据库之前需要先创建用户:
例子1:创建本地用户test,密码为123:
localhost表示本机
CREATE USER test@localhost IDENTIFIED BY 123;

例子2:创建本地用户test2,也可以不用密码:
CREATE USER test2@localhost ;

授予test用户密码为123,,获得bankDB数据库所有权限:
GRANT all on bankDB.* To test IDENTIFIED BY 123;

授予test用户密码为123,,获得bankDB数据库查询的权限:
GRANT select on bankDB.* To test IDENTIFIED BY 123;

查看已存在的用户

USE mysql;
SELECT Host,User,Password,Select_priv,Insert_priv,Update_priv,Delete_priv
FROM user;

删除用户

例子:
删除一个test用户
DROP USER test@localhost;

使用mysqladmin命令改密码

使用mysqladmin命令修改test的密码为12345:
mysqladmin -u test -p password “12345”
Enter password:
Enter password这里是提示请输入原来的用户密码

使用SET命令修改用户密码

用户登录MySQL服务器之后,可以使用SET命令修改test的密码为12345
SET PASSWORD FOR test@localhost=PASSWORD(“12345”);

REVOKE

撤销已经赋予给 MySQL 用户权限的权限
revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:

grant all on . to dba@localhost;

revoke all on . from dba@localhost;

注意事项:

  1. grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。

事务和数据库访问

四大特性

1.原子性 2.一致性 3.隔离性 4.持久性
什么是事务?如何执行一个事务?
START TRANSACTION; 开启事务
COMMIT; 提交事务
ROLLBACK; 回滚事务
每条SQL语句都是一个单独的事务,自开自提,通过设置可以关闭自动提交事务。
关闭自动提交事务: SET AUTOCOMMIT= 0; 0:OFF(关) 1:ON(开)

回滚点

设置回滚点:
SAVEPONIT 回滚点名字;
回到回滚点:
ROLLBACK TO 回滚点;

JDBC访问数据库步骤

  1. Class.forName(“com.mysql.jdbc.driver”); --注册驱动
  2. DriverManager.getConnection(“URL”, ”User”, “PassWord”); --连接数据库
  3. 调用 .createStatement() 获取Statement对象执行SQL语句

Statement对象的API介绍:
Boolean execute(String sql) --执行任何SQL语句,如果是查询语句返回true,不是返回false
Int executeUpdate(String sql) --用于执行增删改语句;返回影响的行数
ResultSet executeQuery(String sql) --执行查询语句;返回查询到的结果集

JDBC实现对单表数据查询

关键字ResultSet
调用next方法,ResultSet内部指针回移动到下一行数据,有数据则返回true,无则false
调用getXXX(),方法获取数据:
参数是字符串则根据字段名获取值; 参数是整数则通过字段序号获取值

JDBC事务

Connection接口与事务有关的方法:
SQLException(false/ture); false:开启事务 ture :关闭事务
commit(); 提交事务
rollback(); 回滚事务

PreparedSatement使用步骤

编写SQL语句,位置内容使用?占位:
SELECT * FROM user WHERE name=? AND password=?; 参数化的SQL
设置参数:
setXXX(第几个?, ?的具体值);
用executeQuery() 、executeUpdate() 执行SQL语句

SQL语句中有like的使用方法:
如何编辑SQL语句在使用like的同时使用preparedStatement

发布了152 篇原创文章 · 获赞 141 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_44739706/article/details/105206911
今日推荐