2022-08-15 第一组 顾元皓 学习笔记

本文介绍了MySQL数据库的基础概念,包括数据结构、关系型数据库管理系统特点、SQL语言的分类(DCL、DDL、DML、DQL、TCL)及其应用,如创建用户、表、数据定义与操作。详细讲解了如何创建、修改和管理数据库,以及表的结构设计和SQL语句的使用技巧。
摘要由CSDN通过智能技术生成

1.MySQL数据库

1.1 数据库

  • 数据结构【按照数据结构来组织,存储和管理数据的仓库】。是一个长期存储在计算机内的,有组织,可共享的,统一管理的大量数据的集合。
  • 数据——对于任何一个组织来说是十分重要的,程序员的工作是对数据进行管理,包括【运算,流转,存储,展示】,最重要的功能就是【存储数据】,长期的保存数据。

1.2 MySQL

  • MySQL是一个【关系型数据库管理系统】,瑞典公司研发,被【Oracle】收购。
  • MySQL使用了一种语言【SQL语言】
  • MySQL分为社区版和商业版,体积小,速度快,成本低,【开源】。

1.3 基本操作

  • 启动MySQL

    • mysql -h 127.0.0.1 -p 3306 -u root -p 3306
      
  • MySQL保存数据的模式:

    • 创建一个数据库
    • 在数据库下保存多张表
    • 在每张表中保存多条数据
  • MySQL是是一个【数据库管理系统】,管理多个数据库。

    • create datebase 数据库的名;——————创建数据库
      create schema 数据库的名;
      
      show databases;————————查看所有数据库 
      
  • 使用数据库:

    • mysql> use jsoft;——————使用相关的数据库
      Database changed————出现这个表示成功
      

1.4表

  • 用来存储数据的对象,是有结构的数据的集合。
    • 行:一行即为一条数据,数据库一共有多少数据,实际上就是有几行数据。
    • 列:一列即为一个字段,数据库一共有多少字段,实际上就是有几列数据。

2.SQL语言

SQL是一种特殊目的的编程语言,也是一种数据库查询和程序设计语言,用于存储数据以及查询,更新和管理关系型数据库系统。

命名规则:字段名单词之间用下划线连接

2.1 SQL语句的分类

  • DCL(Data Control Language)——数据控制语言
    • 定义——访问权限和安全级别。
  • DDL(Data Definition Language)——数据库定义语言
    • 定义——数据库对象:库,表,字段(列)。
    • 功能——创建,删除,修改库和表的结构。
  • DML(Data Manipulation Language)——数据操作语言
    • 定义——数据的增删改记录。
  • DQL(Data Query Language)——数据查询语言
    • 定义——用来查询记录。
  • TCL(Transition Control Language)——事务控制语言
    • 定义——用来管理事务,【commit】

2.1.1 DCL(数据控制语言)

  • 创建用户

    • 创建一共用户,该用户只能在指定的IP地址上登录MySQL:

    • create user '用户名'@'IP地址' identfied   by'用户密码';
      
    • 创建一共用户在任意ip地址上登录MySQL:

    • create user 'moon'@'%' identfied   by'3306';
      exit;------退出
      
  • 修改密码

    • -- 5.7版本需要使用password对密码进行加密
      set password for moon@'%' =password('新密码');
      -- 8.0版本直接赋值
      set password for moon@'%' ='新密码';
      

给用户授权

给指定用户在指定数据库上赋予【指定的权限

  • 权限:

    • create:可以创建数据库

    • select:查询数据

    • delete:删除数据

    • update:修改数据

    • insert:插入数据

    • -- 语法: grant `权限1,权限2....权限n`(all 给他所有权限除了创建用户) on `数据库名`.`表名`(*代表全部的表) to `用户名`@`ip地址`;
      -- 这里使用的是着重符,不是单引号
      

撤销授权

-- 语法:revoke  `权限1,权限2....权限n` on `数据库名`.`表名` from `用户名`@`ip地址`; 

查看指定用户授权

-- 语法 show grants for `用户名`@`ip地址`;

删除用户

-- 语法:drop user `用户名`@`ip地址`;

2.1.2 DDL(数据定义语言)

