MySQL数据库

一、数据库概述

  1.数据:描述事物的符号记录称为数据,可以是文字、图片、图像、声音、语言等多种表现形式。

  2表:即文件。用来存放多行内容/多条记录

  3.数据库:即文件夹,用来组织文件/表

  4.数据管理系用(软件):MySQL 、Oracle 、SQlite、Access 、MS MySQL Server等;管理数据库

  5.数据库管理器:即一台计算机;运行数据管理软件。

SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型:

1、DDL语句    数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER

2、DML语句    数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT

3、DCL语句    数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE

 

sql语句

#1. 操作文件夹(库)
        增:create database db1 charset utf8; # 数据库名
        查:show databases;
        改:alter database db1 charset latin1;  # 只能改字符编码
        删除: drop database db1;


#2. 操作文件(表)
    先切换到文件夹下:use db1;
   查看当前所在文件夹:select databese(); 增:create table t1(id int,name char); 查:show tables
       desc t1 改:alter table t1 modify name char(
3); alter table t1 change name name1 char(2); 删:drop table t1; #3. 操作文件中的内容/记录(记录) 增:insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3'); 查:select * from t1;
       select id, name from t1 改:update t1 set name
='sb' where id=2; 删:delete from t1 where id=1;

 

库操作

  information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等
  performance_schema: MySQL 5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象
  mysql: 授权库,主要存储系统用户的权限信息
  test: MySQL数据库系统自动创建的测试数据库

库的相关操作

   创建库----------------CREATE DATABASE 数据库名 charset utf8;
可以由字母、数字、下划线、@、#、$
区分大小写
唯一性
不能使用关键字如 create select
不能单独使用数字
最长128位

查看数据库-------------show databases;
         ------------- show create database db1;
         ------------- select database();
选择数据库---------------------------USE 数据库名

删除数据库---------------------------DROP DATABASE 数据库名;

修改数据库----------------------------alter database db1 charset utf8;                            

 

 

 

 

 

表操作

  表类型就是存储引擎,不同的存储引擎有不同的存储机制。

查看支持的存储引擎------------show engines;
指定存储引擎-------------create table t1(id int)engines=innodb;

 

表的增删改查

  表相当于文件,每一条数据(记录)都有对应的标题(字段)

创建表

create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);

#注意:
1. 在同一张表中,字段名是不能相同
2. 宽度和约束条件可选
3. 字段名和类型是必须的

 

查看表结构

describe t1; #查看表结构,可简写为desc 表名
show create table t1\G; #查看表详细结构,可加\G

 

删除表

DROP TABLE 表名;

 

修改表结构

语法:
1. 修改表名
      ALTER TABLE 表名 
                          RENAME 新表名;

2. 增加字段
      ALTER TABLE 表名
                          ADD 字段名  数据类型 [完整性约束条件…],
                          ADD 字段名  数据类型 [完整性约束条件…];
      ALTER TABLE 表名
                          ADD 字段名  数据类型 [完整性约束条件…]  FIRST;
      ALTER TABLE 表名
                          ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;

3. 删除字段
      ALTER TABLE 表名 
                          DROP 字段名;

4. 修改字段
      ALTER TABLE 表名 
                          MODIFY  字段名 数据类型 [完整性约束条件…];
      ALTER TABLE 表名 
                          CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
      ALTER TABLE 表名 
                          CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

 

复制表

1.复制表结构+记录 (key不会复制: 主键、外键和索引)
mysql> create table new_service select * from service;

2.只复制表结构
mysql>create table select * from service where 1=2; (条件为假的时候)

3.复制某个表的表结构
mysql> create table t4 like employees;

 

数据类型

  存储引擎决定了表得类型,表内的数据有着不同的数据类型,而数据类型是有宽度的不同的数据类型宽度是不一样的,是可以指定的。

#1. 数字:
    整型:tinyinit  int  bigint
    小数:
        float :在位数比较短的情况下不精准
        double :在位数比较长的情况下不精准
            0.000001230123123123
            存成:0.000001230000

        decimal:(如果用小数,则用推荐使用decimal)
            精准
            内部原理是以字符串形式去存

#2. 字符串:
    char(10):简单,浪费空间,存取速度快
        root存成root000000
    varchar:精准,节省空间,存取速度慢

    sql优化:创建表时,定长的类型往前放,变长的往后放
                    比如性别           比如地址或描述信息

    >255个字符,超了就把文件路径存放到数据库中。
            比如图片,视频等找一个文件服务器,数据库中只存路径或url。


#3. 时间类型:
    最常用:datetime


#4. 枚举类型与集合类型

  整数类型(tinyint    int     bigint )

  一般用 int 就可以

int[(m)][unsigned][zerofill]      整数,数据类型用于保存一些范围的整数数值范围

 

  整形类型的存储宽度是可以不用指定的!!!!   可以指定的显示宽度

  浮点类型(folat/     double /      decimal)

  一般用folat 就行了

#FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

# m是数字总个数,d是小数点后个数。m最大值为255,d最大值为30

 

日期类型

        YEAR
            YYYY(1901/2155)

        DATE
            YYYY-MM-DD(1000-01-01/9999-12-31)

        TIME
            HH:MM:SS('-838:59:59'/'838:59:59')

        DATETIME

            YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)

        TIMESTAMP

            YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

 

 

字符类型  char(推荐使用) 和 varchar

注意:同一个表中尽量只是用一种字符类型

#注意:char和varchar括号内的参数指的都是字符的长度

#char类型:定长,简单粗暴,浪费空间,存取速度快
    字符长度范围:0-255(一个中文是一个字符,是utf8编码的3个字节)
    存储:
        存储char类型的值时,会往右填充空格来满足长度
        例如:指定长度为10,存>10个字符则报错,存<10个字符则用空格填充直到凑够10个字符存储

    检索:
        在检索或者说查询时,查出的结果会自动删除尾部的空格,
     除非我们打开pad_char_to_full_length SQL模式(SET sql_mode
= 'PAD_CHAR_TO_FULL_LENGTH';) #varchar类型:变长,精准,节省空间,存取速度慢 字符长度范围:0-65535(如果大于21845会提示用其他类型 。mysql行最大限制为65535字节,字符编码为utf-8:https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html) 存储: varchar类型存储数据的真实内容,不会用空格填充,如果'ab ',尾部的空格也会被存起来 强调:varchar类型会在真实数据前加1-2Bytes的前缀,该前缀用来表示真实数据的bytes字节数(1-2Bytes最大表示65535个数字,正好符合mysql对row的最大字节限制,即已经足够使用) 如果真实的数据<255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255) 如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535) 检索: 尾部有空格会保存下来,在检索或者说查询时,也会正常显示包含空格在内的内容

length:查看字节数
char_length:查看字符数

 

枚举类型和集合类型

    enum 单选 只能在给定的范围内选一个值,如性别 sex 男male/女female

    set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)

 

约束条件

 https://blog.csdn.net/weixin_31889665/article/details/113552281?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162031298816780265473912%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162031298816780265473912&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-113552281.first_rank_v2_pc_rank_v29&utm_term=mysql%E7%BA%A6%E6%9D%9F%E6%9D%A1%E4%BB%B6

 

posted @ 2021-05-06 22:58  HolmesWu  阅读(46)  评论(0编辑  收藏  举报