Mysql---表管理

表 是mysql服务用来存储数据的文件

库 存放表的目录

语法:

 

库名是有命名规则? (要记牢)

仅可以使用数字、字母、下划线、不能纯数字

区分字母大小写,

具有唯一性

不可使用指令关键字、特殊字符


建库的基本命令   create  database  库名;
mysql> CREATE DATABASE gamedb ;
mysql> CREATE DATABASE GAMEDB ;

mysql> CREATE DATABASE GAMEDB ;  #已存在 会报错
mysql> CREATE DATABASE IF NOT EXISTS gamedb ;  如果不存在就建库 正常

mysql> show  databases;  # 查看有哪些库

mysql> drop database gamedb;   # 删除库
Query OK, 0 rows affected (0.00 sec)

mysql> drop database gamedb;
ERROR 1008 (HY000): Can't drop database 'gamedb'; database doesn't exist

mysql> drop database if exists gamedb; 如果库存在就删除
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> 

 

 

建表命令格式   (要记牢)

create  table  库名.表名(
表头名1  数据类型,
表头名2  数据类型,
表头名3  数据类型,
表头名4  数据类型
);



mysql> create database 学生库;    
mysql> use  学生库;
mysql> create table 学生库.学生信息表(姓名 char(10) , 班级 char(9) , 性别 char(4) , 年龄 int );
mysql> show tables;
+---------------------+
| Tables_in_学生库    |
+---------------------+
| 学生信息表          |
+---------------------+
1 row in set (0.00 sec)

mysql> desc 学生库.学生信息表;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| 姓名   | char(10) | YES  |     | NULL    |       |
| 班级   | char(9)  | YES  |     | NULL    |       |
| 性别   | char(4)  | YES  |     | NULL    |       |
| 年龄   | int(11)  | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> 

mysql> drop table 学生库.学生信息表;

mysql> drop database 学生库;

使用英文命名重新建表
mysql> create database  studb;
Query OK, 1 row affected (0.00 sec)

mysql> create table studb.stu(name char(10) , class char(9) , gender char(4) , age int );
Query OK, 0 rows affected (0.29 sec)

mysql> desc studb.stu;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| name   | char(10) | YES  |     | NULL    |       |
| class  | char(9)  | YES  |     | NULL    |       |
| gender | char(4)  | YES  |     | NULL    |       |
| age    | int(11)  | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> 

E-R关系模型

实体——关系模型

 建表范式

 

第一范式

  • 第一范式(1NF)要求数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值。
  • 若某一列有多个值,可以将该列单独拆分成一个实体,新实体和原实体间是一对多的关系。
  • 在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。

第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式

第二范式

  • 满足第二范式(2NF)必须先满足第一范式(1NF)。
  • 第二范式要求实体中没一行的所有非主属性都必须完全依赖于主键;即:非主属性必须完全依赖于主键。
  • 完全依赖:主键可能由多个属性构成,完全依赖要求不允许存在非主属性依赖于主键中的某一部分属性。
  • 若存在哪个非主属性依赖于主键中的一部分属性,那么要将发生部分依赖的这一组属性单独新建一个实体,并且在旧实体中用外键与新实体关联,并且新实体与旧实体间是一对多的关系。

第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键

第三范式

  • 满足第三范式必须先满足第二范式。
  • 第三范式要求:实体中的属性不能是其他实体中的非主属性。因为这样会出现冗余。即:属性不依赖于其他非主属性。
  • 如果一个实体中出现其他实体的非主属性,可以将这两个实体用外键关联,而不是将另一张表的非主属性直接写在当前表中。

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。

 

修改表

语法格式:

mysql> alter table studb.stu rename studb.stuinfo;  修改表名 
mysql> alter table studb.stuinfo drop age ;  删除字段
mysql> use studb;
Database changed
mysql> show tables;
+-----------------+
| Tables_in_studb |
+-----------------+
| stuinfo         |
+-----------------+
1 row in set (0.00 sec)

