MySQL 数据库

鼠扑  论坛元老 | 2024-8-30 22:45:01 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1051|帖子 1051|积分 3153

一、介绍

        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 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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表