MySQL之表操作

数据库的基本操作

1. 操作数据库
增: create database db charset utf8;
查: show databases;
改: alter database db charset latin1;
删: drop database db;
    
2. 操作表 (先切换到表下: use db)
增: create table t1(id int, name char);
查: show tables;
改: alter table t1 modify name char(3);
    alter table t1 change name name1 char(2);
删: drop table t1;
    
3. 操作表中的记录
增: insert into t1 values(1, 'jack'), (2, 'jason');
查: select * from t1;
改: update t1 set name='ran' where id=2;
删: delete from t1 where id=2;
    
清空表:
    delete from t1;     # 如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。
    truncate table t1;  # 数据量大,删除速度比上一条快,且直接从零开始

创建表

表: 表就相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段
语法:
    create table 表名(字段名1 类型[(宽度) 约束条件],...)

注意:
    1. 在同一张表中,字段名是不能相同
    2. 宽度和约束条件可选
    3. 字段名和类型是必须的
建表基本流程
1) 创建数据库
create database db;

2) 进入数据库
use db;

3) 建立表
create table student (id int(11) primary key, name varchar(32), age int(4), sex enum('male', 'female'));

4) 展示所有表
show tables;

5) 查看表结构
desc(describe) 表名;

6) 查看表结构(engine(存储引擎)和charset(字符集)等全面信息), \G是竖向排列的格式.等信息。
show create table 表名 \G;

7) 按照字段查询表信息;
select id, name from student;

8) 查看表所有信息
select * from student;
插入数据
插入表信息:
	- insert into 表名 (字段1,字段2) values (值1,值2);	  # 按照给出的字段对应插入值
	- insert into 表名 values (值1 ,值2);				 # 必须要按照位置类型等插入对应的值

1) 指定表字段进行插入数据
insert into student (id, name, age, sex) values (1, 'jack', 20, 'male');

2) 直接插入数据 (要按照字段顺序插入)
insert into student values (2, 'jason', 18, 'male');

修改表结构

1. 修改表名
alter table 表名 rename 新表名;

2. 增加字段
alter table 表名 add 字段名 数据类型 [完整性约束条件...], 
				add 字段名 数据类型 [完整性约束条件...];
				
3. 删除字段
alter table 表名 drop 字段名;

4. 修改字段
alter table 表名 modify 字段名 [数据类型...];
alter table 表名 change 旧字段名 新字段名 旧数据类型 [完整性约束...];
alter table 表名 change 旧字段名 新字段名 新数据类型 [完整性约束...];

5. 修改字段排列顺序/在增加的时候指定字段位置
ALTER TABLE 表名 ADD 字段名  数据类型 [完整性约束条件…]  FIRST;
ALTER TABLE 表名 ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;
ALTER TABLE 表名 CHANGE 字段名  旧字段名 新字段名 新数据类型 [完整性约束条件…]  FIRST;
ALTER TABLE 表名 MODIFY 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;

多表结构的创建与分析

辨别两张表的关系
1. 先站在左表的角度去找
是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段 foreign key 右表一个字段(通常是id)

2. 再站在右表的角度去找
是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段 foreign key 左表一个字段(通常是id)

3. 总结

1) 多对一
如果只有步骤1成立,则是左表多对一右表
如果只有步骤2成立,则是右表多对一左表

2) 多对多
如果步骤1和2同时成立,则证明这两张表时一个双向的多对一,即多对多,需要定义一个这两张表的关系表来专门存放二者的关系

3) 一对一
如果1和2都不成立,而是左表的一条记录唯一对应右表的一条记录,反之亦然。这种情况很简单,就是在左表foreign key右表的基础上,将左表的外键字段设置成 unique 即可

建立表之间的关系

一对多
三张表: 出版社 作者 书

一对多(多对一): 一个出版社可以出版多本书

关联方式: foreign key
1. 创建出版社表
create table press (id int primary key auto_increment, name char(32));

2. 书籍表 (外键)
create table book (
id int primary key auto_increment, 
name varchar(32),
press_id int not null,
foreign key(press_id) references press(id)
on delete cascade
on update cascade
);
多对多
多对多: 一个作者可以写多本书,一本书也可以有多个作者,双向的一对多,即多对多
  
关联方式: foreign key + 关联表
1. 作者表
create table author (id int primary key auto_increment, name varchar(32));

2. 存放作者和书之间的关系表
create table author_book(
id int primary key auto_increment,
author_id int not null,
book_id int not null,
constraint fk_author foreign key(author_id) references author(id)
on delete cascade
on update cascade,
constraint fk_book foreign key(book_id) references book(id)
on delete cascade
on update cascade,
primary key(author_id, book_id)
);
         
3. 插入数据
insert into author_book(author_id, book_id) value ((1, 2), (1, 3), (2, 3), (3,4));

constraint(约束): [kən'strent]
一对一
两张表:学生表和客户表

一对一:一个学生是一个客户

关联方式: foreign key + unique
1. 客户表
create table customer(id int primary key auto_increment, name varchar(32) not null,);

2. 学生表
create table student(
id int primary key auto_increment,
class_name varchar(32) not null,
customer_id int unique,                  		   # 保证该字段唯一
foreign key(customer_id) references customer(id)   # 外键的字段要保证唯一
on delete cascade
on update cascade);

3. 增加学生
insert into student(class_name, customer_id) values ('1班', 2), ('2班', 3);
posted @ 2019-06-02 20:59  言值  阅读(110)  评论(0编辑  收藏  举报