数据库学习笔记01——MySQL基础01

数据库的作用

  • 更有效地管理数据
  • 数据持久化
  • 可以通过Java语言操作数据库

数据库的安装和配置

  • mysql5.7(免费、稳定)

  • 下载地址:MySQL :: Download MySQL Community Server

  • 特别说明:

    如果安装过程中出错了,可以使用指令sc delete mysql删除已经只能装好的mysql服务

  • 安装步骤:

    • 较为复杂,推荐安装教程:Windows安装MySQL5.7教程 - 剑道子羽 - 博客园 (cnblogs.com)

命令行连接MySQL

  • 连接MySQL服务的指令

    mysql -h 主机IP -P 端口 -u 用户名 -p密码

    • -p密码之间没有空格
    • 如果没有-h 主机,默认连接本地
    • 如果没有写-P端口,默认是3306
    • 实际工作中,一般不用3306端口

Navicat安装和使用

  • Navicat是收费软件,可以试用15天

  • 官网:Navicat | 支持 MySQL、MariaDB、MongoDB、SQL Server、SQLite、Oracle 和 PostgreSQL 的数据库管理

  • 试用期结束后八仙过海,各显神通

  • 使用:

    • 新建连接
    • 本机地址:127.0.0.1
    • 端口:一般为3306
    • 新建库、表、字段
  • 同类型软件:SQLyog(免费)

数据库三层结构

  • 所谓安装MySQL数据库,就是在主机安装一个数据库管理系统(DBMS,database manage system),这个管理程序可以管理多个数据库。

  • 一个数据库中可以创建多个表,以保存数据(信息)。

  • 数据库管理系统、数据库和表的关系如图所示:

数据库原理.jpg
  • Mysql数据库-普通表的本质依然是文件

数据在数据库表中的存储方式

  • 列(column)称为字段
  • 行(row)称为记录,在java中,往往使用一个对象表示

SQL语句分类

  • DDL:数据定义语句[create 表、库]

    DML:数据操作语句[增加insert,修改update,删除delete]

    DQL:数据查询语句[select]

    DCL:数据控制语句[管理数据库:用户权限grant revoke]

创建数据库

CREATE DATABASE [IF NOT EXISTS] db_name
                [create_specification[,create_specification]...]
                
create_specification:
 [DEFAULT] CHARACTER SET charset_name
 [DEFAULT] COLLATE collation_name
  • CHARACTER SET指定数据库采用的字符集,如果不指定字符集,默认utf8

  • COLLATE:指定数据库字符集的校对规则(常用的utf8_bin[区分大小写]、utf8_general_ci[不区分大小写、默认])

    # 删除数据库
    # DROP DATABASE db
    # 字符集为utf8,校对规则为utf8_bin
    # 对于表而言,如果没有指定字符集和校对规则,那么就默认为数据库的字符集和校对规则
    CREATE DATABASE db CHARACTER SET utf8 COLLATE utf8_bin
    # *指所有字段,FROM指从哪个表查,WHERE 从哪个字段查
    # SELECT *
    #         FROM t1
    #         WHERE NAME = 'tom'
    

查看、删除数据库

  • 显示数据库语句:SHOW DATABASE
  • 显示数据库创建语句:SHOW CREATE DATABASE db
  • 数据库删除语句(慎用):DROP DATABASE [IF EXISTS] db
  • 在创建数据库、表时,为了规避关键字,可以使用反引号解决:`CREATE`

备份、恢复数据库

  • 备份数据库(命令行)

    mysqldump -u 用户名 -p密码 -B 数据库1 数据库2 ... > 文件名.sql
    
  • 恢复数据库(进入Mysql命令行执行)

    SOURCE 文件名.sql(全路径)
    
  • 也可以用Navicat备份

  • 备份库的表

    mysqldump  -u 用户名 -p密码  数据库 表1 表2 ... > 文件名.sql
    

创建表

CREATE TABLE  table_name
(
                field1 datatype,
                field2 datatype,
                field3 datatype
)CHARACTER SET 字符集 COLLATE 校对规则 ENGINE 引擎
  • field:指定列名
  • datatype:指定字段类型
  • 字符集和校对规则不指定则均默认和数据库一致
  • engine:内容较多,见后文
  • 注意:创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型。
CREATE TABLE `user` (
                id INT,
                `name` VARCHAR(255),
                `birthday` DATE
)CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;

列类型(数据类型)

