当前位置: 移动技术网 > IT编程>数据库>Mysql > Mysql数据库基础

Mysql数据库基础

2020年07月14日  | 移动技术网IT编程  | 我要评论

mysql数据库

  • 什么是mysql?
    • MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一
    • MySQL 是开源的,所以你不需要支付额外的费用。
    • MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
    • MySQL 使用标准的 SQL 数据语言形式。
    • MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
    • MySQL 对PHP有很好的支持,PHP 是目前最流行的 Web 开发语言。
    • MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。
    • MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。
  • 什么是数据库?
    • 是按照数据结构来组织、存储和管理数据的仓库。使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。
  • 关系型数据库
    • 是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
  • RDBMS 即关系数据库管理系统的特点:
    • 1.数据以表格的形式出现
    • 2.每行为各种记录名称
    • 3.每列为记录名称锁对应的数据域
    • 4.许多行和列组成一张表单
    • 5.若干的表单组成database
  • RDBMS 术语
    • 数据库: 数据库是一些关联表的集合。
    • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
    • 列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
    • 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
    • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
    • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
    • 外键:外键用于关联两个表。
    • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
    • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
    • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

mysql数据库操作

  • 针对数据库的增删改查:

    • 创建数据库
        #语法
        CREATE DATABASE 数据库名 
    
        mysql> CREATE DATABASE DD1
        >>> Query OK, 1 row affected (0.00 sec)
        
        CREATE DATABASE 数据库名 charset = "指定编码格式" 
    
    • 查询数据库
    #语法
        SHOW DATABASES  #查询所有数据库
    
        SHOW DATABASES;
    >>>
        +--------------------+
        | Database           |
        +--------------------+
        | db1                |
        | DBT1               |
        | DD1                |
        | information_schema |
        | mysql              |
        | performance_schema |
        | sys                |
        | testdb2            |
        +--------------------+
        8 rows in set (0.01 sec)
    
    
    • 删除数据库
        #语法  
        DROP DATABASE 数据库名; 
    
    >>>
        sql> DROP DATABASE DD1;
        Query OK, 0 rows affected (0.01 sec)
    
  • 针对表的增删改查

    • 增加表

      create table t1(id int,name char(4))
      
    • 查询表

      show tables # 查看当前库下的所有表名
      
    • alter table t1 rename t2
      
    • drop table t1
      
  • 针对表的增删改查

    在操作表之前一定要用use语句选择你要操作的数据库

    • 创建数据表
    #语法
        CREATE TABLE table_name(
            字段名1,数据类型[列级别的约束条件][默认值]
            字段名2,数据类型[列级别的约束条件][默认值]
            字段名2,数据类型[列级别的约束条件][默认值]
            ·····
        );
    >>
    mysql> CREATE TABLE tb_tese(id int,name char);
    Query OK, 0 rows affected (0.01 sec)
    
    • 查询数据表
    #语法
        DESCRIBE 表名
    >>>
        mysql> DESCRIBE tb_tese;
    +-------+---------+------+-----+---------+-------+
    | Field | Type    | Null | Key | Default | Extra |
    +-------+---------+------+-----+---------+-------+
    | id    | int     | YES  |     | NULL    |       |
    | name  | char(1) | YES  |     | NULL    |       |
    +-------+- --------+------+-----+---------+-------+
    2 rows in set (0.00 sec)
    
    • 删除数据表
    #语法
    DROP TABLE 表名
    >>>
    mysql> DROP TABLE tb_tese;
    Query OK, 0 rows affected (0.01 sec)
    
    • 修改数据表
    #语法
    ALTER TABLE 旧表名 RENAME 新表名 
    >>>
    mysql> ALTER TABLE tb_tase RENAME tb_alter;
    Query OK, 0 rows affected (0.01 sec)
    #插曲新表名,看看是否可以查询得到
    mysql> DESC tb_alter ;
    +-------+---------+------+-----+---------+-------+
    | Field | Type    | Null | Key | Default | Extra |
    +-------+---------+------+-----+---------+-------+
    | id    | int     | YES  |     | NULL    |       |
    | name  | char(1) | YES  |     | NULL    |       |
    | age   | char(1) | YES  |     | NULL    |       |
    +-------+---------+------+-----+---------+-------+
    3 rows in set (0.00 sec)
    
  • 针对数据的增删改查

    • 查询数据
    #语法
    SELECT * FROM 表名
    >>
    mysql> select * from tb_alter;
    +------+--------+------+
    | id   | name   | age  |
    +------+--------+------+
    |    1 | 张三   |   14 |
    +------+--------+------+
    1 row in set (0.00 sec)
    
    • 新增数据
    #语法
    INSERT INTO 表名(字段名1,字段名2···) VALUES (values1,values2···)
    >>>
    mysql> INSERT INTO tb_alter (id,name,age) values(1,"张三",14);
    Query OK, 1 row affected (0.00 sec)
    
    • 修改数据
    #语法
    UPDATE table_name SET field1=new-value1, field2=new-value2
    >>>
    mysql> UPDATE tb_alter SET name = "lisi";
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    • 删除数据
    #语法
    DELETE FROM 表名 WHERE ClAUSE
    >>>
    mysql> DELETE FROM tb_alter WHERE ID = 1;
    Query OK, 1 row affected (0.00 sec)
    
    
    