mysql> desc stuinfo;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| name   | char(10) | YES  |     | NULL    |       |
| class  | char(9)  | YES  |     | NULL    |       |
| gender | char(4)  | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> alter table studb.stuinfo add  mail  char(30) ; 添加在末尾


添加在指定位置 

mysql> alter table  studb.stuinfo add  number  char(9) first , add  school char(10) after name;

mysql> desc studb.stuinfo; 查看表结构
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| number | char(9)  | YES  |     | NULL    |       |
| name   | char(10) | YES  |     | NULL    |       |
| school | char(10) | YES  |     | NULL    |       |
| class  | char(9)  | YES  |     | NULL    |       |
| gender | char(4)  | YES  |     | NULL    |       |
| mail   | char(30) | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+


mysql> alter table  studb.stuinfo   修改字段类型
    -> modify
    -> mail varchar(50) not null default "plj@tedu.cn";

mysql> desc studb.stuinfo;
+--------+-------------+------+-----+-------------+-------+
| Field  | Type        | Null | Key | Default     | Extra |
+--------+-------------+------+-----+-------------+-------+
| number | char(9)     | YES  |     | NULL        |       |
| name   | char(10)    | YES  |     | NULL        |       |
| school | char(10)    | YES  |     | NULL        |       |
| class  | char(9)     | YES  |     | NULL        |       |
| gender | char(4)     | YES  |     | NULL        |       |
| mail   | varchar(50) | NO   |     | plj@tedu.cn |       |
+--------+-------------+------+-----+-------------+-------+

mysql> alter table studb.stuinfo change  class class_name char(9) ; 修改表头名
mysql> desc studb.stuinfo;查看修改
+------------+-------------+------+-----+-------------+-------+
| Field      | Type        | Null | Key | Default     | Extra |
+------------+-------------+------+-----+-------------+-------+
| number     | char(9)     | YES  |     | NULL        |       |
| name       | char(10)    | YES  |     | NULL        |       |
| school     | char(10)    | YES  |     | NULL        |       |
| class_name | char(9)     | YES  |     | NULL        |       |
| gender     | char(4)     | YES  |     | NULL        |       |
| mail       | varchar(50) | NO   |     | plj@tedu.cn |       |
+------------+-------------+------+-----+-------------+-------+