分类 数据类型 说明
数值类型 BIT(M) 位类型,M指定位数,默认值1,范围1-64
数值类型 TINYINT[UNSIGNED] 占1个字节,带符号的范围是-128到127,无符号0到255.默认有符号
数值类型 SMALLINT[UNSIGNED] 占2个字节,带符号是-2^15到2^15-1,无符号0到2^16-1
数值类型 MEDIUMINT[UNSIGNED] 占3个字节,有符号:-2^23~2^23-1,无符号:0~2^24-1
数值类型 INT[UNSIGNED] 占4个字节,有符号:-2^31~2^31-1 ,无符号:0~2^32-1
数值类型 BIGINT[UNSIGNED] 占8个字节,有符号:-2^63~2^63-1,无符号:0~2^64-1
数值类型 FLOAT[UNSIGNED] 占4个字节
数值类型 DOUBLE[UNSIGNED] 占8个字节,比FLOAT更精确
数值类型 DECIMAL(M,D)[UNSIGNED] 大小不确定,精度很高,M指定长度,D表示小数点位数
文本类型 CHAR(SIZE) 固定长度字符串,最大255
文本类型 VARCHAR(SIZE) 可变长度字符串,0~2^32-1
二进制类型 BLOB,LONBGBLOB 二进制数据
文本类型 TEXT,LONGTEXT 文本
时间日期 DATE,DATETIME,TIMESTAMP 日期类型YYYY-MM-DD(HH:MM:SS),TIMESTAMP时间戳
  • 详见MySQL参考手册

数值型(整数)的基本使用

  • 使用规范:在能够满足需求的情况下,尽量选择占用空间小的类型
# 表的字符集,校验规则,存储引擎,使用默认
# 如果没有指定unsigned,则TINYINT就是有符号的
# TINYINT有符号-128~127,没有符号0~255
CREATE TABLE t3 (
        id TINYINT);
CREATE TABLE t4 (
        id TINYINT UNSIGNED);

INSERT INTO t3 VALUES(-129); # errors:out of range

INSERT INTO t4 VALUES(255);

SELECT *FROM t3;
  • bit类型按位显示
  • 如果希望小数精度高,推荐使用decimal
  • DECIMA[M,D] M是小数位数总数,D是小数点后面的位数

字符型基本使用

  • CHAR 固定长度字符串,最大255字符,不是字节数。不管是中文还是字母都是放4个,按字符计算。

  • VARCHAR 可变长度字符串,按照实际占用大小分配空间,减少空间浪费。最大65532字节,utf8编码最大21844个字符,1-3个字节(取决于编码)用于记录大小。可存放字符数量和编码器有关,字符不区分汉字和字母。

  • 查询速度:char>varchar

  • 如果数据是定长,推荐使用char,比如md5的密码,邮编,手机号,身份证等

    如果字段长度不确定,使用varchar,比如文章,留言

  • 在存放文本时,可以用text数据类型,可以将text列视为varchar列,text不能有默认值。如果varchar不够用,可以使用mediumtext,longtext。如果想简单点,可以直接使用text

# 演示字符串类型
# 注释的快捷键:shift+ctrl+c,取消注释:shift+ctrl+r
-- 如果表的编码是utf8 varchar(size)size=(65535-3)/3=21844
-- 如果表的编码是gbk varchar(size)size=(65535-3)/2=32766
CREATE TABLE t09 (
        `name` CHAR(255));
CREATE TABLE t10 (
        `name` VARCHAR(21844));

日期类型的基本使用

DROP TABLE IF EXISTS t14;
CREATE TABLE IF NOT EXISTS t14 (
        birthday DATE DEFAULT NULL,
        job_time DATETIME DEFAULT NULL,
        login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );-- 自动更新时间戳
SELECT
    * 
FROM
    t14;
INSERT INTO t14 ( birthday, job_time )
VALUES
    ( '2022-11-11', '2019-02-22 13:25:07' );

示例

# 创建表练习
-- 字段 属性
-- Id 整型
-- name 字符型
-- sex 字符型
-- birthday 日期型
-- entry_date 日期型
-- job 字符型
-- Salary 小数型
-- resume 文本型
CREATE TABLE
IF
    NOT EXISTS `emp` (
        id INT,
        `name` VARCHAR ( 32 ),
        sex CHAR ( 1 ),
        birthday DATE,
        entry_date DATETIME,
        job VARCHAR ( 64 ),
        salary DOUBLE,
      resume MEDIUMTEXT 
    ) CHARSET utf8mb4 COLLATE utf8mb4_bin ENGINE INNODB;
    
    INSERT INTO `emp` VALUES (1,'   张三','男','2000-1-1','2020-1-1 11:11:11','教师',5000.000,'12345');

删除、修改表

  • 添加列
ALTER TABLE teblename
ADD (column datatype [DEFAULT expr],...);
  • 修改列
ALTER TABLE tablename
MODIFY (column datatype [DEFAULT expr],...);
  • 删除列
ALTER TABLE tablename
DROP (columnname);
  • 查看表的结构:desc 表名;-- 可以查看的列
  • 修改表名 RENAME TABLE tablename to newtablename
  • 修改字符集ALTER TABLE tablename CHARACTER SET newcharset

你可能感兴趣的:(数据库学习笔记01——MySQL基础01)