引擎介绍

mysql中的存储引擎

表介绍

表就相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段

还记得我们之前写过的‘员工信息表作业’么?存储这员工信息的文件是这样的:

id,name,age,sex,phone,job1,Alex,83,female,13651054608,IT2,Egon,26,male,13304320533,Tearcher3,nezha,25,male,13332353222,IT4,boss_jin,40,male,13332353333,IT

如果把上面这个文件改成一张表,应该是下面这个样子

id   name   age   sex   phone   job  
1 Alex 83 female 13651054608 IT
2 Egon 26 male 13304320533 Teacher
3 nezha 25 male 13332353222 IT
4 boss_jin 40 male 13332353333 IT
id,name,age,sex,phone,job称为字段,其余的,一行内容称为一条记录

创建表

MySQL_表操作_mysql

#语法:create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]);

 

MySQL_表操作_mysql

MySQL_表操作_引擎_03MySQL_表操作_引擎_04

mysql> create database staff;
Query OK, 1 row affected (0.00 sec)

 

建表

 

MySQL_表操作_引擎_03MySQL_表操作_引擎_04

mysql> insert into staff_info (id,name,age,sex,phone,job) values (1,'Alex',83,'female',13651054608,'IT');
Query OK, 1 row affected (0.00 sec)

 

插入数据

查看表结构

查看表结构有两种方式:

describe [tablename];这种方法和desc [tablename];效果相同;可以查看当前的表结构

虽然desc命令可以查看表的定义,但是其输出的信息还不够全面,为了得到更全面的表定义信息,有时候就需要查看创建表的SQL语句,使用show create table语法。除了可以看到表定义之外,还可以看到engine(存储引擎)和charset(字符集)等信息。(\G选项的含义是是的记录能够竖向排列,以便更好的显示内容较长的记录。)

MySQL_表操作_引擎_03MySQL_表操作_引擎_04

mysql> describe staff_info;+-------+-----------------------+------+-----+---------+-------+| Field | Type                  | Null | Key | Default | Extra |+-------+-----------------------+------+-----+---------+-------+| id    | int(11)               | YES  |     | NULL    |       || name  | varchar(50)           | YES  |     | NULL    |       || age   | int(3)                | YES  |     | NULL    |       || sex   | enum('male','female') | YES  |     | NULL    |       || phone | bigint(11)            | YES  |     | NULL    |       || job   | varchar(11)           | YES  |     | NULL    |       |+-------+-----------------------+------+-----+---------+-------+6 rows in set (0.00 sec)

 

desc和show create table 

 

修改表结构

MySQL_表操作_mysql

语法:1. 修改表名      ALTER TABLE 表名 
                      RENAME 新表名;

 

MySQL_表操作_mysql

MySQL_表操作_引擎_03MySQL_表操作_引擎_04

create table t(id int unique,name char(10) not null);

 

alter操作非空和唯一(了解)

MySQL_表操作_引擎_03MySQL_表操作_引擎_04

1、首先创建一个数据表table_test:
create table table_test(
`id` varchar(100) NOT NULL,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`name`)
); 
2、如果发现主键设置错了,应该是id是主键,但如今表里已经有好多数据了,不能删除表再重建了,仅仅能在这基础上改动表结构。
先删除主键
alter table table_test drop primary key;
然后再增加主键
alter table table_test add primary key(id);
注:在增加主键之前,必须先把反复的id删除掉。

alter操作主键(了解)

MySQL_表操作_引擎_03MySQL_表操作_引擎_04

创建press表
CREATE TABLE `press` (
  `id` int(11) NOT NULL,
  `name` char(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ;

 

为表添加外键(了解)

MySQL_表操作_引擎_03MySQL_表操作_引擎_04

mysql> desc staff_info;+-------+-----------------------+------+-----+---------+-------+| Field | Type                  | Null | Key | Default | Extra |+-------+-----------------------+------+-----+---------+-------+| id    | int(11)               | YES  |     | NULL    |       || name  | varchar(50)           | YES  |     | NULL    |       || age   | int(3)                | YES  |     | NULL    |       || sex   | enum('male','female') | YES  |     | NULL    |       || phone | bigint(11)            | YES  |     | NULL    |       || job   | varchar(11)           | YES  |     | NULL    |       |+-------+-----------------------+------+-----+---------+-------+6 rows in set (0.00 sec)

 

示例

删除表

DROP TABLE 表名;

多表结构的创建与分析

如何找出两张表之间的关系 

MySQL_表操作_mysql

分析步骤:
#1、先站在左表的角度去找
是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id)

 

MySQL_表操作_mysql

建立表之间的关系

#一对多或称为多对一
三张表:出版社,作者信息,书一对多(或多对一):一个出版社可以出版多本书关联方式:foreign key

 

MySQL_表操作_引擎_03MySQL_表操作_引擎_04

=====================多对一=====================create table press(
id int primary key auto_increment,
name varchar(20)
);

 

sql示例

MySQL_表操作_引擎_03MySQL_表操作_引擎_04

班级和学生
一个班级可以对应多个学生,但一个学生只能对应一个班级

 

其他示例

 

#多对多
三张表:出版社,作者信息,书

 

MySQL_表操作_引擎_03MySQL_表操作_引擎_04

=====================多对多=====================create table author(
id int primary key auto_increment,
name varchar(20)
);

 

sql示例

MySQL_表操作_引擎_03MySQL_表操作_引擎_04

服务和机器
一个服务可能被部署到多台机器上,一台机器上也可以部署多个服务

 

其他示例

 

#一对一
两张表:学生表和客户表一对一:一个学生是一个客户关联方式:foreign key+unique

 

MySQL_表操作_引擎_03MySQL_表操作_引擎_04

create table customer(    -> id int primary key auto_increment,    -> name varchar(20) not null,    -> qq varchar(10) not null,    -> phone char(16) not null
    -> );

 

sql示例

MySQL_表操作_引擎_03MySQL_表操作_引擎_04

例一:一个用户只有一个博客用户表:
id  name1    egon2    alex3    wupeiqi


博客表   
       fk+uniqueid url name_id1  xxxx   12  yyyy   33  zzz    2

例二:一个管理员唯一对应一个用户
用户表:
id user  password
1  egon    xxxx
2  alex    yyyy

管理员表:
   fk+uniqueid user_id password1   1      xxxxx2   2      yyyyy

其他示例

作业

根据表结构合理设计表与表之间的主外键关系和约束,并完成表结构的创建。

MySQL_表操作_mysql_33