mysql> alter table  studb.stuinfo  drop school , drop 班级 ,drop email ;    一起删除多个表头
Query OK, 0 rows affected (0.59 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc  studb.stuinfo; 查看 
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| number | char(9)  | YES  |     | NULL    |       |
| name   | char(10) | YES  |     | NULL    |       |
| gender | char(4)  | YES  |     | NULL    |       |
| age    | int(11)  | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> 

使用modify  修改表头的位置  
mysql> alter  table studb.stuinfo  modify age int  after name ;   
Query OK, 0 rows affected (0.47 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc studb.stuinfo;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| number | char(9)  | YES  |     | NULL    |       |
| name   | char(10) | YES  |     | NULL    |       |
| age    | int(11)  | YES  |     | NULL    |       |
| gender | char(4)  | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

 

复制表:

 

复制表  (拷贝已有的表  类型系统命令 cp  的功能 )
			仅仅复制表头命令格式:(只复制表结构)
			表头和数据复制都复制的命令格式


复制表  (拷贝已有的表  和系统命令 cp  的功能一样 )  作用: 备份已有的表	


表头和数据复制都复制的 命令格式create  table  库名.表名   select  *  from  库名.表名 ;

例子:拷贝 tarena库下的user表到   studb库里 表名不变
mysql> use studb;
mysql> show tables;
+-----------------+
| Tables_in_studb |
+-----------------+
| stuinfo         |
+-----------------+
1 row in set (0.00 sec)

mysql> create table studb.user select  * from tarena.user;
mysql> show tables;
+-----------------+
| Tables_in_studb |
+-----------------+
| stuinfo         |
| user            |
+-----------------+


mysql> select  * from studb.user; 查看数据了


			仅仅复制表头命令格式:(只复制表结构)
			命令格式  CREATE  TABLE 库.表   LIKE  库.表
例子
mysql> use studb;
Database changed
mysql> show tables;
+-----------------+
| Tables_in_studb |
+-----------------+
| stuinfo         |
| user            |
+-----------------+
2 rows in set (0.00 sec)

mysql> create table studb.user2  like tarena.user;  仅仅复制表头
Query OK, 0 rows affected (0.24 sec)

mysql> show tables;
+-----------------+
| Tables_in_studb |
+-----------------+
| stuinfo         |
| user            |
| user2           |
+-----------------+
3 rows in set (0.00 sec)

mysql> select  * from studb.user2;
Empty set (0.00 sec)

mysql> desc studb.user2;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| name     | char(20)    | YES  |     | NULL    |                |
| password | char(1)     | YES  |     | NULL    |                |
| uid      | int(11)     | YES  |     | NULL    |                |
| gid      | int(11)     | YES  |     | NULL    |                |
| comment  | varchar(50) | YES  |     | NULL    |                |
| homedir  | varchar(80) | YES  |     | NULL    |                |
| shell    | char(30)    | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)

mysql> 

管理表记录

                插入表记录 向表添加新行

                修改表记录  对行里 列的值做记录

                删除表记录

                查询表记录

 

 

管理表记录 : 对表中存储的行做管理 ,操作包括  查看select   插入 insert into   更新 update  删除 delete 
用来做练习的表结构
添加行   insert  into
   修改   update
删除行  delete 

mysql> desc studb.stuinfo;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| number | char(9)  | YES  |     | NULL    |       |
| name   | char(10) | YES  |     | NULL    |       |
| age    | int(11)  | YES  |     | NULL    |       |
| gender | char(4)  | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> select  * from  studb.stuinfo;
Empty set (0.00 sec)

mysql> 

mysql> insert into studb.stuinfo  values("nsd211101" , "bob" , 19 , "girl");

mysql> insert into studb.stuinfo  
    -> values
    -> ("nsd211102" , "jim",21,"boy"),("nsd211103","lucy",18,"girl");

mysql> select  * from studb.stuinfo;
+-----------+------+------+--------+
| number    | name | age  | gender |
+-----------+------+------+--------+
| nsd211101 | bob  |   19 | girl   |
| nsd211102 | jim  |   21 | boy    |
| nsd211103 | lucy |   18 | girl   |
+-----------+------+------+--------+
3 rows in set (0.00 sec)


mysql> insert into  studb.stuinfo(number,name) values("nsd211104","john");

mysql> select  * from studb.stuinfo;
+-----------+------+------+--------+
| number    | name | age  | gender |
+-----------+------+------+--------+
| nsd211101 | bob  |   19 | girl   |
| nsd211102 | jim  |   21 | boy    |
| nsd211103 | lucy |   18 | girl   |
| nsd211104 | john | NULL | NULL   |
+-----------+------+------+--------+
4 rows in set (0.00 sec)

mysql> insert into  studb.stuinfo(number,name) values("nsd211105","jerry"),("nsd211106","lilei");


mysql> select  * from studb.stuinfo;                                     +-----------+-------+------+--------+
| number    | name  | age  | gender |
+-----------+-------+------+--------+
| nsd211101 | bob   |   19 | girl   |
| nsd211102 | jim   |   21 | boy    |
| nsd211103 | lucy  |   18 | girl   |
| nsd211104 | john  | NULL | NULL   |
| nsd211105 | jerry | NULL | NULL   |
| nsd211106 | lilei | NULL | NULL   |
+-----------+-------+------+--------+
6 rows in set (0.00 sec)

mysql> insert into studb.stuinfo set number="nsd211107" , age=23 , gender="boy";


mysql> select  * from  studb.stuinfo;
+-----------+-------+------+--------+
| number    | name  | age  | gender |
+-----------+-------+------+--------+
| nsd211101 | bob   |   19 | girl   |
| nsd211102 | jim   |   21 | boy    |
| nsd211103 | lucy  |   18 | girl   |
| nsd211104 | john  | NULL | NULL   |
| nsd211105 | jerry | NULL | NULL   |
| nsd211106 | lilei | NULL | NULL   |
| nsd211107 | NULL  |   23 | boy    |
+-----------+-------+------+--------+
7 rows in set (0.00 sec)


mysql> insert into studb.stuinfo(number,name) (select number,name from studb.stuinfo where name in ("bob","jim","lucy") );

mysql> select  * from studb.stuinfo;
+-----------+-------+------+--------+
| number    | name  | age  | gender |
+-----------+-------+------+--------+
| nsd211101 | bob   |   19 | girl   |
| nsd211102 | jim   |   21 | boy    |
| nsd211103 | lucy  |   18 | girl   |
| nsd211104 | john  | NULL | NULL   |
| nsd211105 | jerry | NULL | NULL   |
| nsd211106 | lilei | NULL | NULL   |
| nsd211107 | NULL  |   23 | boy    |
| nsd211101 | bob   | NULL | NULL   |
| nsd211102 | jim   | NULL | NULL   |
| nsd211103 | lucy  | NULL | NULL   |
+-----------+-------+------+--------+
10 rows in set (0.00 sec)

修改表记录:

 

			        更新  :修改行中列的数据  使用update 
					 批量修改  (不加筛选条件修改) 
					 命令格式: update  库名.表名   set  字段名 =  值 ,  字段名 =  值 ;

批量修改
mysql> update studb.stuinfo  set age=30,gender="no";
mysql> select  * from studb.stuinfo;
+-----------+-------+------+--------+
| number    | name  | age  | gender |
+-----------+-------+------+--------+
| nsd211101 | bob   |   30 | no     |
| nsd211102 | jim   |   30 | no     |
| nsd211103 | lucy  |   30 | no     |
| nsd211104 | john  |   30 | no     |
| nsd211105 | jerry |   30 | no     |
| nsd211106 | lilei |   30 | no     |
| nsd211107 | NULL  |   30 | no     |
| nsd211101 | bob   |   30 | no     |
| nsd211102 | jim   |   30 | no     |
| nsd211103 | lucy  |   30 | no     |
+-----------+-------+------+--------+
10 rows in set (0.00 sec)


仅修改与条件匹配
mysql> update  studb.stuinfo  set name="bob" where number="nsd211107";

mysql> select  * from studb.stuinfo;
+-----------+-------+------+--------+
| number    | name  | age  | gender |
+-----------+-------+------+--------+
| nsd211101 | bob   |   30 | no     |
| nsd211102 | jim   |   30 | no     |
| nsd211103 | lucy  |   30 | no     |
| nsd211104 | john  |   30 | no     |
| nsd211105 | jerry |   30 | no     |
| nsd211106 | lilei |   30 | no     |
| nsd211107 | bob   |   30 | no     |
| nsd211101 | bob   |   30 | no     |
| nsd211102 | jim   |   30 | no     |
| nsd211103 | lucy  |   30 | no     |
+-----------+-------+------+--------+
10 rows in set (0.00 sec)

删除表记录:

 

删除  : 删除表中行  使用delete 
				
仅删除符合条件的行   (删除命令有筛选条件)  delete   from  库.表  where  筛选条件;


删除表里的所有行(删除命令有筛选条件)       delete   from  库.表;



只删除与条件匹配的行
mysql> delete from  studb.stuinfo where name="bob";
Query OK, 3 rows affected (0.03 sec)

mysql> select  * from studb.stuinfo;
+-----------+-------+------+--------+
| number    | name  | age  | gender |
+-----------+-------+------+--------+
| nsd211102 | jim   |   30 | no     |
| nsd211103 | lucy  |   30 | no     |
| nsd211104 | john  |   30 | no     |
| nsd211105 | jerry |   30 | no     |
| nsd211106 | lilei |   30 | no     |
| nsd211102 | jim   |   30 | no     |
| nsd211103 | lucy  |   30 | no     |
+-----------+-------+------+--------+
7 rows in set (0.00 sec)

删除所有行
mysql> delete from studb.stuinfo;
Query OK, 7 rows affected (0.02 sec)

mysql> select  * from studb.stuinfo;
Empty set (0.00 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值