MySQL 数据库
一、介绍MySQL数据库是一个RDBMS(关系型数据库:建立在关系模型基础上,由多张相互毗连的二维表构成)。
1.1 MySQL数据类型
MySQL数据类型紧张有数值类型、字符串类型、日期类型三种。
1.1.1 数值类型
名称大小signed类型的取值范围unsigned类型的取值范围TINYINT1字节[ -128, 127 ][ 0, 255 ]SMALLINT2字节[ -32768, 32767 ][ 0, 65536 ]MEDIUMINT3字节[ -8388608, 8388607][ 0, 16777215 ]INT或INTEGER4字节[ -2147483648, 2147483647 ][ 0, 4294967295 ]BIGINT8字节[ -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 低)
TINYBLOB0-255 bytes短二进制数据TINYTEXT0-255 bytes短文本字符串BLOB0-65535 bytes长二进制数据TEXT0-65535 bytes长文本数据MEDIUMBLOB0-16 777 215 bytes中等二进制数据MEDIUMTEXT0-16 777 215 bytes中等文本数据LONGBLOB0-4 294 967 295 bytes巨大二进制数据LONGTEXT0-4 294 967 295 bytes巨大文本数据 1.1.3 日期类型
名称大小范围格式描述DATE3字节 1000-01-01
至
9999-12-31
YYYY-MM-DD
日期TIME3字节 -838:59:59
至
838:59:59
HH:MM:SS时间YEAR1字节 1901 至 2155
YYYY年份DATETIME8字节 1000-01-01 00:00:00
至
9999-12-31 23:59:59
YYYY-MM-DD
HH:MM:SS
日期 + 时间TIMESTAMP4字节 1970-01-01 00:00:01
至
2038-01-19 03:14:07
YYYY-MM-DD
HH:MM:SS
时间戳 二、SQL语句
根据常用习惯,本文的SQL语句中的中括号[ ... ]中的内容体现可以写,也可以不写。
2.1 SQL语句的通用语法
1SQL语句支持多行书写,用分号结尾2SQL语句允许使用Tab和空格3MySQL的SQL语句,不区分大小写,建议:关键字使用大写4 注释
单行:使用 -- 或 #
多行:使用 /* */
2.2 SQL语句分类
SQL语句分类紧张有以下四种:
分类全称阐明DDLData Definition Language数据定义语言,用于定义数据库对象(数据库、表、字段)DMLData Manipulation Language数据操作语言,用于对数据库表中数据进行增、删、改DQLData Query Language数据查询语言,用于查询数据库表中的记录。DCLData 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 SETage=18 WHERE 条件 name='TinyC' ;
2.5 DQL语句
DQL语句实用于查询数据表中的记录(行)。
语法编写顺序:
https://i-blog.csdnimg.cn/direct/8b5d81bad58e4c06bf139b700f37de2f.png
执行顺序:
https://i-blog.csdnimg.cn/direct/98d5be12ac394c7ab42049cf0c2aa476.png
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企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]