• 数据库---MySQL(一)


    一、介绍

    1.数据库

    数据库(database)就是存储数据的仓库。为了方便数据的存储和管理,将数据按照特定的规律存储在磁盘上。通过数据库管理系统,有效组织和管理存储在数据库中的数据。

    数据库系统和数据库不是一个概念,数据库系统(DBS),比数据库大很多,由数据库、数据库管理系统、应用开发工具构成

    数据库管理系统(Database Management System,简称DBMS)用来定义数据、管理和维护数据的软件。它是数据库系统的一个重要组成部分。

    2.MySQL

    MySQL的特点:

    • MySQL 是一个关系型数据库管理系统,所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。 
    • 开源免费
    • 跨平台

    3.SQL

    Structured Query Language 简称SQL,结构化查询语句,数据库管理系统通过SQL语句来管理数据库中的数据。

    • DDL(Data Defination Language):数据定义语言,主要用于数据库、表、视图、索引和触发器等。像DROP、CREATE、ALTER等语句
    • DML(Data Manipulation Language):主要包括对数据的增删改。INSERT插入数据、UPDATE更新数据、DELETE删除数据
    • DQL(Data Query Language):数据检索语句,用来从表中获得数据,确定数据怎样在应用程序中给出。像SELECT查询语句
    • DCL(Data Control Language):数据控制语言,主要用于控制用户的访问权限。像GRANT、REVOKE、COMMIT、ROLLBACK等

    二、安装

    windows安装

    下载地址: https://dev.mysql.com/downloads/mysql/,可以下载.zip文件直接解压,也可以下载安装包.msi安装。

     

    三、使用

    --初始化MySQL服务器
    mysqld --initialize-insecure
    --启动mysql服务器
    mysqld
    --登录mysql
    mysql -h host -p port -D databasename -u username -p
    --退出mysql
    exit/quit/q
    ctrl+c --退出命令
    --安装/删除mysql服务 mysqld --install mysqld --remove --启动/停止mysql服务 net start MySQL net stop NySQL

    1.启动mysql服务

     

    问题:

    2.加入环境变量

    3.设置windows服务

    3.1 安装与删除服务

    3.2 问题:Install/Remove of the Service Denied!

    3.3 安装成功之后可以在服务中看到MySQL服务,点击启动

     3.4 问题:点击启动服务时,提示 “本地计算机上的MySQL启动后停止,某些服务在未由其他服务或程序使用时将自动停止”;remove之后重新install之后正常

     3.5 命令行启动与停止

      

     四、命令

    1.数据库操作

    --显示数据库
    show databases;
    --使用数据库
    use database_name;
    --创建数据库
    create database database_name;
    create database database_name default charset=utf8;
    --删除数据库
    drop database database_name;

    1.1 显示数据库

    1.2 创建数据库和删除数据库

    创建数据库之后data目录下会增加了db1目录

     

    1. 3 使用数据库和显示数据表

    2.用户管理

    --创建用户
    create user 用户名 identified by 密码;
    --授予用户权限
    grant 权限 on database_name.table_name to 用户名;
    --查询用户权限
    show grants for 用户名;
    --删除用户权限
    revoke 权限 on datebase_name.table_name to 用户名;
    --删除用户
    drop user 用户名;
    --修改账号用户名
    rename user 新用户名 to 老用户名;
    --修改用户名
    set password for 用户名=密码;
    --查询用户表
    select * from user;

    2.1 创建用户

     2.2 用户权限

    2.3 修改用户账号

     

     

    3.数据表操作

    3.1 创建数据表

    --查询数据表;显示该数据库下所有表名称
    show tables;
    --创建数据表
    create table table name (
    column_name1 type 是否为空 comment ‘备注语句' auto_increment default 默认值,
    column_name2 type,
    ...
    primary key (column_name1),
    constraint fk_name foreign key (column_name) references table_name2(column_name),
    unique unique_name (column_name)
    )engine=innodb default charset=utf8;
    • 是否为空:字段设置为 null 赋值时可以为空 ,not null 不能为空
    • default:默认值,不设置默认为null
    • auto_increment:定义列为自增的属性,必须和key一起使用。一般用于主键,且只对整数类、整数列有效,数值会自动加1。
    • primary key:关键字用于定义列为主键。 表示约束(一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一);可以加速查找
    • unique: 唯一索引,可以由多个键组成,约束(可以为空但是不能重复)加速查找
    • foreign key:外键;关联两张表,保证数据的一致性和实现一些级联操作
    • engine: 设置存储引擎;innodb,表示事务(如果一件事务没执行完被中断,会回滚到事务执行之前);myisam,支持全局索引,存储速度更快
    • charset: 设置编码。

    3.1.1  数据类型type

    整形

    类型 大小 范围(有符号) 范围(无符号,字符类型后加 unsigned) 用途 备注
    TINYINT 1 byte (-128,127) (0,255) 小整数值
     特别的: MySQL中无布尔值,使用tinyint(1)构造。
    SMALLINT 2 bytes (-32 768,32 767) (0,65 535) 大整数值  
    MEDIUMINT 3 bytes (-8 388 608,8 388 607) (0,16 777 215) 大整数值  
    INT或INTEGER 4 bytes (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值  
    BIGINT 8 bytes (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值  
    FLOAT 4 bytes (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度
    浮点数值
    非准确小数值,数值越长越不准确;
    float(m,d),m是数字总个数,d是小数点后个数
    DOUBLE 8 bytes (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度
    浮点数值
    非准确小数值,数值越长越不准确;
    double(m,d),m是数字总个数,d是小数点后个数
    DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值 准确表示小数,decimal(m,d),m表示数值的总位数(不包括符号),d表示小数后位数

    字符型

    类型大小用途备注
    CHAR 0-255 bytes 定长字符串
    char数据类型用于表示固定长度的字符串,可以包含最多达255个字符。
    char(m),其中m代表字符串的长度。即使数据小于m长度,也会占用m长度
    VARCHAR 0-65535 bytes 变长字符串
     varchar数据类型用于变长的字符串,可以包含最多达255个字符。
    varchar(m),其中m代表该数据类型所允许保存的字符串的最大长度,
    只要长度小于该最大值的字符串都可以被保存在该数据类型中。 虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快;
    表中既有char又有varchar,把char字段放在前面
    TINYBLOB 0-255 bytes 不超过 255 个字符的二进制字符串  
    TINYTEXT 0-255 bytes 短文本字符串  
    BLOB 0-65 535 bytes 二进制形式的长文本数据  
    TEXT 0-65 535 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 极大文本数据  

    时间

    类型大小
    ( bytes)
    范围格式用途
    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:00/2038

    结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

    YYYYMMDD HHMMSS 混合日期和时间值,时间戳

    其他类型

    类型 说明
    enum 例:enum('red','blue','black'),说明该列的值只能是'red'或'blue'或'black'
    set 例:set('a','b','c'),说明该列的值只能由'a','b','c'组成,如’ab','bac'

    3.1.2 设置外键

    外键可以一对一,一对多,或者多对多;外键的使用条件:

    • 两个表必须是InnoDB表,MyISAM表暂时不支持外键;
    • 外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立;
    • 外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;

    3.1.3 设置主键

    3.1.4 设置唯一索引

    3.1.5 查看数据表

    --查看创建表
    show create table table_name;
    show create table table_name G;
    --查看数据表的列
    show full columns from table_name;
    desc table_name;

    3.1.6 自增的起始和步长

    3.2 修改数据表

    --删除数据表的列;如果只有一列,删除会报错
    alter table table_name drop column_name;
    --增加数据表的列,默认添加的列在表的最后
    alter table table_name add column_name type;  --column可以添加的属性与创建表中一样
    alter table table_name add column_name1 type,column_name2 type;  --一次添加多个列
    alter table table_name add column_name first;  --添加的数据放在表的第一个
    alter table table_name add column_name1 after column_name2;  --添加的列放在column_name2列之后
    --修改数据表列的属性
    alter table table_name modify column_name 属性;
    --修改数据表的列名
    alter table table_name change column_name_old column_name_new 属性;
    --重命名数据表
    alter table table_name_old rename table_name_new;
    --删除主键
    alter table table_name drop primary key;
    --增加主键
    alter table table_name add primary key (column_name);
    --修改默认值
    alter table table_name alter column_name set default 默认值;
    --删除默认值
    alter table table_name alter column_name drop default;

    3.3删除表

    --删除表
    drop table table_name;

    4. 数据行操作

    4.1 条件从句

    4.1.1 where 子句

    使用主键来作为 WHERE 子句的条件查询是非常快速的。如果给定的条件在表中没有任何匹配的记录,那么查询不会返回任何数据。

    操作符 描述 实例
    = 相等 where id=1
    !=,<> 不等 where id!=1
    <,<=,>,>= 小于,小于等于,大于,小于等于 where id > 1
    in 在其中 where id in (1,2,3); where id in (select nid from t1)
    not in  不在其中 where id not in (1,2,3)
    between..and.. 在什么之间 where id between 1 and 10;闭区间包括1和10
    and 连接2个条件语句,都满足为True where id=1 and name='Lucy'
    or 连接2个条件语句,都不满足为False where id=1 or name='Lucy'
    like 通配符使用;%可替代多个字符,_替代一个字符 where name like '%cy'; where name like 'Luc_' 

    4.1.2 having子句

    如果对分组之后的数据再次筛选,使用having;having子句在where子句的后面

    4.2 三元运算

    4.2.1 case

    --当field=value1时,结果为result1,当field=value2时,结果为result2,否则结果为result3
    case field
    when value1 then result1
    when value2 then result2
    ...
    else result3 end
    --当满足赛选条件1时,结果为result1,当满足筛选条件2时,结果为result2,否则结果为result3
    case
    when 筛选条件1 then result1 when 筛选条件2 then result2
    ...
    else result3 end

    4.2.2  if

    --如果条件1为true,则result1,否则result2
    if(条件1,result1,result2)
    --如果field为空则result1,否则result2
    if(isnull(field),result1,result2)

    4.3 增

    --增加数据
    insert into table_name (column_name1,column_name2) values (值1,值2);
    insert into table_name values (值1,值2,值3);  --值必须与column_name一一对应
    --一次增加多条数据
    insert into table_name (column_name1,column_name2) values (值1,值2),(值3,值4); 
    --复制t2表中id,name数据 
    insert into table_name1 (column_name1,column_name2) select column_name3,column_name4 from table_name2;

     

     

    4.4 删

    --清空表内数据
    delete from table_name;  --清空数据后再次插入数据,自增列会接着之前的顺序
    truncate table table_name;  --清空数据后再次插入数据,自增列会重新开始;效率比delete高
    --删除某行数据
    delete from table_name where子句;
    --清空某一列的数据
    update table_name set field=null;

     

     4.5 改

    --单表更新
    update table_name set filed1=value1,filed2=values2 where子句;
    --多表联合更新
    update table_name1,table_name2 set table_name1.field1=table_name2.field2 where子句;
    update table_name1 left join table_name2 on 条件子句 set table_name1.field1=table_name2.field2;
    update table_name set field=查询语句;

     

     

    4.6 查

    --查全部
    select * from t1;
    --条件查询
    select id,name form t1 where id=1;
    --查看前十条
    select id,name from t1 limit 10;
    select id,name form t1 limit 0,10;   
    --查看21-30条; limit 起始条数-1,查看条数
    select * from t1 limit 20,10;
    select * from t1 limit 10 offset 20;
    --按id从小到大排序;默认从小到大排序
    select * from t1 order by id;
    select * from t1 order by id asc;
    --按id从大到小排序;
    select * from t1 order by id desc;
    --取后10条数据;先倒序排列,再取前10条
    select * from t1 order by id desc limit 10;
    --先按age倒序排序,如果age重复再按照id排列
    select * from t1 order by age desc,id asc

    4.6.1 分组

    --分组查询
    select field1,func(field2) from table_name where 筛选条件 group by field1 having 筛选条件;
    • 和分组函数一同查询的字段必须是group by后出现的字段
    • 聚合函数:count(计数),count(field)如果field中有null不计入,count(*),max(最大值),min(最小值),sum(和),avg(平均值)
    • 如果要对聚合函数的结果进行二次筛选必须使用having.
    • 分组可以按单个字段也可以按多个字段
    • 可以搭配着排序使用

     

     

      

    4.6.2 左右连表

     连表如果没有筛选条件,会产生(表1的数据条数*表2的数据条数)条数据;

    --左右连表
    select * from table_name1,table_name2 where 筛选条件;--显示表1和表2共有的部分
    select * from table_name1 left join table_name2 on 筛选条件;--表1中的数据全显示,表2中多余的数据不显示,不足显示null
    select * from table_name1right join table_name2 on 筛选条件; --表2中的数据全显示,表1中多余的数据不显示,不足显示null

     

     

     

     

    4.6.3 上下连表

     UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据

    --上下连表
    select field1,field2 from table_name1 where 筛选条件 union select field3,field4 from table_name1 where 筛选条件;  --自动去重
    select field1,field2 from table_name1 where 筛选条件 union all select field3,field4 from table_name1 where 筛选条件;  --不去重

  • 相关阅读:
    蓝桥杯_基础_杨辉三角
    蓝桥杯_基础_数组特征
    蓝桥杯_基础_美丽的图形
    脉象
    词根汇总
    蓝桥杯 入门训练 Fibonacci数列 解析
    制作tomcat重启.bat文件
    day23(023-递归练习)
    day27(027-反射&JDK新特性)
    day25(025-多线程(下)&GUI)
  • 原文地址:https://www.cnblogs.com/he-202007/p/14052174.html
Copyright © 2020-2023  润新知