Mysql基础语法快速上手,ddl,dml,dql,dcl语句速查
ddl语句
创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
查询所有数据库
SHOW DATABASES;
查询当前数据库
SELECT DATABASE();
删除数据库
DROP DATABASE [IF EXISTS] 数据库名;
使用数据库
USE 数据库名;
创建表
CREATE TABLE 表名(
字段1 类型 ...
字段2 类型 ...
);
CREATE TABLE student(
id int,
name varchar(16),
gender varchar(10),
age int
);
查看表
(查看所有表):
SHOW TABLES;
(查看表结构):
DESC 表名;
(查看指定表):
SHOW CREATE TABLE 表名;
修改表
以下的加号不代表语句,只是以直观的形式将两个语句组合起来
例:
ALTER TABLE table_name ADD new_val VARCHAR(16);
ALTER TABLE 表名
(添加字段):
+ ADD 字段名 数据类型...
(修改数据类型):
+ MODIFY 字段名 新数据类型
(修改字段名及数据类型类型):
+ CHANGE 旧字段名 新字段名 数据类型;
(删除字段):
+ DROP 字段;
(修改表名):
+ RENAME TO 新表名;
删除表
(删除):
DROP TABLE [IF EXISTS] 表名;
(先删除表,再重新创建表结构):
TRUNCATE TABLE 表名;
数据类型
TINYINT 1 byte
SMALLINT 2 bytes
MEDIUMINT 3 bytes
INT&INTEGER 4 bytes
BIGINT 8 bytes
FLOAT 4 bytes
DOUBLE 8 bytes
DECIMAL 依赖于M(精度)与D(标度)的值
CHAR 0-255 bytes 定长字符串
VARCHAR 0-65535 bytes 可变长字符串
TINYBLOB 0-255 bytes 不超过255字节的二进制数据
BLOB 0-65535 bytes 二进制长文本数据
MEDIUMBLOB 0-16777215 bytes 二进制加长文本数据
LONGBLOB 0-4294967295 bytes 二进制超长文本数据
TINYTEXT 0-255 bytes 短文本字符串
TEXT 0-65535 bytes 长文本数据
MEDIUMTEXT 0-16777215 bytes 加长文本数据
LONGTEXT 0-4294967295 bytes 超长文本数据
DATE 1000-01-01至9999-12-31
TIME -838:59:59至838:59:59
YEAR 1901至2155
DATETIME 1000-01-01 00:00:00 至 9999-12-31 23:59:59
TIMESTAMP 1970-01-01 00:00:01 至 2038-01-19 03:14:07
dml语句
添加数据
注意!
* 插入数据需要与指定的字段一一对应
* 插入数据的大小应该符合指定字段的数据范围
(单个添加对应字段,若省略对应字段则需添加所有字段):
INSERT INTO 表名 (字段1,字段2,...) VALUES (值1,值2,...);
INSERT INTO 表名 VALUES(值1,值2,...);// 不建议
(多个添加每一个值的数据类型必需顺序一一对应):
INSERT INTO 表名 (字段1,字段2,...) VALUES (值1,值2,...),
(值1,值2,...),
(值1,值2,...);
// 不建议
INSERT INTO 表名 VALUES(值1,值2,...),
VALUES(值1,值2,...),
VALUES(值1,值2,...);
修改数据
注意!
如果不加条件,则会修改所有数据
UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2,...[WHERE 条件];
删除数据
注意!
* 如果不写条件,则会删除所有数据
* 删除语句最少会影响一行的数据,即不能删除一行中某个字段的数据
DELETE FROM 表名 [WHRER 条件];
dql语句
聚合函数
COUNT():统计数量
MAX(): 求最大值
MIN(): 求最小值
AVG(): 求平均值
SUM(): 求和
基本查询
SELECT [DISTINCT] 字段列表... FROM 表名列表...
+ WHERE 条件
+ GROUP BY 分组字段列表...
+ HAVING 分组后条件列表...
+ ORDER BY 排序字段列表...
+ LIMIT 起始索引,查询记录数;
条件
>, <, =, <>, LIKE, IN(), BETWEEN ... AND ... , OR, !
多表查询
内连接(查询两张表的交集数据)
//隐式内连接
SELECT ... FROM 表1,表2 WHERE 条件
//显示内连接
SELECT ... FROM 表1 [inner] join 表2 ON 条件
外连接(包含交集+左/右表的数据)
//左外连接
SELECT ... FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件
//右外连接
SELECT ... FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件
联合查询(默认去重,必须保持查询结果列数一致,字段类型一致)
SELECT ... FROM 表1...
UNION[ALL]
SELECT ... FROM 表1...;
子查询
//行子查询
SELECT ... FROM 表1 WHERE (col_1,col_2..) = (SELECT col_1,col_2.. FROM 表2 WHERE ...);
//列子查询
SELECT ... FROM 表1 WHERE column1 IN (SELECT column1 FROM 表2 WHERE ...);
//表子查询
SELECT ... FROM 表1 WHERE (col_1,col_2..) IN (SELECT col_1,col_2.. FROM 表2 WHERE ...);
// 操作符:IN,NOT IN,ANY,SOME,ALL
dcl语句
数据库名与表名可以使用*进行通配,代表所有。
授予权限
GRANT 权限列表... ON 数据库名.表名 TO '用户名'@'主机名';
撤销权限
REVOKE 权限列表... ON 数据库名.表名 TO '用户名'@'主机名';
查询权限
SHOW GRANTS FOR '用户名'@'主机名';
主机名可以使用%匹配
新增用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
删除用户
DROP USER '用户名'@'主机名';
修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
查询用户
USE mysql;
SELECT * FROM user;