MySQL表的管理
数据库服务器、数据库、表和记录的关系
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kGGaKpDB-1589891318350)(C:\Users\liuzh\AppData\Roaming\Typora\typora-user-images\1589722528949.png)]
所以我们在MySQL服务器上会存有很多的数据库,在每个数据库下都会有很多的表,在每个表中才会存有具体的数据!
例如我们有个数据库叫 LPL,在库中有个叫hero的表,表中有如下数据:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-msnBoViC-1589891318352)(C:\Users\liuzh\AppData\Roaming\Typora\typora-user-images\1589723776601.png)]
字段和记录
那么在这个表中最顶上的一行,我们称之为字段 ,这个表中一个有3个字段:ID 英雄 职业
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tgnrNwse-1589891318354)(C:\Users\liuzh\AppData\Roaming\Typora\typora-user-images\1589723932654.png)]
字段下面的内容我们称之为记录,一行就是一条记录,表中一共有10条记录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p37TneJB-1589891318356)(C:\Users\liuzh\AppData\Roaming\Typora\typora-user-images\1589723992173.png)]
字段决定了我们每一列所存储数据的类型和约束条件!
比如ID列 我们给他的字段类型就为整型数字,当然我们也可以加上一些约束条件,比如这一列约束为非空,那么就必须要写入一个值!
约束条件不是必须要定义的,但是字段类型必须要定义!
常用的字段类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4kcNVk9N-1589891318359)(C:\Users\liuzh\AppData\Roaming\Typora\typora-user-images\1589724345956.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bajnhjuk-1589891318361)(C:\Users\liuzh\AppData\Roaming\Typora\typora-user-images\1589724350933.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xst6sNMc-1589891318363)(C:\Users\liuzh\AppData\Roaming\Typora\typora-user-images\1589724356544.png)]
常见的字段约束条件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hCO2qHfi-1589891318364)(C:\Users\liuzh\AppData\Roaming\Typora\typora-user-images\1589724383487.png)]
表的基本管理
创建一个表
创建表的语句格式为:
create table 表名(
字段名1 类型 [字段约束],
字段名2 类型 [字段约束],
…
);
我们来创建一个学生的信息表stu,包含内容要有,学号、姓名、性别
-
登录数据库
[root@node-161 ~]# mysql -uroot -pabcd1234 Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.6.10 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
-
创建数据库1801A
mysql> create database 1801A; Query OK, 1 row affected (0.00 sec)
-
进入1801A库中
mysql> use 1801A; Database changed
-
创建stu表
mysql> create table stu( ID int(10),姓名 char(10),性别 char(5)); Query OK, 0 rows affected (0.01 sec)
-
查看表是否被创建成功
mysql> show tables; +-----------------+ | Tables_in_1801A | +-----------------+ | stu | +-----------------+ 1 row in set (0.00 sec)
我们可以看到在1810A库中就一张表stu,这张就是我们刚刚创建的表
-
查一下stu表的结构
mysql> desc stu; +--------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+----------+------+-----+---------+-------+ | ID | int(10) | YES | | NULL | | | 姓名 | char(10) | YES | | NULL | | | 性别 | char(5) | YES | | NULL | | +--------+----------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
重命名一张表
-
语法格式:
alter table 表名 rename [to] 新表名; 或者 rename table 旧表名 to 新表名;
-
例子:
rename table stu to student;
删除一张表
mysql> drop table wg;
向表中插入记录
-
语法格式为:
-
全部列插入数据的方式
insert into 表名 values(字段值1,字段值2,字段值3,..);
-
部分列插入的方式
insert into 表名(字段名1,字段名2,...) values(字段值1,字段值2,..) ;
-
-
向stu表中插入一条记录
mysql> insert into stu values(1001,'周睿杰','男'); Query OK, 1 row affected (0.00 sec) mysql> insert into stu values(1002,'樊玉柱','男');
查询表中的记录
-
查询记录我们都会使用select
select的基本语法格式为:
select 查询字段 from 表名 where 条件;
我们可以用*****来代表所有字段,查询例子如下:
-
查询stu表中所有的字段的数据,就是所有的数据,数据表中数据量比较大的时候,这个会查询很长时间
mysql> select * from stu; +------+-----------+--------+ | ID | 姓名 | 性别 | +------+-----------+--------+ | 1001 | 周睿杰 | 男 | | 1002 | 樊玉柱 | 男 | +------+-----------+--------+ 2 rows in set (0.00 sec)
-
只查询stu表中的姓名和性别
mysql> select 姓名,性别 from stu; +-----------+--------+ | 姓名 | 性别 | +-----------+--------+ | 周睿杰 | 男 | | 樊玉柱 | 男 | +-----------+--------+ 2 rows in set (0.00 sec)
-
表的复制
-
我们在创建一个新的表的时候,也可以直接复制已经存在的表来创建!这样如果有相同结构的表直接复制即可!复制分为两种情况:
-
只复制表结构,不复制内容
create table 新表名 like 旧表名;//只复制表结构不复制数据
-
复制表的结构和内容
create table 新表名 select * from 旧表名;
-
修改表结构
-
我们知道通过desc语句可以查看一张表的结构,例如查看stu表的结构
mysql> desc stu; +--------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+----------+------+-----+---------+-------+ | ID | int(10) | YES | | NULL | | | 姓名 | char(10) | YES | | NULL | | | 性别 | char(5) | YES | | NULL | | +--------+----------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
-
通过查询我们可以看到一张表有几个字段,字段的类型和约束条件有哪些等信息!如果我们修改应该如何操作!
-
增加一个字段
-
语法格式
alter table 表名 add 字段名 字段类型 [after 列名];
-
给stu表增加一个年龄字段
mysql> alter table stu add 年龄 int(3) after 性别; Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0
-
-
删除一个字段(删除一整列数据)
-
语法格式:
alter table 表名 drop 字段名;
-
-
修改一个字段的类型和约束条件
-
语法格式:
alter table 表名 modify字段名 新字段类型;
-
更改ID字段类型为varchar(8)
mysql> alter table stu modify ID varchar(8); Query OK, 2 rows affected (0.08 sec) Records: 2 Duplicates: 0 Warnings: 0
-
-
给字段中重命名
-
语法格式:
alter table 表名 change 旧字段名 新字段名 字段类型;
-
更改ID 字段名为学号
mysql> alter table stu change ID 学号 varchar(8); Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0
-
-
查询表结构
更改后的表结构如下
mysql> desc stu; +--------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+------------+------+-----+---------+-------+ | 学号 | varchar(8) | YES | | NULL | | | 姓名 | char(10) | YES | | NULL | | | 性别 | char(5) | YES | | NULL | | | 年龄 | int(3) | YES | | NULL | | +--------+------------+------+-----+---------+-------+
更改记录的数据,我们在查询stu表的时候,发现年龄这一列为空!我们单独来增加数据,需要用到updatae语句
-
查询条件where
- 我们大多时候在查询的时候都需要做筛选,我们只需要查看符合条件的信息!例如查询所有河北的学生有哪些?年龄18岁以上的有哪些?甚至还有一些简单的统计例如 男生有多少个?女生有多少个?
这些都称之为查询条件,我们只获取满足条件的数据,这就要用到where语句
-
基本语法格式:
select 查询字段 from 表名 where 条件;