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

数据库的作用

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

数据库的安装和配置

命令行连接MySQL

  • 连接MySQL服务的指令

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

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

Navicat安装和使用

数据库三层结构

  • 所谓安装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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容