数据库基础知识

三大范式

  1. 第一范式的目标是确保每列的原子性,每列都是不可再分的最小数据单元。
  2. 第二范式要求每个表只描述一件事情
  3. 第三范式要求表中的各列必须和主键直接相关,不能间接相关

MySQL的运行机制

MySQL运行机制

基础SQL语句

使用数据前必须先选择该数据库!

mysql> create database myblog; 创建数据库
mysql> show databases; 查看数据库列表
mysql> use myblog; 选择数据库(数据库不存在,报错)
mysql> drop database myblog; 删除数据库
mysql> show tables;查看当前数据库中的表

结构化查询语言

  1. DML(数据库操作语言):用来操作数据库
  2. 所包含的数据。insert update delete
  3. DDL(数据定义语言):用于创建和删除数据库对象操作。create drop alter
  4. DQL(数据查询语言):用来对数据库中的数据进行查询。select
  5. DCL(数据库控制语言):用来控制数据库组件的存取许可、存取权限等。grant commit rollback

MySql数据类型

  1. 数值类型

数值类型

  1. 字符串、日期类型

字符串、日期类型

补充:

unsigned属性 标识为无符号数

zerofill 宽度(位数)不足以0填充

若某数值字段指定了zerofill属性将自动添加unsigned属性

若日期字段默认值为当前日期,一般设置为timestamp类型

mysql> use myblog;使用myblog数据库
mysql> create table `tb_type`(
	->	`sid` int(4) zerofill,
	->`id` int(4) unsigned
	-> );  创建表并指定列
mysql> insert into `tb_type` value(12,123),(123222,2),(66,6666); 插入测试数据
测试结果:
+--------+------+
| sid    | id   |
+--------+------+
|   0012 |  123 |
| 123222 |    2 |
|   0066 | 6666 |
+--------+------+
创建表的语法
create table [if not exists] 表名(
	字段一 数据类型 [字段属性|约束][索引][注释],
	······
    字段n 数据类型 [字段属性|约束][索引][注释]
)[表类型][表字符集][注释];
注:
多字段使用逗号分隔
保留字用撇号括起来
单行注释 #注释内容
多行注释 /*内容*/
#这是被单行注释注释掉的内容
/*
这是
被多行注释
注释掉的文本
内容
*/

字段的约束及属性

名称 关键字 说明
非空约束 not null 字段不允许为空
默认约束 default 赋予某字段默认值
唯一约束 unique key(UK) 设置字段的值是唯一的允许为空,但只能有一个空值
主键约束 primary key(PK) 设置该字段为表的主键 可唯一标识该表记录
外键约束 foreign key(FK) 用于在两表之间建立关系,需指定引用主表的那一字段
自动增长 auto_increment 设置该列为自增字段 默认每条自增1 通常用于设置主键
# 主键
mysql> create table student(
	->	`studentNo` int(4) primary key
	-> );
结果:
mysql> desc student;#查看表结构
+-----------+--------+------+-----+---------+-------+
| Field     | Type   | Null | Key | Default | Extra |
+-----------+--------+------+-----+---------+-------+
| studentNo | int(4) | NO   | PRI | NULL    |       |
+-----------+--------+------+-----+---------+-------+
#注释
#创建表时写注释
mysql> create table test(
	->	`id` int(11) unsigned comment '编号'
	->)comment='测试表';
#修改表的注释
mysql> alter table test comment '修改后的注释';
#修改字段的注释 字段名和字段类型照写就行
mysql> alert table test modify column id int comment '修改后的内容';
mysql> alter table test modify column name varchar(255) comment '修改';
#设置字符集编码
mysql> create table [if not exists] 表名(
	->	#省略代码
	->) charset=字符集名;

MySQL使用SQL语句查询数据库所有表注释 已有表字段注释

  1. 要查询数据库myblog下所有表名以及表注释

    /* 查询数据库 ‘mammothcode’ 所有表注释 */
    mysql> SELECT TABLE_NAME,TABLE_COMMENT FROM information_schema.TABLES WHERE table_schema='myblog';
    