mysql数据类型

  • 数值类型
    • MySQL支持所有标准SQL数值数据类型。
      这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
      关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
      BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
      作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 byte (-128,127) (0,255) 小整数值
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) 单精度 浮点数值
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) 双精度 浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值
  • 字符串类型
    • 字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
类型 大小 用途
CHAR 0-255 bytes 定长字符串
VARCHAR 0-65535 bytes 变长字符串
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 极大文本数据
  • 日期和时间类型
    • 表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

    • 每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

类型 大小 ( 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 混合日期和时

mysql的约束

主键约束 :又称为主码,是表中一列或者多列的祝贺,主键约束(PRimary Key Constrint)要求主键列数据唯一,并且不能为空。主键能够唯一标识表中的兔兔爱葫芦,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度,主键和记录之间的关系如同身份证和人之间的关系,他们之间是一一对应的。主键分为两种类型:单字段主键和多字段主键

  • 单字段主键是指主键有一个字段组成,SQL语句格式分为以下两种情况

    • 在定义的列的同时定义主键

      字段名 数据类型 PRIMARY KEY[默认值]

      CREATE TABLE tb_tmp
      (
          id  int(11) PRIMARY KEY,
          name varchar(30),
          age int(11),
      )
      
    • 在定义所有列之后指定主键

      [CONSTRAINT <约束名>] PRIMARY KEY [字段名]

      CREATE TABLE tb_emp1
      (
          id  INT(11),
          name VARCHAR(30)
          PRIMARY KEY(id)
      )
      
  • 多字段联合主键是指主键由多个字段联合组成

    PRIMARY KEY[字段1,字段2,···,字段n]

    CREATE TABLE tb_emp2
    (
        id INT(10),
        name VARCHAR(25),
        depid INT(10),
        PRIMARY KEY(id,depid)
    )
    

外键约束:外键是用来在两个表的数据库之间建立连接,他可以是一列或者多列,一个表可以有一个或者多个外键,外键对应的是参照完整性,一个表的外键可以为空值,若补位空值,则每一个外键值必须邓毅另一个表中主键的哪个值

  • 外键:是表中的一个字段,他可以不是本表的主键,但对应另外一个表的主键。外键的主要作用是保证数完整性,定义外键后不能删除在另一个表中有关联联系的

  • 主表(父表):对于两个有关联关系的表而言,相关联字段中主键所在的哪个表是主表

  • 从表(从表):对于两个有关联关系的表而言,相关联字段中外键所在的哪个表是从表

  • 创建外键的语法规则:

    CONSTRAINT <外键名> FOREIGN KEY 字段名1 REFERENCES<主表名> 主键列1

        CREATE TABLE tb_emp2
    (
        id INT(10),
        name VARCHAR(25),
        depid INT(10),
        CONSTRAINT fk_emp2_depid FOREIGN KEY depid REFERENCES tb_emp1 id
        ON UPDATE CASCADE id    #同步更新
        ON DELETE CASCADE id    #同步删除
    
        ##上述语句执行后就是在表tb_emp上添加了一个名叫fk_emp2_depid的外键约束,外键名称为deptid,它依赖于tb_emp1表中的主键id
    )
    

    子键的外键必须关联附表的主键,切挂念字段的数据类型必须陪陪,如果类型不一样,则创建子表时就会出现错误提示

非空约束:非空约束(NOT NULL Constraint)是指字段的值不能玩诶空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统会报错

  • 语法规则:

    字段名 数据类型 NOT NULL

    CREATE TABLE tb_emp2
    (
        id INT(10),
        name VARCHAR(25) NOT NULL,
        depid INT(10),
        PRIMARY KEY(id,depid)
    )
    

唯一性约束:要求该列为一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者级列都不出出现重复值

  • 语法规则

    (1)字段名 数据类型 UNIQUE

     CREATE TABLE tb_emp2
    (
        id INT(10),
        name VARCHAR(25)NOT NULL UNIQUE,
        depid INT(10),
        PRIMARY KEY(id,depid)
    )
    

    (2)CONSTRAINT 约束名 UNIQUE 字段名

      CREATE TABLE tb_emp2
    (
        id INT(10),
        name VARCHAR(25)NOT NULL,
        depid INT(10),
        PRIMARY KEY(id,depid)
        CONSTRAINT UU UNIQUE(name)
    )
    

默认约束:指定某列的默认值。如果男性同学较多,性别就可以默认为“男”。如果插入一条新纪录是没有为这个字段赋值,那么系统就会自动为这个字段赋值为“男”

  • 语法规则

    字段名数据类型 DEFAULT 默认值

     CREATE TABLE tb_emp2
   (
       id INT(10),
       name VARCHAR(25)NOT NULL,
       depid INT(10) DEFAULT 111,
       PRIMARY KEY(id,depid)
       CONSTRAINT UU UNIQUE(name)
   )

设置数据表的属性值自动增加:在MYSQL中,默认情况下AUTO_INCREMENT出事值为1,没新增一条记录,字段自动加1

  • 语法规则

    字段名 数据类型 AUTO_INCREMENT

      CREATE TABLE tb_emp2
    (
        id INT(10)PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(25)NOT NULL,
        depid INT(10) DEFAULT 111,
        PRIMARY KEY(id,depid)
        CONSTRAINT UU UNIQUE(name)
    )
    

查询语句详解

  • 基本查询语句:MySql提供select语句进行数据库查询,该语句使用当时灵活,功能丰富,语法如下

    SELECT 属性列表 FROM 表名或视图名 [WHERE 表达条件式] [GROUP BY 属性名 [HAVING 条件表达式]] [ORDER BY 属性名[ASCIDESC]]

    select 语句的含义是根据where子句的条件表达式,从from子句指定的基本表或试图中查找满足条件的记录,如果有group by子句,则将结果按照group by子句后的属性进行分组,该属性值相等的记录分为一组,一般会在每组上使用举个函数进行统计,如果在group by子句后带having断句,则只有满足having后面表达式的组才予输出。如果有order by子句,则会根据order by子句后面的属性进行圣墟或降序排列

  • 查询表中部分字段

    • 如果只需要表中的部分字段的数据,可以通过select子句指定那些字段出现在结果中。不同字段之间用逗号(,)分割,最后一列后面不需要加逗号
     select id, name, age from student
    
  • 查询表中全部字段

    • 1.在select子句中将所有的字段都列出
    select id, name, age, adress from student
    
    • 2.将select子句中的属性列表指定为”*“,该符号代表所有列
    select * from student
    
  • 查询经过计算的值(也就是我们可以在select子句中进行运算)

    • select子句后面不仅可以是表中的基本字段,也可以是表达式
    - 查询
    select name, year(now())-age from student
    
    #查询结果中的year(now())为函数嵌套,now()函数获取系统如期,year可以获取参数的年份,year(now())的结果为系统日期的年份,year(now())-age得到的是学生的出生年份
    
    #为查找结果设置别名
    select name, year(now())-age as bir
    from student
    
    #直接在查询结果中写表达式
    select stu_id,now() from student
    
  • 查询表中的若干记录

    • DISTINCT:清除取值重复的行,表中的记录没有重复,但是经过查询有重复,可以使用DISTINCT来消除重复行
    select distinct[要去重的字段]  from 查询表
    
    • 查询表中满足条件的记录

      操作符 描述
      = 等号,检测两个值是否相等,如果相等返回TRUE
      <>,!= 不等于,检测两个值是否相等,如果不相等返回True
      > 大于号,检测左边的值是否大于右边的值
      < 小于号,检测左边的值是否小于右边的值
      >= 大于等于号,检测左边的值是否大于等于右边的值
      <= 小于等于号,检测左边的值是否小于等于右边的值
    • 确定范围(between···and | not between ··· and)

      • 如果查询条件为某个字段或不在某个范围,可以使用谓词between···and或者not between and,其中between后面为下限,and后面为上限
    • 带in关键字的查询

    select * from student where age in (12,20,23)
    # 相反,可以用not in 来查询不属于指定集合的记录
    
    • like的字符匹配查询
        [not] like '<匹配串>'
    
    • 查询空值
    select * from student where name is null
    
    • 多重条件查询
      • 可以使用运算逻辑符and或者or来连接多个查询条件,and的优先级要高于or,可以使用括号来改变优先级的顺序
      #查询数据库中年龄18岁并且分数在80以上的学生
      select * from student where age > 18 and garde >80
      
      #查询计算机系或者经贸系的学生
      select * from student where sdept = '计算机系' or sdept = '经贸系'
      
      
  • order by排序

    • 使用order by子句对查询结果进行排序,可以根据一列或者多列对结果进行升序或者降序排列
    #对查询出的结果根据age进行排序
    select id, name, age from student 
    order by age desc 
    
  • 统计函数:

    • 在实际项目中,需要通过表中的基本数据进行统计,比如求某列值的和,某列值得平均值等。mysql提供统计函数进行统计

      函数 说明
      AVG(列名) 返回某列的平均值
      COUNT(*) 返回记录的行数
      COUNT(列名) 返回一列中指的个数
      MAX(列名) 返回某列最大的值
      MIN(列名) 返回某列最小的值
      SUM(列名) 返回某个列之和
  • GROUP BY

    • 将查询结果根据某一列或者多列的值进行分组,值相等的为一组,分组的目的一般与统计相关
    • 单字段返祖
      #统计不同系别的学生
      select sdept,count(*) as count _sdept
      from student
      group by sdept
      # 将查询结果根据sdept的值进行分组
      
    • 多字段分组
    select ssex,sage count(*)
    from student
    group by ssex,sage
    
    # 此查询根据性别分为两组,然后在女生中根据年龄再次分组,男生也根据年龄再次分组
    
  • HAVING子句

    • 可以使用HAVING子句对组进行筛选,得到符合条件组的信息。
    select sno,avg(grade)
    from sc
    group by sno
    having avg(grade)>80
    
    #根据sno将学生的选秀课程的成绩信息进行分组,然后统计每组的平均成绩,最后筛选出成绩大于80的分组信息
    

mysql连接查询

  • 设计两个表或者两个表以上的被称为连接查询。连接查询是关系数据库中最重要的查询类型。连接查询分为内连接查询,外连接查询和复合条件查询。
    • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
    • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
    • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
    select s.no,sname,cno,grade
    from student s inner join sc 
    no s.sno = sc.sno
    # 在参加连接的表中间加上inner join,连接条件使用on 关键字给出,连接条件是相同的
    

本文地址:https://blog.csdn.net/zyh990214/article/details/107315346

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网