[数据库 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:mm: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

上一篇:sql


下一篇:day64