[数据库 02] 数据库 数据类型 引擎类型

数据库基础操作


关系型数据库 SQL 非关系型数据库 NoSQL(Not noly sql) 常见:redis, MongDB

1. Mysql 基本命令行操作

每行都必须带结尾

-- 进入
mysql -uroot -p
-- 修改用户名密码(实际是对存储密码的表的修改)
update mysql.user set authentication_string=password('') where user = 'root' and Host = 'localhost';
-- 刷新权限
flush privileges;
-- 展示所有数据库
show databases;
-- 切换数据库
mysql> use school
Database changed
-- 展示所有的表
show tables;
-- 描述表中的行列等信息
desc student;-- student 是表名

DDL, DML, DQL, DCL D...L :数据库 ... 语言

定义,管理,查询, 控制

2. 操作数据库


操作数据库,操作表,操作数据

1. 操作数据库

  1. 创建

    create database 数据库名 ;
    -- 加判断
    create database if not exists 数据库名 ;
    
  2. 删除

    drop database 数据库名 ;
    drop database if exists 数据库名 ;
    
  3. 使用

    -- 切换数据库
    use 数据库名 ;
    -- 如果对象名称为一个特殊字符或字段(和 sql 系统字段有重复,则增加 ``)
    select `user` from student; -- user 是 student 表中的一个属性
    
  4. 查看数据库

    show databases;
    

2. 数据库数据类型

常用:

int 对应 java 中的 int

varchar 对应 String

text 用于存储长文本

timestamp 为时间戳,

datetime 常用

数据库中 int 类型,设置的 Length 只和字段属性中的 Zerofill 有关(补几个 0),设置为 int 之后,最大数据量就是 4 字节,和设置的 Length 无关。


  1. 数值

    • tinyint 1 字节, smallint 2 字节, mediumint 3 字节, int 4 字节;== bigint 8 字节;
    • float 4 字节
    • double 8 字节
    • decimal 字符串形式的浮点数(金融计算用)
  2. 字符串

    • char 固定长字符串, 0~255
    • varchar 可变长字符串 0~65535
    • tinytext 微型文本 2^8 -1,博客信息足够用
    • **text 文本串,大型文章 2^16 -1 **
  3. 时间日期

    java.util.Date

    • date YYYY-MM-DD 日期
    • time HH🇲🇲ss 时间日期
    • datetime 最常用的时间格式
    • timestamp 时间戳 , 1970.1.1 到现在的毫秒数
    • year 年份表示
  4. null

    • 没有值,未知

3. 数据库的字段属性

  1. Unsigned:无符号整数,声明不能为负数

  2. Zerofill: 0 填充,不足的位数,使用 0 填充

  3. Auto Incr: 自增, 自动在上一条记录的基础上加 1,用来设置唯一主键,理解为 index,必须是整数类型,

    可以自定义主键的初始值和增量(在 sqlyog 创建表格的 advanced 里设置)

  4. Not null: 当设置为 not null 时,如果不给该属性赋值,就会报错。

  5. Default:设置默认值

每张表中,必须存在的 5 个属性(项目阶段):表示一个记录存在的意义

id 主键
`version` 乐观锁
is_delete 伪删除
gmt_create 创建时间
gmt_update 修改时间

4. 创建数据库表

-- 字符串使用单引号
-- 所有的语句后加逗号, 最后一个不用加
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT 'address',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',

PRIMARY KEY (id)
)ENGINE=INNODB DEFAULT CHARSET=utf8

格式:

create table 表名(
属性名 类型声明(类型长度) 字段属性,

primary key (属性名) -- 最后一个没有, 号
)表类型 字符编码

查看建好的数据库的定义 SHOW CTEATE TABLE 表明

3. 数据库引擎类型

InnoDB MyISAM
事务支持 支持 不支持
外键支持 支持 不支持
行级锁 支持 不支持(表级锁)
聚集索引 支持 不支持
全文索引 不支持 支持
表空间 大,为 MyISAM 的两倍

全文索引:可以在一篇文章中索引内容
MyISAM:节约空间,速度快

InnoDB: 安全性高,事务处理, 支持多表多用户处理(支持行锁和外键)

所有的数据库都存在于 data 目录下,本质还是文件存储

存储区别:


InnoDB:生成*.frm文件, 和上层文件夹中的ibdata1文件。

MyISAM:

  • *.frm 表结构的定义文件
  • *.MYD 数据文件 data
  • *.MYI 索引文件 index

如果不设置 charset,mysql 默认字符集编码。

修改方法:1. 建表时选择 charset=utf8;2. 在 my.ini 中配置, 添加character-set-server=utf8

4. 修改和删除数据表字段

-- 注意 change 和 modify 的区别:一个可以重命名,一个不可以
-- 修改表名
alter table 旧表名 rename as 新表名;
-- 增加表的属性
alter table 表名 add 属性 属性类型(长度)
-- 修改表的属性约束(属性类型)
alter table 表名 modify 旧属性 varchar(11) -- 修改约束
alter table 表名 change 旧属性名 新属性名 varchar(11) -- 属性重命名,也可以修改约束
-- 删除表属性
alter table 表名 drop 属性名 

删除表

drop table if exists 表名