表介绍:
-
表就相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段:
- 例:
-
id,name,age,sex 1,yj,18,male 2,lijie,20,male 3,yong,female
id,name,age,sex称为字段,其余的,一行内容称为一条记录
建表语法:
#建表语法#
create table curriculum( id int, #数据类型为整数 name char(12), #长度为12 字段命3 类型[(宽度) 约束条件] ); #放在中括号里的内容可不写
mysql> create database python; #新建数据库名为python Query OK, 1 row affected (0.04 sec) mysql> use python; #切换数据库 Database changed mysql> create table staff_info (id int,name varchar(50),age int(3),sex enum('male','female'),phone bigint(11),job varchar(11)); Query OK, 0 rows affected (0.30 sec) #建表 mysql> show tables; #查看当前数据库下的表 +------------------+ | Tables_in_python | +------------------+ | staff_info | +------------------+ 1 row in set (0.04 sec) 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 | | +-------+-----------------------+------+-----+---------+-------+ mysql> select id,name,sex from staff_info; Empty set (0.03 sec) mysql> select * from staff_info; Empty set (0.02 sec)
mysql> insert into staff_info (id,name,age,sex) values (1,'YJ','18','female'); Query OK, 1 row affected (0.16 sec) #插入数据 mysql> insert into staff_info (id,name,age,sex) values (2,'sys','20','male'); Query OK, 1 row affected (0.09 sec) mysql> insert into staff_info (id,name,age,sex) values (3,'fyj','21','male'); Query OK, 1 row affected (0.05 sec) mysql> select * from staff_info; #查看表 +------+------+------+--------+-------+------+ | id | name | age | sex | phone | job | +------+------+------+--------+-------+------+ | 1 | YJ | 18 | female | NULL | NULL | | 2 | sys | 20 | male | NULL | NULL | | 3 | fyj | 21 | male | NULL | NULL | +------+------+------+--------+-------+------+ 3 rows in set (0.02 sec)
insert into 表 values (值1,值2,值3); # 这张表有多少的字段,就需要按照字段的顺序写入多少个值 insert into 表 values (值1,值2,值3),(值1,值2,值3),(值1,值2,值3); # 一次性写入多条数据 insert into 表 (字段1,字段3 ) values (值1,值3); # 指定字段名写入,可以任意的选择表中你需要写入的字段进行
desc 表名;
能够查看到有多少个字段\类型\长度,看不到表编码,引擎,具体的约束信息只能看到一部分
show create table 表名;
能查看字段\类型\长度\编码\引擎\约束
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) 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) #show create table mysql> show create table staff_info; +------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | staff_info | CREATE TABLE `staff_info` ( `id` int(11) DEFAULT NULL, `name` varchar(50) DEFAULT NULL, `age` int(3) DEFAULT NULL, `sex` enum('male','female') DEFAULT NULL, `phone` bigint(11) DEFAULT NULL, `job` varchar(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.04 sec)
1. 修改表名: ALTER TABLE 表名 RENAME 新表名; mysql> alter table staff_info -> rename xxb; Query OK, 0 rows affected (0.34 sec) 2. 增加字段: ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…], ADD 字段名 数据类型 [完整性约束条件…]; mysql> alter table xxb -> add hh char(12); Query OK, 0 rows affected (0.41 sec) Records: 0 Duplicates: 0 Warnings: 0 3. 删除字段: ALTER TABLE 表名 DROP 字段名; mysql> alter table xxb -> drop job -> ; Query OK, 0 rows affected (0.53 sec) Records: 0 Duplicates: 0 Warnings: 0 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 字段名;
建立表之间的关系:
- 一对多或称为多对一
- 一个老师可以教多个班级
=====================多对一===================== create table press( id int primary key auto_increment, name varchar(20) ); create table book( id int primary key auto_increment, name varchar(20), press_id int not null, foreign key(press_id) references press(id) on delete cascade on update cascade ); insert into press(name) values ('北京工业地雷出版社'), ('人民音乐不好听出版社'), ('知识产权没有用出版社') ; insert into book(name,press_id) values ('九阳神功',1), ('九阴真经',2), ('九阴白骨爪',2), ('独孤九剑',3), ('降龙十巴掌',2), ('葵花宝典',3) ;
-
服务和机器 一个服务可能被部署到多台机器上,一台机器上也可以部署多个服务 学生和课程 一个学生可以选择多门课程,一门课程也可以被多个学生选择
多对多
- 三张表:出版社,作者,书
- 多对多:一个作者可以写多本书,一本书也可以有多个作者,双向的一对多,即多对多
删除表:
drop table 表名: