引擎介绍
表介绍
表就相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段
还记得我们之前写过的‘员工信息表作业’么?存储这员工信息的文件是这样的:
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称为字段,其余的,一行内容称为一条记录
创建表
#语法:create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件]);
mysql> create database staff; Query OK, 1 row affected (0.00 sec)
建表
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> 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
修改表结构
语法:1. 修改表名 ALTER TABLE 表名 RENAME 新表名;
create table t(id int unique,name char(10) not null);
alter操作非空和唯一(了解)
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操作主键(了解)
创建press表 CREATE TABLE `press` ( `id` int(11) NOT NULL, `name` char(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ;
为表添加外键(了解)
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 表名;
多表结构的创建与分析
如何找出两张表之间的关系
分析步骤: #1、先站在左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id)
建立表之间的关系
#一对多或称为多对一 三张表:出版社,作者信息,书一对多(或多对一):一个出版社可以出版多本书关联方式:foreign key
=====================多对一=====================create table press( id int primary key auto_increment, name varchar(20) );
sql示例
班级和学生 一个班级可以对应多个学生,但一个学生只能对应一个班级
其他示例
#多对多 三张表:出版社,作者信息,书
=====================多对多=====================create table author( id int primary key auto_increment, name varchar(20) );
sql示例
服务和机器 一个服务可能被部署到多台机器上,一台机器上也可以部署多个服务
其他示例
#一对一 两张表:学生表和客户表一对一:一个学生是一个客户关联方式:foreign key+unique
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示例
例一:一个用户只有一个博客用户表: 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
其他示例
作业
根据表结构合理设计表与表之间的主外键关系和约束,并完成表结构的创建。