场景一

  1. 要查询表字段的注释
/* 查询数据库 ‘myblog’ 下表 ‘test’ 所有字段注释 */
mysql> SELECT COLUMN_NAME,column_comment FROM INFORMATION_SCHEMA.Columns WHERE table_name='test' AND table_schema='myblog';

场景二

  1. 一次性查询数据库 "myblog" 下表注释以及对应表字段注释
mysql> SELECT t.TABLE_NAME,t.TABLE_COMMENT,c.COLUMN_NAME,c.COLUMN_TYPE,c.COLUMN_COMMENT FROM information_schema.TABLES t,INFORMATION_SCHEMA.Columns c WHERE c.TABLE_NAME=t.TABLE_NAME AND t.`TABLE_SCHEMA`='myblog';

场景三

  1. 查看表注释 在生成的sql语句中查看

    mysql> show create table test;
    

场景四

  1. 查看字段注释 show

    mysql> show full columns from test;
    

场景五

查看表

#查看表是否存在
mysql> use myblog;
mysql> show tables;
#查看表定义
describe 表名;或desc 表名;

删除表

drop table [if exists] 表名;
#删除表之前 先使用if exists语句验证表是否存在

MySQL的存储引擎

类型

MyISAM、InnoDB、Memory等9种。

MyISAM与InnoDB类型的主要区别
名称 InnoDB MyISAM
事务处理 支持 不支持
数据行锁定 支持 不支持
外键约束 支持 不支持
全文索引 不支持 支持
表空间大小 较大 约2倍 较小
适用场合
  1. 使用InnoDB:多删除、更新操作,安全性高,事务处理及并发控制
  2. 使用MyISAM:不需事务 空间小 以查询访问为主
查看表存储引擎

方法一:show create table test;

方法二:

mysql> show table status from myblog where name='test' \G;
#结果
*************************** 1. row ***************************
           Name: test
         Engine: InnoDB
        Version: 10
     Row_format: Dynamic
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2018-11-21 08:34:17
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment: 修改后的表的注释
1 row in set (0.00 sec)

方法三:

mysql> select table_catalog
    ->  ,table_schema
    -> ,table_name
    -> ,engine
    -> from information_schema.tables
    -> where table_schema='myblog' and table_name='test';
+---------------+--------------+------------+--------+
| table_catalog | table_a | table_name | engine |
+---------------+--------------+------------+--------+
| def      
     | myblog       | test       | InnoDB |
+---------------+--------------+------------+--------+
1 row in set (0.00 sec)

场景模拟:

  • 场景一:查询整个MySQL实例里面存储引擎为MyISAM的表

    mysql> select table_catalog
        ->       ,table_schema
        ->       ,table_name
        ->       ,engine
        -> from information_schema.tables
        -> where engine='MyISAM';
    

模拟场景一

  • 场景二:查询myblog数据库里面存储引擎为MyISAM的表

    mysql> select table_catalog
        ->       ,table_schema
        ->       ,table_name
        ->       ,engine
        -> from information_schema.tables
        -> where table_schema='myblog' and engine='InnoDB';
    

模拟场景二

修改默认存储引擎

修改my.ini配置文件

default-storage-engine= InnoDB

改为其他存储引擎 重启服务后执行上面语句查看修改结果

设置表的存储引擎

create table 表名{
	#省略代码
}engine=存储引擎;
eg:
mysql>CREATE TABLE `myisam` (
   	-> id  INT(4)
	->)ENGINE=MyISAM;

数据表存储位置

MyISAM类型表文件

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

InnoDB类型表文件

  • *.frm:表结构定义文件
  • ibdata1文件

存储位置:因操作系统而异,可查my.ini 比如windows 我拿的作为例子

my.ini位置C:\ProgramData\MySQL\MySQL Server 5.7\my.ini

MySQL系统帮助

help 查询内容;
help contents;
help Data Types;
help INT;

友情链接:http://www.jikedaquan.com

posted @ 2018-11-21 11:17  老张嘞  阅读(157)  评论(0编辑  收藏  举报