一、介绍
MySQL数据库是一个RDBMS(关系型数据库:建立在关系模型基础上,由多张相互毗连的二维表构成)。
1.1 MySQL数据类型
MySQL数据类型紧张有数值类型、字符串类型、日期类型三种。
1.1.1 数值类型
名称 | 大小 | signed类型的取值范围 | unsigned类型的取值范围 | TINYINT | 1字节 | [ -128, 127 ] | [ 0, 255 ] | SMALLINT | 2字节 | [ -32768, 32767 ] | [ 0, 65536 ] | MEDIUMINT | 3字节 | [ -8388608, 8388607] | [ 0, 16777215 ] | INT或INTEGER | 4字节 | [ -2147483648, 2147483647 ] | [ 0, 4294967295 ] | BIGINT | 8字节 | [ -2^63, 2^63 - 1] | [ 0, 2^64 - 1 ] | FLOAT(M, D) | 4字节 | [ -3.403 E+38, 3.403 E+38 ] | 0 和 [ 1.175 E-38, 3.403 E+38 ] | DOUBLE(M, D) | 8字节 | [ -1.797 E+308, 1.798 E+308 ] | 0 和 [ 2.225 E-308, 1.798 E+308] | DECIMAL | × | 依赖于M(精度)与D(标度)的值
解释:精度M:小数的总位数
标度D:小数点后的位数
例如:12.345的精度为5,标度为2
| 依赖于M度)与D(标度)的值 | 默认采取signed类型,如果想使用unsigned类型,则需要在类型后加上UNISIGNED关键字
1.1.2 字符串类型
名称 | (每个) 大小 | 描述 | CHAR(n) | 0-255 bytes | 定长字符串
由n个字符,不满的用空格占
(性能 比varchar 高)
| VARCHAR(n) | 0-65535 bytes | 变长字符串
由0-n个字符,自动盘算占几个字节
(性能 比char 低)
| TINYBLOB | 0-255 bytes | 短二进制数据 | TINYTEXT | 0-255 bytes | 短文本字符串 | BLOB | 0-65535 bytes | 长二进制数据 | TEXT | 0-65535 bytes | 长文本数据 | MEDIUMBLOB | 0-16 777 215 bytes | 中等二进制数据 | MEDIUMTEXT | 0-16 777 215 bytes | 中等文本数据 | LONGBLOB | 0-4 294 967 295 bytes | 巨大二进制数据 | LONGTEXT | 0-4 294 967 295 bytes | 巨大文本数据 | 1.1.3 日期类型
名称 | 大小 | 范围 | 格式 | 描述 | DATE | 3字节 | 1000-01-01
至
9999-12-31
| YYYY-MM-DD
| 日期 | TIME | 3字节 | -838:59:59
至
838:59:59
| HH:MM:SS | 时间 | YEAR | 1字节 | 1901 至 2155
| YYYY | 年份 | DATETIME | 8字节 | 1000-01-01 00:00:00
至
9999-12-31 23:59:59
| YYYY-MM-DD
HH:MM:SS
| 日期 + 时间 | TIMESTAMP | 4字节 | 1970-01-01 00:00:01
至
2038-01-19 03:14:07
| YYYY-MM-DD
HH:MM:SS
| 时间戳 | 二、SQL语句
根据常用习惯,本文的SQL语句中的中括号[ ... ]中的内容体现可以写,也可以不写。
2.1 SQL语句的通用语法
1 | SQL语句支持多行书写,用分号结尾 | 2 | SQL语句允许使用Tab和空格 | 3 | MySQL的SQL语句,不区分大小写,建议:关键字使用大写 | 4 | 注释
单行:使用 -- 或 #
多行:使用 /* */
| 2.2 SQL语句分类
SQL语句分类紧张有以下四种:
分类 | 全称 | 阐明 | DDL | Data Definition Language | 数据定义语言,用于定义数据库对象(数据库、表、字段) | DML | Data Manipulation Language | 数据操作语言,用于对数据库表中数据进行增、删、改 | DQL | Data Query Language | 数据查询语言,用于查询数据库表中的记录。 | DCL | Data Control Language | 数据控制语言,用于创建数据库用户、控制访问权限 | 2.3 DDL语句
2.3.1 DDL数据库操作
操作 | 语句 | 查询所有数据库 | SHOW DATABASES ; | 查询当前数据库 | SELECT DATABASE() ; | 创建数据库 | CREATE DATABASE [ IF NOT EXISTS ] 数据库名
[ DEFAULT CHARSET 字符集]
[ COLLATE 排序规则 ] ;
解释: ( [ ]体现可以写,也可以不写的参数 )
IF NOT EXIST 体现 如果数据库名称不存在,才创建此数据库
DEFAULT CHARSET 用于指定数据库的字符集,如utf8mb4
COLLATE 用于指定数据库的排序规则
| 删除数据库 | DROP DATABASE [ IF EXISTS ] 数据库名 ; | 使用数据库 | USE 数据库名 ; | 2.3.2 DDL表操作
操作 | 语句 | 查询当前数据库所有表 | SHOW TABLES ; | 查询表结构 | DESC 表名称 ; | 查询指定表的建表语句 | SHOW CREATE TABLE 表名称 ;
| 创建一个新的表 | CREATE TABLE 表名称(
字段1 名称 字段1类型 [ COMMENT 字段1注释 ] ,
字段2 名称 字段2类型 [ COMMENT 字段2注释 ] ,
字段3 名称 字段3类型 [ COMMENT 字段3注释 ] ,
...
字段n 名称 字段n类型 [ COMMENT 字段n注释 ]
) [ COMMENT 表注释 ];
| 修改表名称 | ATLTER TABLE 表名称 RENAME TO 新表名称 ; | 删除表 | DROP TABLE [ IF EXISTS ] 表名称 ; | 删除重建表
(相当于清空表)
| TRUNCATE TABLE 表名称 ;
(删除再重建,相当去清空了表中所有数据)
| 往表中添加字段(列) | ALTER TABLE 表名称 ADD 字段名称 字段类型 [ COMMENT 字段n注释 ] ; | 修改字段类型 | ALTER TABLE 表名称 MODIFY 字段名称 新类型 [ COMMENT 字段n注释 ];
※注※:这里如果需要保留之前的默认值、注释等,一样需要像创造表的格式写上,不然原有的注释和默认值等约束将被清空。下文同理。
| 修改字段名称+类型 | ALTER TABLE 表名称 CHANGE
旧字段名称 新字段名称 新类型 [ COMMENT 字段n注释 ];
| 删除表中字段 | ALTER TABLE 表名称 DROP 字段名称; | 2.4 DML语句
DML语句用于对表中数据进行增加、删除、修改三种操作。
2.4.1 添加数据
增加关键字:INSERT。
操作 | 语句 | 给指定字段添加数据 | 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, ...) ,
(值1, 值2, ...) ,
(值1, 值2, ...) ;
| 2.4.2 删除数据
删除关键字:DELETE。
操作 | 语句 | 删除指定条件的数据
| DELETE FROM 表名称 [ WHERE 条件 ] ;
(如果未指定条件,则 删除全部数据)
举例:
将tb_user表中name为Daniel的那条数据删除 :
DELETE FROM tb_user WHERE name=‘Daniel’ ;
| 2.4.3 修改数据
修改关键字:UPDATE。
操作 | 语句 | 修改指定条件的数据 | UPDATE 表名称 SET 字段名1=值1, 字段名2=值2, ... [ WHERE 条件 ] ;
举例:
将tb_user表中name为TinyC的那条数据,将其中的age修改为18 :
UPDATE tb_user SET age=18 WHERE 条件 name='TinyC' ;
| 2.5 DQL语句
DQL语句实用于查询数据表中的记录(行)。
语法编写顺序:
执行顺序:
2.5.1 基本查询
查询关键字为:SELECT。
操作 | 语句 | 查询全部字段 | SELECT * FROM 表名称 ; (这里的 * 体现通配符) | 查询多个字段 | SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], ... FROM 表名称 ;
解释:1. 查询结果中,可以用自定义别名展示字段名称
2. AS关键字是可以省略的,也就是以下用法也精确:
SELECT 字段1 别名1 FROM 表名称 ;
| 对于查询的结果
(留意!不是修改表内容)
去除重复记录
| 关键字:DISTINCT
用法举例:SELECT DISTINCT 字段1 , 字段2 FROM 表名称 ;
| 2.5.2 条件查询
条件查询关键字为:WHERE。
操作 | 语句 | 查询指定条件的记录 | SELECT 字段列表 FROM 表名称 WHERE 条件列表 ; | 其中,条件列表有多个条件构成。条件可以有以下几种:
比力运算符 | 解释 | 逻辑运算符 | 解释 | > | 大于 | AND 或 && | 逻辑与
(多个条件同时成立)
| >= | 大于等于 | OR 或 || | 逻辑或
(多个条件中任意一个成立)
| < | 小于 | NOT 或 ! | 非,不是 | <= | 小于等于 | | | = | 等于 | | | != 或 <> | 不等于 | | | BETWEEN a AND b
| 范围在[a, b]中 (闭区间) | | | IN(v1, v2, ...) | 符合值等于v1, v2, ...其中一个 | | | LIKE _ 或 %
| 占位符,模糊匹配
(下划线 _ 匹配单个字符)
(百分号 % 匹配多个字符)
| | | IS NULL | 判定是否为NULL | | | 这里的 LIKE 占位符比力抽象,以下例子用于阐明具体使用方法:
1. 查询 tb_user 表中 name为三个字,并且第三个字是 洁 的人的id:
SELECT DISTINCT id FROM tb_user WHERE name LIKE '__洁' ;
2.查询 tb_user 表中 姓彭 的人的id:
SELECT DISTINCT id FROM tb_user WHERE name LIKE '彭%' ;
3.5.2 聚合函数
(留意:聚合函数不可以作为WHERE后的条件!!!)
聚合函数指的是将一列数据作为一个整体,进行纵向盘算。常用聚合函数如下:
函数名称 | 解释 | count(字段名称) | 统计数量 | max(字段名称) | 最大值 | min(字段名称) | 最小值 | avg(字段名称) | 平均值 | sum(字段名称) | 求和 | 在使用聚合函数值,表中的NULL值是不参与聚合函数的盘算的。
比如:求年事在20-50岁人的平均工资
SELECT avg(salary) AS '平均工资' FROM tb_user WHERE age BETWEEN 20 AND 50 ;
3.5.3 分组查询
分组查询关键字为:GROUP BY
实用环境:当分组查询后,查询的只有聚合函数和分组字段,其他字段变得没故意义。
操作 | 语句 | 分组查询 | SELECT 字段列表 FROM 表名称 [ WHERE 条件 ]
GROUP BY 分组字段名称 [ HAVING 分组后的过滤条件 ] ;
解释:这里的HAVING和WHERE后边跟的都是条件,区别如下:
1. WHERE是分组前条件,不满足WHERE条件,则不参与后续分组
2.HAVING后可以跟聚合函数,WHERE不可以。
执行顺序:WHERE > 聚合函数 > HAVING
| 举例:查询年事 > 30岁,根据工作地址分组,找到员工数量大于150的工作地址
SELECT workadd, count(*) FROM tb_user WHERE age > 30
GROUP BY workadd HAVING count(*) > 150 ;
3.5.4 排序查询
排序查询关键字为:ORDER BY
操作 | 语句 | 排序查询 | SELECT 字段列表 FROM 表名称 [ WHERE 条件 ]
ORDER BY 字段1 排序方式1, 字段2 排序方式2 ;
解释:
排序方式分为:1. ASC 升序 2. DESC 降序
(如果第一个字段的值雷同,才会根据第二个字段排序)(默认升序)
| 3.5.5 分页查询
分页查询关键字为:LIMIT
实用环境:当我们需要查询某个条件的前4个记录时,我们可以设置LIMIT 4
操作 | 语句 | 分页查询 | SELECT 字段列表 FROM 表名称 [ WHERE 条件 ]
LIMIT 起始索引, 查询记录数 ;
解释:
1. 起始索引 = (查询页码 - 1) * 每页记录数,从0开始
2. 如果查询的是首页,可以省略起始索引,如 LIMIT 100
3. 分页查询在不同数据库的实现是不同的,在MySQL中是LIMIT
| 举例:设定每页展示20条记录,查询第10页的前三条记录
SELECT * FROM tb_user LIMIT 180, 3 ;
上述例子中的180 = (10 - 1)* 20
2.6 DCL语句
DCL语句用于管理数据库用户、控制不同用户的访问权限。
(一般是紧张的DBA:DataBase Administrator数据库管理员使用,开发一般不消)
2.6.1 用户管理
操作 | 语句 | 查询用户 | USE mysql ;
SELECT * FROM user ;
解释:所有用户都存放在mysql数据库下的user表中。
| 创建用户 | CREATE USER '用户名'@‘主机名’ IDENTIFIED BY '密码' ;
解释:MySQL依靠用户名+主机名确定一个用户
主机名:可以通过哪台电脑的IP可以访问数据库
(主机名为Localhost其实就是127.0.0.1,代表本机,不可以远程访问)
(如果想任意主机都可以访问,则主机号设置为%)
留意:用户名与@,@与主机名之间不允许有空格!!!
| 修改用户密码 | ALTER USER '用户名'@‘主机名’ IDENTIFIED
WITH mysql_native_password BY ‘新密码’ ;
留意:在执行这条语句时,请确保当前用户有充足高的权限
| 删除用户 | DROP USER '用户名'@‘主机名’
| 2.6.2 权限控制
刚创建好的新用户是不具备任何权限的,因今后续访问需要分配权限。
MySQL定义了很多种权限,其中常用权限有以下几种:
权限名称 | 解释 | ALL | 所有权限 | SELECT | 查询数据 | INSERT | 插入数据 | UPDATE | 修改数据 | DELETE | 删除数据 | ALTER | 修改表 | DROP | 删除数据库、删除表、删除视图 | CREATE | 创建数据库、创建表 | 权限控制操作如下所示:
操作 | 语句 | 查询用户权限 | SHOW GRANTS FOR '用户名'@‘主机名’ | 授予用户权限 | GRANT 权限列表 ON 数据库名, 表名称 TO '用户名'@‘主机名’
解释:1. 要阐明是为哪个数据库的哪个表给谁什么权限
2. 如果想给的是所有数据库,或者所有表,则用 * 代替
3. 权限列表 = 权限1, 权限2, 权限3, ... ,权限n (用 , 分隔)
| 打消用户权限 | REVOKE 权限列表 ON 数据库名, 表名称 TO '用户名'@‘主机名’ |
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |