【MySQL】数据库安装/数据库基本知识点/数据类型介绍/sql语言

一、数据库安装

1.两种方式:
压缩包版 

安装程序版

官方版,文档里面路径,默认C盘(数据库,jdk)

mysql -uroot -p(如果密码突然,my.ini)

提示输入密码:

注册表 (类似一些数据表缓存)
1.1现有的数据存储方式有哪些?
Java程序存储数据(类,变量,对象、数组,集合),数据保存在内存种,属于瞬时状态的存储

文件(file)存储数据的位置,保存在硬盘中,属于持久状态存储
1.2以上这些有哪些缺点
对于一些数据来说数据类型的区分,一般没有

存储的数据量级较小

访问的安全限制比较小

没有备份,恢复机制
1.3数据库
数据库是按照数据结构来进行组织,存储和管理数据的仓库,是一个长期存储计算机内的,有组织的,有共享的,统一管理的数据集合。

分类:

	网状结构数据库:以节点形式存储和访问

	关系型:sql - server    mysql    DB2  oracle   AS400  以表格形式存储,多表会建立关联关系

	非关系:mongoDB , redis 多数使用哈希表,以键值(key/value)形式进行存储,实现特定的键和一个指针指向特定的数据。
1.4数据库管理系统(DBMS)

数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。文件

数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。

数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的。

数据库:存储、维护和管理数据的集合。

优缺点:

数据保存在内存:

优点: 存取速度快

缺点: 数据不能永远保存!!!

内存比硬盘贵。

数据保存在文件:

优点: 数据永远保存!!!

缺点:

1)速度比内存操作慢,频繁的IO操作。

2)查询数据不方便

数据保存在软件(DBMS):

1)数据永远保存!!!

2)速度比较快

3)查询和管理数据方便

4)比较安全

数据库软件可以实现以上的功能!!!

常见数据库:关系型为主,非关系为辅,(详见上面)

##### 1.5mysql
```sql
显著特点:免费,体积小,关系型

mysql在WEB方面,mysql目前来说是最好的,最流行的。

官网下载地址:https://www.mysql.com/

mysql下载地址:https://dev.mysql.com/downloads/mysql/

mysql文件夹中的文件说明

bin       命令文件控制

lib         库文件

include       头文件

注意:my-default.ini  文件平时没有需求的时候,不需要进行改动

二、sql语言

注意:目前sql是数据库唯一通用语言,QBC  HQL

SQL()结构化查询语言,用于存储数据、更新、查询和管理关系数据库的程序设计语言。

进入到mysql:mysql -u root -p

基本命令

大写和小写都可以执行,但是官方建议大写。结尾一般加上分号,以分号结束进行执行
    #1.查看所有数据库
    mysql> show databases;    #显示当前mysql数据库的所有数据库
    +----------------------+
    | Database             |
    +----------------------+
    | information_schema   |   #信息数据库,其中保存着所有数据库的信息(元数据:是关于数据							的数据,如数据库的名字或者表名,行列的类型)
     performance_schema       #性能优化数据库,mysql5.5增加的一个性能优化引擎
      mysql                   #核心数据库,主要负责存储数据库的用户,权限设置,关键字等等,							不可删除
    #2.自定义创建数据库
    #格式 create database 数据库名字;
    mysql> create database mysql2005;
    Query OK, 1 row affected (0.00 sec)   #你的操作影响了一行
    #3.查看创建数据库的信息   
    mysql> show create database mydb3;
    +----------+----------------------------------------------------------------+
    | Database | Create Database                                                |
    +----------+----------------------------------------------------------------+
    | mydb3    | CREATE DATABASE `mydb3` /*!40100 DEFAULT CHARACTER SET utf8 */ |
    +----------+----------------------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql>
    #默认创建的数据的编码设置utf8
    
    #4.设置数据库编码
    mysql> create database mydb1 character set gbk;
    Query OK, 1 row affected (0.00 sec)
    
    #5.删除数据库
    mysql> drop database mydb1;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show databases;
    
    #6.修改数据的编码
    mysql> alter database mysql2005 character set gbk;
    Query OK, 1 row affected (0.00 sec)

2.1sql的分类

    DDL、DML、DQL、DCL
    
    DDL:操作数据库、表、列等使用的关键字:CREATE(创建表 创建数据)、 ALTER(修改表的字段)、 DROP(删除数据库 删除表 删除一个字段)
    
    DML是对表中的数据进行增、删、改的操作。不要与DDL混淆了。
    INSERT  INTO(向表中插入数据)、UPDATE(更新表的数据)、 DELETE  FROM(删除表的数据)
    
    DQL数据查询语言 (重要)
    数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
    查询返回的结果集是一张虚拟表。
    
    数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制
    数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
    1) GRANT:授权。
    
    2) ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
    回滚---ROLLBACK
    回滚命令使数据库状态回到上次最后提交的状态。其格式为:
    SQL>ROLLBACK;
    
    3) COMMIT [WORK]:提交。
    
        在数据库的插入、删除和修改操作时,只有当事务在提交到数据
    库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看
    到所做的事情,别人只有在最后提交完成后才可以看到。
    提交数据有三种类型:显式提交、隐式提交及自动提交。下面分
    别说明这三种类型。
    
    (1) 显式提交
    用COMMIT命令直接完成的提交为显式提交。其格式为:
    SQL>COMMIT(2) 隐式提交
    用SQL命令间接完成的提交为隐式提交。这些命令是:
    ALTER,AUDIT,COMMENTCONNECTCREATE,DISCONNECT,DROPEXITGRANT,NOAUDIT,QUIT,REVOKERENAME(3) 自动提交
    若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,
    系统将自动进行提交,这就是自动提交。其格式为:
    SQL>SET AUTOCOMMIT ON#1。改变数据库(切换数据库)
    mysql> use mysql2005;
    Database changed
    #2.创建一个表
    #格式
    CREATE TABLE 表名(
    		字段1 字段类型[列级别约束条件][默认值],
    		字段2 字段类型[列级别约束条件][默认值],
    		….
    		字段n 字段类型[列级别约束条件][默认值]
    		[表级别约束条件]
    )
    #实现
    mysql> create table worker(
        -> id int(11),
        -> name varchar(25),
        -> age int(11)
        -> );
    Query OK, 0 rows affected (0.02 sec)
    
    #3.查看表
    mysql> show tables;
    +---------------------+
    | Tables_in_mysql2005 |
    +---------------------+
    | worker              |
    +---------------------+
    1 row in set (0.00 sec)
    #4.查看表信息
    mysql> desc worker;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | YES  |     | NULL    |       |
    | name  | varchar(25) | YES  |     | NULL    |       |
    | age   | int(11)     | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    3 rows in set (0.00 sec)
    

总结

    #1.创建数据库
    create database mydb1;
    #2.切换数据库
    use mydb1;
    #3.查看正在使用的数据库的信息
    select database();
    #4.查看当前数据库管理系统中所有的数据库
    show databases;
    #5.退出数据库
    exit
    #6.显示当前数据库中所有的表
    show tables;
2.2数据库中的类型

    1.数字数据类型
    
    - INT - 正常大小的整数,可以带符号。如果是有符号的,它允许的范围是从-21474836482147483647。如果是无符号,允许的范围是从04294967295。 可以指定多达11位的宽度。
    
    - TINYINT - 一个非常小的整数,可以带符号。如果是有符号,它允许的范围是从-128127。如果是无符号,允许的范围是从0255,可以指定多达4位数的宽度。
    
    - SMALLINT - 一个小的整数,可以带符号。如果有符号,允许范围为-3276832767。如果无符号,允许的范围是从065535,可以指定最多5位的宽度。
    
    - MEDIUMINT - 一个中等大小的整数,可以带符号。如果有符号,允许范围为-83886088388607。 如果无符号,允许的范围是从016777215,可以指定最多9位的宽度。
    
    - BIGINT - 一个大的整数,可以带符号。如果有符号,允许范围为-92233720368547758089223372036854775807。如果无符号,允许的范围是从018446744073709551615. 可以指定最多20位的宽度。
    
    - FLOAT(M,D) - 不能使用无符号的浮点数字。可以定义显示长度(M)和小数位数(D)。这不是必需的,并且默认为10,2。其中2是小数的位数,10是数字(包括小数)的总数。小数精度可以到24个浮点。
    
    - DOUBLE(M,D) - 不能使用无符号的双精度浮点数。可以定义显示长度(M)和小数位数(D)。 这不是必需的,默认为16,4,其中4是小数的位数。小数精度可以达到53位的DOUBLEREALDOUBLE同义词。
    
    - DECIMAL(M,D) - 非压缩浮点数不能是无符号的。在解包小数,每个小数对应于一个字节。定义显示长度(M)和小数(D)的数量是必需的。 NUMERICDECIMAL的同义词。[decimal]
    
    2.日期和时间类型
    
    - DATE - 以YYYY-MM-DD格式的日期,在1000-01-019999-12-31之间。 例如,19731230日将被存储为1973-12-30- DATETIME - 日期和时间组合以YYYY-MM-DD HH:MM:SS格式,在1000-01-01 00:00:009999-12-31 23:59:59之间。例如,19731230日下午3:30,会被存储为1973-12-30 15:30:00- TIMESTAMP - 197011日午夜之间的时间戳,到2037的某个时候。这看起来像前面的DATETIME格式,无需只是数字之间的连字符; 19731230日下午330分将被存储为19731230153000(YYYYMMDDHHMMSS)- TIME - 存储时间在HH:MM:SS格式。
    
    - YEAR(M) -2位或4位数字格式来存储年份。如果长度指定为2(例如YEAR(2)),年份就可以为19702069(7069)。如果长度指定为4,年份范围是1901-2155,默认长度为43.字符串类型
    虽然数字和日期类型比较有意思,但存储大多数数据都可能是字符串格式。 下面列出了在MySQL中常见的字符串数据类型。
    
    - CHAR(M) - 固定长度的字符串是以长度为1255之间个字符长度(例如:CHAR(5)),存储右空格填充到指定的长度。 限定长度不是必需的,它会默认为1- VARCHAR(M) - 可变长度的字符串是以长度为1255之间字符数(高版本的MySQL超过255); 例如: VARCHAR(25). 创建VARCHAR类型字段时,必须定义长度。 [varchar]
    
    - BLOB or TEXT - 字段的最大长度是65535个字符。 BLOB是“二进制大对象”,并用来存储大的二进制数据,如图像或其他类型的文件。定义为TEXT文本字段还持有大量的数据; 两者之间的区别是,排序和比较上存储的数据,BLOB大小写敏感,而TEXT字段不区分大小写。不用指定BLOBTEXT的长度。
    
    - TINYBLOBTINYTEXT - BLOBTEXT列用255个字符的最大长度。不指定TINYBLOBTINYTEXT的长度。
    
    - MEDIUMBLOB or MEDIUMTEXT - BLOBTEXT列具有16777215字符的最大长度。不指定MEDIUMBLOBMEDIUMTEXT的长度。
    
    - LONGBLOBLONGTEXT -  BLOBTEXT列具有4294967295字符的最大长度。不指定LONGBLOBLONGTEXT的长度。
    
    - ENUM - 枚举,这是一个奇特的术语列表。当定义一个ENUM,要创建它的值的列表,这些是必须用于选择的项(也可以是NULL)。例如,如果想要字段包含“A”或“B”或“C”,那么可以定义为ENUMENUM(“A”,“B”,“C”)也只有这些值(NULL)才能用来填充这个字段。
    

charvarchar的区别,面试题

    char   固定长度,char10)  如果填入的数据不足10,那么查看数据长度时依然显示10
    varchar  可变长度   
    
    面试题:
    1.基本的区别  2.分别能做什么  3.实际应用中你是如何使用的  4.你对他们两个的应用有什么个人见解
    
    主要使用的数据类型:
    数字:int  float double decimal
    日期:data  datatime
    字符串:char  varchar  blob(二进制)
    

应用

    #1.创建一个员工表
    mysql> create table worker2(
        -> id int(11),
        -> name varchar(25),
        -> gender varchar(10),
        -> birthday date,
        -> entry_date date,
        -> job varchar(10),
        -> salary double,
        -> resume blob
        -> );
    Query OK, 0 rows affected (0.02 sec)
    
    #2.查看创建的表
    mysql> show tables;
    +---------------------+
    | Tables_in_mysql2005 |
    +---------------------+
    | worker              |
    | worker2             |
    +---------------------+
    2 rows in set (0.00 sec)
    
    #3.查看表信息,所有的字段
    mysql> desc worker2;
    +------------+-------------+------+-----+---------+-------+
    | Field      | Type        | Null | Key | Default | Extra |
    +------------+-------------+------+-----+---------+-------+
    | id         | int(11)     | YES  |     | NULL    |       |
    | name       | varchar(25) | YES  |     | NULL    |       |
    | gender     | varchar(10) | YES  |     | NULL    |       |
    | birthday   | date        | YES  |     | NULL    |       |
    | entry_date | date        | YES  |     | NULL    |       |
    | job        | varchar(10) | YES  |     | NULL    |       |
    | salary     | double      | YES  |     | NULL    |       |
    | resume     | blob        | YES  |     | NULL    |       |
    +------------+-------------+------+-----+---------+-------+
    8 rows in set (0.00 sec)
    
    #4.增加一个字段image
    mysql> alter table worker2 add image blob;
    Query OK, 0 rows affected (0.03 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> desc worker2;
    #5.将job这个字段的数据类型的长度改为60
    #第一种
    mysql> alter table worker2 modify job varchar(60);
    Query OK, 0 rows affected (0.02 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    #第二种
    #格式:alter table worker2 change 旧字段 新字段 varchar(60);
    mysql> alter table worker2 change job job varchar(60);
    Query OK, 0 rows affected (0.01 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    #6.删除字段
    mysql> alter table worker2 drop image;
    Query OK, 0 rows affected (0.02 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    #7.更改表名
    #第一种
    mysql> alter table worker rename to user;
    Query OK, 0 rows affected (0.01 sec)
    #第二种
    mysql> rename table worker2 to worker;
    Query OK, 0 rows affected (0.01 sec)
    
    #注意:modify和change是对表的字段进行修改和改变
    	  rename(重命名) 单纯的对表名进行更改
    #8.对字段名进行修改将name改成username
    mysql> alter table worker change name username varchar(20);
    Query OK, 0 rows affected (0.04 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    #9.删除库
    mysql> drop database mydb3;
    Query OK, 5 rows affected (0.04 sec)
    #10.删除表
    mysql> drop table user;
    Query OK, 0 rows affected (0.01 sec)
    #11.对编码进行设置
    mysql> alter table worker character set gbk;
    Query OK, 0 rows affected (0.01 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    

alter对表的操作

    #1.增加字段
    Alter table table_name ADD 新字段名 数据类型 [约束条件] 
    #2.修改表名
    alter table 旧名字 rename [to] 新名字
    #3.修改字段的数据类型
    alter table 表名 modify 字段名 数据类型
    #4.修改字段名
    alter table 表名 change 旧字段名 新字段名 数据类型
    #5.删除字段
    alter table 表名 drop 字段名
    #6.修改字段的排列顺序
    alter table 表名 modify 字段1 数据类型 first|after 字段2
    first:设置成第一个
    after:放在。。。后面(指定)
    #7.删除表的外键约束
    alter table 表名 drop foreign key 外键约束(字段名)
    

DML

    INSERT  
    #单行插入
    INSERT INTO 表名(field1,field2,。。。) values(value1,value2,。。。)
    #多行、批量插入
    insert into 表名 (field1,field2,。。。)values(value1,value2,。。。),
    											(value1,value2,。。。),
    											(value1,value2,。。。),
    											。。。
                                                
    #注意
    a.列名和列值的类型、个数以及顺序一一对应
    b.可以把列名当作Java中形参,把列值当作实际参数
    c.值不可以超过列定义的长度
    d.如果插入的式空值,(报错,约束提示),写成null
    e.插入的式日期。和字符串一样,用引号引起来
    
    #1.创建一个表
    mysql> create table worker1(
        -> id int(11),
        -> name varchar(25),
        -> gender varchar(20),
        -> salary double
        -> );
    Query OK, 0 rows affected (0.02 sec)
    #2.插入单条数据
    mysql> insert into worker1(id,name,gender,salary)values(1,"tom","male",5000);
    Query OK, 1 row affected (0.01 sec)
    #3.查看数据是否添加成功(查看全部数据显示)
    mysql> select * from worker1;
    +------+------+--------+--------+
    | id   | name | gender | salary |
    +------+------+--------+--------+
    |    1 | tom  | male   |   5000 |
    +------+------+--------+--------+
    1 row in set (0.00 sec)
    #4.添加多条数据
    mysql> insert into worker1 values(2,"jack","male",6000),(3,"rose","female",10000),(4,"hh","male",600);
    Query OK, 3 rows affected (0.01 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    mysql>
    
    update更新(修改)
    #注意:操作(实质上所有的curd全部都可以叫做操作,update)
    update 。。set 。。。
    #格式:
    update 表名  set field1 = new-value1,field2 = new-value2, [where ]#注意:
    a.完全可以更新一个字段和多个字段
    b.where 相当于if(判断语句)
    c.可以指定任何条件到where中
    d.如果没有where语句,默认所有的行都被同时更新为指定的操作
    
    #1.将所有员工的薪水改为3000
    mysql> update worker1 set salary=3000;
    Query OK, 4 rows affected (0.01 sec)
    Rows matched: 4  Changed: 4  Warnings: 0
    #2.将tom的性别改为女(female)
    mysql> update worker1 set gender="female" where name="tom";
    Query OK, 0 rows affected (0.01 sec)
    Rows matched: 1  Changed: 0  Warnings: 0
    
    mysql>
    #3.将rose的性别改为男,并将薪资改为5000
    mysql> update worker1 set gender="male",salary=5000 where name="rose";
    Query OK, 1 row affected (0.01 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    #4.将jack的薪资上调1000
    mysql> update worker1 set salary=salary+1000 where name="jack";
    Query OK, 1 row affected (0.01 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql>
    
    

总结

    #注意where:
    where子句其实就是一个操作符,类似于if语句,可以当作数据的筛选
    
    操作符      说明
    =          相等
    <>/!=      不等号
    <		   小于
    <=		   小于等于
    >		   大于
    >=		   大于等于
    in(A,B)    在A,B之间
    between    位于两个值之间
    and        链接多个表达式(并且的关系)

删除

    delete
    #格式
    delete from 表名 [where ]#注意:
    a.如果where语句没有指定限制条件,默认将表中的数据全部删除
    b.可以指定任何条件进行删除的限制
    
    #1.删除表中hh的字段
    mysql> delete from worker1 where name="hh";
    Query OK, 1 row affected (0.01 sec)
    #2.删除所有数据
    mysql> delete from worker1;
    Query OK, 3 rows affected (0.01 sec)
    
    mysql> select * from worker1;
    Empty set (0.00 sec)
    #3.删除表
    mysql> drop table worker1;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> show tables;
    Empty set (0.00 sec)
    
    mysql> select * from worker1;
    ERROR 1146 (42S02): Table 'mysql2005.worker1' doesn't exist
    mysql>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lucky__cc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值