DDL主要是用在定义或改变表的结构。

创建表

/*
 create table 表名(
	字段名1(列名) 类型(长度) 约束条件,
	字段名2(列名) 类型(长度) 约束条件,
	字段名3(列名) 类型(长度) 约束条件,
	......
	字段名n(列名) 类型(长度) 约束条件;
);
*/
  • 在关系型数据库中,需要这项表名和字段名,同时设定。

数据类型

整型

MySQL数据类型含义
tinyint1个字节,范围(-128~127)【用来存性别】
smallint2个字节,范围(-3万多~3万多)
mediumint3个字节,范围(-8w多~8w多)
int4个字节,范围()
bigint8个字节,范围(非常大)
  • 在整型中默认使用的是【有符号的

  • 我们可以使用一个关键字【unsigned】,定义成无符号类型

    • tinyint unsigned的取值范围为0~255
  • 如果长度需要配合【zerofill——用0来填充

    • int(4) unsigned zerofill ;
      
    • 说明:上述的int长度为4,如果设置了zerofill,如果数据是1,最终存到表中的数据为0001。

浮点型

MySQL的数据类型含义
float(m,d)4个字节,单精度浮点型,m总长度,d小数位
double(m,d)8个字节,双精度浮点型,m总长度,d小数位
decimal(m,d)decimal是存储为字符串的浮点数,【对应Java中的BigDecimal】
  • 例——定义一个float(5,3):
    • 插入数据123.1231,最后得到的结果就是99.999
    • 插入数据12.345678,最后得到的结果就是12.346
    • 【在使用浮点型的时候,要以插入到数据库中的实际结构为准】

字符串类型

MySQL数据类型含义
char(n)固定长度,最多255个字符
varchar(n)可变长度,最多65535个字符
tinytext可变长度,最大255个字节
text可变长度,最大65535个字节
mediumtext可变长度,最大16MB
longtext可变长度,最大4GB
  • char和varchar的区别
    • char类型是【定长】的类型,当定义char(10),输入“123”时,他们占用的空间依然是10个字符,当输入的字符超出了指定的长度,char会截取超出的字符。而且,当存储char,MySQL会自动删除输入字符串末尾的空格。
    • char适合存储很短的,固定长度的字符串。例如,char非常适合存储密码MD5值(银行密码),因为它是一个定长的值。对于短的列,char比varchar在存储空间上效率更高
    • varchar(n)类型用来存储可变长度,长度最大为n个字符的可变长度的字符串数据。例如varchar(10),然后存储“abc”,实际就存储了3个字符。
    • char类型每次修改的数据长度相同,效率更高,varchar,每次修改的数据长度如果不同,效率会更低一些。
  • varchar和text的区别
    • text不能设置默认值,varchar可以设置默认值
    • text类型,由于单表最大行宽的限制,支持溢出存储,【在数据页中只会存放768个字节】,剩余的数据会存储在溢出段中。
    • 一般都是用varchar。

日期类型

MySQL数据类型含义
date3字节,日期,格式:2022-8-15
time3字节,时间,格式:10:54:32
datetime8字节,日期时间,格式:2022-8-15 10:55:13
timestamp4字节,时间戳,毫秒数
year1字节,年份

建表约束

因为一张表要有多个列,数据库中的表不止有一个,建表约束说的就是我们应该如何规范表中的数据和表之间的关系

MySQL的约束类型

