129 MySQL表操作

Posted xichenhome

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了129 MySQL表操作相关的知识,希望对你有一定的参考价值。

一、表介绍

表就相当于时文件,表中的一条记录就相当于文件的一行内容,不同的是表中的一条记录有对应的标题,称之为表的字段

例子:有一个名为student的文件

id,name,age,sex , course

1 , 张三,17,男,语文

2,李四,18,男,英语

3,王二,19,女,数学

4 刘一 ,18 ,女, 化学

现在我们把上面的文件改为一个表的话,应该是下面的样子

id name age sex course
1 张三 17 语文
2 李四 18 英语
3 王二 19 数学
4 刘一 18 化学

id,name,age,sex,course 称之为上面表的字段,其余的一行内容称之为是一条记录

二、创建表

2.1 语法

create table [数据库名.]表名(字段名1 类型[(宽度) 约束条件],字段名2 类型[(宽度) 约束条件],字段名1 类型[(宽度) 约束条件]);
  • 在同一表中,不能有相同的字段名
  • 宽度和约束条件是可选的
  • 字段名和类型是必须要有的

2.2建表

1.先建一个库mydb
create database mydb; 使用默认字符编码的

2.打开这个mydb数据库,在这个库里创建表t1
use mydb;
create table tb1(id int(1),name varchar(10),age int(2),sex varchar(2),course varchar(8))

# 2.可以不打开表直接在mydb这个库里直接创建表t1
# create table mydb.tb1(id int,name varchar,age int,sex   char,course char);

3.创建表以后显示mydb库里面的所有表
show tables;

4.查看表t1的结构
desc t1;

5.查看表t1中的所有记录
select * from [数据库名.]t1;

6.查看表t1中某个字段的数据
select id,name,age,sex,course from t1;

##################################  cmd终端运行  ##########################################
mysql> create database mydb;
Query OK, 1 row affected (0.00 sec)

mysql> use mydb;
Database changed
mysql> create table t1 (id int(1),name varchar(10),age int(2),sex varchar(2),course varchar(8));
Query OK, 0 rows affected (0.37 sec)

mysql> show tables;
+----------------+
| Tables_in_mydb |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)

mysql> desc t1;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(1)      | YES  |     | NULL    |       |
| name   | varchar(10) | YES  |     | NULL    |       |
| age    | int(2)      | YES  |     | NULL    |       |
| sex    | varchar(2)  | YES  |     | NULL    |       |
| course | varchar(8)  | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
5 rows in set (0.02 sec)

mysql> select * from t1;
Empty set (0.00 sec)

mysql> select id,name,age,sex,course from t1;
Empty set (0.00 sec)

########################################## end ########################################

三、表中插入数据

3.1 语法

insert [into] [数据库名.]表名[(字段名1,字段名2,字段名3····)] values(字段对应的值)
  • 插入数据时,一条数据的每一个字段都要和最开始创建表时的字段对应
  • 并且输入的数据要和字段的约束类型一致
  • 中括号的字段名是可选的

3.2 插数据

1.在当前数据库时后表插入一条数据,加中括号带字段名的(可省略数据库名.)
use mydb;
insert into t1 (id,name,age,sex,course) values(1,'xichen',18,'女','语文');

2.不在当前数据库的时候,t1表插入一条数据(记录)
insert into mydb.t1(id,name,age,sex,course) values(2,'chen',19,'女','数学');

3.省略字段名,向表t1中添加一条数据
insert into t1 values(3,'xixi',19,'男','数学');

4.一次性向表中添加多条数据
insert into t1 values(4,'haha',19,'女','语文'),
                     (5,'lele',19,'男','英语'),
                     (6,'dada',20,'男','数学');
        
        
        
##################################### cmd ############################################### 
        
mysql> use mydb;
Database changed
mysql> insert into t1(id,name,age,sex,course) values(1,'xichen',18,'女','语文');
Query OK, 1 row affected, 2 warnings (0.06 sec)

mysql> insert into mydb.t1(id,name,age,sex,course) values (2,'chen',19,'女','数学');
Query OK, 1 row affected, 2 warnings (0.13 sec)

mysql> insert into t1 values(3,'xixi',19,'男','数学');
Query OK, 1 row affected, 2 warnings (0.13 sec)

mysql> insert into t1 values(4,'haha',19,'女','英语'),(5,'lele',19,'男','语文'),(6,'dada',20,'男','数学');
Query OK, 3 rows affected, 6 warnings (0.13 sec)
Records: 3  Duplicates: 0  Warnings: 6
mysql> select * from t1;
+------+--------+------+------+--------+
| id   | name   | age  | sex  | course |
+------+--------+------+------+--------+
|    1 | xichen |   18 | 女   | 语文   |
|    2 | chen   |   19 | 女   | 数学   |
|    3 | xixi   |   19 | 男   | 数学   |
|    4 | haha   |   19 | 女   | 语文   |
|    5 | lele   |   19 | 男   | 英文   |
|    6 | dada   |   20 | 男   | 数学   |
+------+--------+------+------+--------+
6 rows in set (0.00 sec)
######################################  end #############################################

四、查看表的结构

4.1 语法

1. desc [tablename]; 可以查看当前表的结构
虽然desc 方法可以查看当前表的结构,但是他输出的信息还不够全面
2.show creat table 表名[\G];
得到更全面的表定义信息,除了可以看到表定义之外,还可以看到engine(存储引擎)和charset(字符集)等信息。(\G选项的含义是是的记录能够竖向排列,以便更好的显示内容较长的记录。)

4.2 使用desc/show create table

1.显示t1表的结构(desc t1;)
2.显示创建表定义的表结构(show create table t1;)
3.以树状形式显示表的机构(show create table t1\G;)
######################################### cmd ###########################################
mysql> desc t1;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(1)      | YES  |     | NULL    |       |
| name   | varchar(10) | YES  |     | NULL    |       |
| age    | int(2)      | YES  |     | NULL    |       |
| sex    | char(2)     | YES  |     | NULL    |       |
| course | char(10)    | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
5 rows in set (0.02 sec)

mysql> show create table t1;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t1    | CREATE TABLE `t1` (
  `id` int(1) DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL,
  `age` int(2) DEFAULT NULL,
  `sex` char(2) CHARACTER SET utf8 DEFAULT NULL,
  `course` char(10) CHARACTER SET utf8 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show create table t1\G;
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int(1) DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL,
  `age` int(2) DEFAULT NULL,
  `sex` char(2) CHARACTER SET utf8 DEFAULT NULL,
  `course` char(10) CHARACTER SET utf8 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

ERROR:
No query specified
###################################### end ##############################################

五、修改表的结构

5.1 语法

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 字段名  数据类型 [完整性约束条件…]  frist;
alter table 表名 add 字段名  数据类型 [完整性约束条件…]  after 字段名;
alter table 表名 change 字段名  旧字段名 新字段名 新数据类型 [完整性约束条件…] frist;
alter table 表名 modify 字段名  数据类型 [完整性约束条件…]  after 字段名;

5.2 使用

1.将t1表名改为t2
alter table t1 rename t2;

2.向t2表中增加hobby字段
alter table t2 add hobby char(8);

3.删除t2表中的hobby字段
alter table t2 drop hobby;

4.把t2表中的course字段的宽度
alter table t2 modify course char(8);

5. 把t2表中的course字段改为class
alter table t2 change course class char(20)

6.把t2表的age字段放在sex字段后
alter table t2 modify age int(2) after sex;


########################################### cmd #########################################
mysql> alter table t1 rename t2;
Query OK, 0 rows affected (1.10 sec)
mysql> alter table t2 add hobby char(8) character set 'utf8';
Query OK, 0 rows affected (0.70 sec)
mysql> alter table t2 drop hobby;
Query OK, 0 rows affected (0.56 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> alter table t2 modify course char(8);
Query OK, 5 rows affected, 5 warnings (0.97 sec)
Records: 5  Duplicates: 0  Warnings: 5
mysql> alter table t2 change course class char(20) character set 'utf8';
Query OK, 5 rows affected (0.94 sec)
Records: 5  Duplicates: 0  Warnings: 0
mysql> select * from t2;
+------+--------+------+------+-------+
| id   | name   | age  | sex  | class |
+------+--------+------+------+-------+
|    1 | xichen |   18 | 女   | ??    |
|    2 | chen   |   19 | 女   | ??    |
|    3 | xixi   |   19 | 男   | ??    |
|    4 | haha   |   19 | 女   | ??    |
|    6 | dada   |   20 | 男   | ??    |
+------+--------+------+------+-------+
5 rows in set (0.00 sec)
mysql> alter table t2 modify age int(2) after sex;
Query OK, 0 rows affected (0.69 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t2;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(1)      | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
| sex   | char(2)     | YES  |     | NULL    |       |
| age   | int(2)      | YES  |     | NULL    |       |
| class | char(20)    | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.02 sec)
####################################### end #############################################

六、删除表

drop table 表名;

以上是关于129 MySQL表操作的主要内容,如果未能解决你的问题,请参考以下文章

Mysql 主从配置

mysql 数据操作 多表查询 目录

1029 MySQL操作表 MySQL操作表数据行

mysql表操作

MySQL之简介及基础操作

Python/MySQL表操作以及连接