约束名称描述
NOT NULL非空约束
UNIQUE唯一约束,取值不能重复
PRIMARY KEY主键约束(主关键字),自带非空,唯一,索引
DEFAULT默认值
FOREIGH KEY外键约束,表和表之间的约束
  • NOT NULL非空约束

    • CREATE TABLE `student` (
      	`stu_id` INT ,
      	`stu_name` VARCHAR(50) NOT NULL,
      	`gender` CHAR(1) DEFAULT '男',
      	`brithday` datetime , 
      		PRIMARY KEY(stu_id)
      );
      
  • UNIQUE唯一约束

    • CREATE TABLE `book`(
      	`id` INT PRIMARY KEY auto_increment,
      	`name` VARCHAR(50) NOT NULL,
      	`bar_code` VARCHAR(30) NOT NULL,
      	`aut_id` INT NOT NULL,
      	UNIQUE(bar_code) 
      );
      
  • 主键约束

    • CREATE TABLE `author`(
      	`aut_id` INT,
      	`aut_name` VARCHAR(50) NOT NULL,
      	`gender` CHAR(1) DEFAULT '男',
      	 `country` varchar(50),
      	`brithday` datetime,
      	PRIMARY KEY(aut_id,aut_name)
      );
      
  • 外键约束

    • 推荐配合主键去使用,有了这个约束,我们在向表中插入数据,来源另一张表的主键
    • 外键会产生的效果;
      • 删除表的时候,如果不删除引用外键的表,被引用的表是不能直接删除。
      • 外键的值必须来源于引用的表的主键字符。
  • create table `book` (
    	`id` int PRIMARY KEY auto_increment,
    	`name` varchar(50) not null,
    	`bar_code` VARCHAR(30) not null UNIQUE,
    	`aut_id` int not null,
    	FOREIGN KEY(aut_id) REFERENCES author(aut_id)
    );
    -- FOREIGN KEY(主键) REFERENCES 表名(主键)
    
  • 【创建表的时候,建议字段名使用着重符】

对表的修改操作:

  • 查看当前库里的所有表

    • SHOW TABLES;
      
  • 查看表结构:

    • -- DESC `表名`;
      -- 查看当前库下的表的结构
      
  • 修改表(5个操作),但是前缀都是一样的alter table 表名 ......:

    • 添加列:

      • ALTER TABLE author ADD(hobby VARCHAR(20) ,`address` VARCHAR(50))
        -- 添加列
        
    • 修改列数据类型:

      • ALTER TABLE author MODIFY `address` VARCHAR(10) 
        -- ALTER TABLE 表名  MODIFY 字段名 数据类型
        
    • 修改列名称和数据类型:

      • ALTER TABLE author CHANGE `country` `adrr` VARCHAR(12);
        -- ALTER TABLE 表名  change 旧字段名 新字段名 数据类型
        
    • 删除列:

      • ALTER TABLE author DROP   `adrr`  ;
        -- ALTER TABLE 表名  DROP 字段名
        
    • 修改表名:

      • ALTER TABLE `authors` RENAME `author`;
        -- ALTER TABLE 旧表名 RENAME 新表名
        
    • 删除表:

      • DROP TABLE if EXISTS `book`
        -- DROP TABLE IF EXISTS 表名
        

2.1.3 DML(数据操作语言)

该语言来对表记录进行操作(增,删,改),不包含查询

插入数据

  • -- insert into  表名  (字段名)  values (插入数据与字段名一一对应)
    -- 如果插入全字段 ,字段名可以省略
    
  • 说明:

    • 在数据库中所有的字符串类型,必须使用引号
    • 如果部分字段插入,必须列名和值要匹配。如果全字段插入,则列名可以省略【不建议省略,可维护性较低
  • 批量插入

    • -- insert into  表名  (字段名)  values (插入数据与字段名一一对应),(插入数据)
      

修改数据

  • -- update 表名  set 字段名1='值1',字段名2='值2'  where  字段名='值'
    -- where  后边是修改的条件
    
  • where是一个关键字,我们可以用where关键字来实现丰富的筛选,与Java中的if语句相似,可以使用复杂的条件运算:

    • =(没有==,equals)
    • !=
    • between ..and
    • in(...)
    • not
    • or
    • is null
    • and

删除数据

  • 全部删除

    • -- delete from  表名
      
  • 根据条件去删除

    • -- delete from  表名 where 条件
      
  • 说明:通过delete删除的数据有一个明显的问题——主键如果是自动递增,会断档

  • 截断(清空表):

    • -- TRUNCATE  表名
      
    • TRUNCATE实际上属于DDL语言,操作立即生效,不能撤回

      • TRUNCATE和delete都是删除数据,drop删除整个表。
      • TRUNCATE速度快,效率高,可以理解为直接删除整个表,再重新建立。
      • TRUNCATE和DELETE都不会使表结构以及列,约束,索引的发生改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值