赞
踩
在上一章节我们学习了数据库的建立,我们建立一个属于自己的数据库,并且学会了切换默认数据库。这一章节我们就可以开始学习创建真正储存数据的表了。
*展示数据库中的表:
语法:show tables from 数据库名;
当然如果我们直接输入show tables,就会直接展示默认数据库中的表。
*创建表
创建一个表时,我们需要完成以下一些操作(表的定义/表的结构):
1.给表取一个名字;
2.给表定义一些列,并且给这些列都起一个名;
3.每一列都定义一种数据类型
4.如果有需要,给相应的列定义相应的属性,比如要设置一个默认值等等。
语法:
create table 表名(
列名1 数据类型 【列的属性】,
列名2 数据类型 【列的属性】,
。。。
列明n 数据类型 【列的属性】
);
下面给大家展示一下简单的创建一个表:
mysql> create table first_table(
-> first_column INT,
-> second_column VARCHAR(100)
-> )COMMENT '第一个表'; //这里是对于表的注释,因为在数据库的管理中当别人或者自己要看一个表时,为了方便,添加注释是一个好的习惯。
Query OK, 0 rows affected (0.02 sec)
mysql> show tables
-> ;
+---------------+
| Tables_in_zrt |
+---------------+
| first_table |
+---------------+
1 row in set (0.00 sec)
创建现实生活中的表,这里我们引用书中的例子。
成果展示:
mysql> create table student_info(
-> number INT,
-> name VARCHAR(5),
-> sex ENUM('男', '女'),
-> id_number CHAR(18),
-> department VARCHAR(30),
-> major VARCHAR(30),
-> enrollment_time DATE
-> )COMMENT '学生基本信息表';
Query OK, 0 rows affected (0.04 sec)
mysql> create table stu_socre(
-> num INT,
-> sub VARCHAR(30),
-> score TINYINT
-> )COMMENT '学生成绩单';
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+---------------+
| Tables_in_zrt |
+---------------+
| first_table |
| stu_socre |
| student_info |
+---------------+
3 rows in set (0.00 sec)
IF NOT EXISTS:
和创建数据库一样,如果不知道有没有创建,我么一样可以用一个if语句来实现。
语法:
create table if not exists 表名
*删除表
语法:drop table 表名;
同样不知道存不存在可以用一个if exists
语法:drop table if exists 表名;
有时候我们可能忘记自己定义的表的结构,此时可以使用下面的语句来查看:
DESCRIBE 表名;
DESC 表名;
EXPLAIN 表名;
SHOW COLUMNS FROM 表名;
SHOW FIELDS FROM 表名;
比如:
mysql> DESC student_info;
+-----------------+-----------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-----------------+------+-----+---------+-------+
| number | int | YES | | NULL | |
| name | varchar(5) | YES | | NULL | |
| sex | enum('男','女') | YES | | NULL | |
| id_number | char(18) | YES | | NULL | |
| department | varchar(30) | YES | | NULL | |
| major | varchar(30) | YES | | NULL | |
| enrollment_time | date | YES | | NULL | |
+-----------------+-----------------+------+-----+---------+-------+
7 rows in set (0.01 sec)
*直接使用某个数据库中的某个表
我们在上面的操作中我们都是提前设置了默认数据库,也就是使用了use zrt 这个数据库。但如果在没有使用默认数据库的情况下我们又要怎么办呢。其实mysql服务器在运行的过程中是在默认的数据库下寻找给定表名的表,并进行操作。我们没有设置默认数据库的情况下我们就可以在表名前加上相应的数据库名。然后在数据库和表名之间使用(.)分隔开就好了。
比如这样:
show create table zrt.first_table;
*修改表:
创建好表后相对表内进行删改,就要用到这些操作。
1.修改表名:
ALTER TABLE 旧表名 RENAME TO 新表名;
mysql> alter table first_table rename to first_table1;
Query OK, 0 rows affected (0.02 sec)
我们把表名简单修改一下。
看下效果:
mysql> show tables
-> ;
+---------------+
| Tables_in_zrt |
+---------------+
| first_table1 |
| stu_socre |
| student_info |
+---------------+
3 rows in set (0.00 sec)
也可以rename table 旧表名1 to 新表名1,旧表名2 to 新表名2......;
这个好处就是可以一次性多修改一些。
如果在修改表名的时候指定了数据库名,还可以将该表转移到对应的数据库下。比如我们创建一个新的数据库zrt2;就可以
alter table first_table1 rename to zrt2.first_table1;
*增加列
语法:alter table 表名 add column 列名 数据类型 【列的属性】;
mysql> ALTER TABLE first_table1 add column third_column CHAR(4);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC first_table1;
+---------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| first_column | int | YES | | NULL | |
| second_column | varchar(100) | YES | | NULL | |
| third_column | char(4) | YES | | NULL | |
+---------------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
在默认情况下新增的列都会排在最后面,如果要指定位置,我们可以这么写:
alter table first_table1 add column third_column char(4) FIRST;
这样就是插入在第一列。
这个FIRST 也可以换成一个列的名字,这样插入位置就是这一指定列的后面。
*删除列:
语法:alter table 表名 drop column 列名;
mysql> alter table first_table1 drop column third_column;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show
-> tables
-> ;
+---------------+
| Tables_in_zrt |
+---------------+
| first_table1 |
| stu_socre |
| student_info |
+---------------+
3 rows in set (0.00 sec)
mysql> DESC first_table1;
+---------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| first_column | int | YES | | NULL | |
| second_column | varchar(100) | YES | | NULL | |
+---------------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
*修改列信息
方式1:
alter table 表名 modify 列名 新数据类型 【新属性】;
mysql> alter table first_table1 modify first_column VARCHAR(2);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc first_table1;
+---------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| first_column | varchar(2) | YES | | NULL | |
| second_column | varchar(100) | YES | | NULL | |
+---------------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
修改的时候要注意,修改后的数据类型一定要兼容表中现有的数据。也就是比如一开始是varchar(100),然后这一列中保存的是'aaa',但这个时候你把varchar(100)修改成varchar(2)就会报错;
方式2:
alter table 表名 change 旧列名 新列名 新数据类型 【新属性】;
可以看到这个修改类型与此同时的还可以修改列的名字。这是一个很好的操作。
修改列的排列位置:
如果我们觉得当前列的位置有问题,可以使用下面的语句进行修改。
alter table 表名modify 列名 列的类型 列的属性 FIRST;
同样和修改表名一样把FIRST换成列的名字,就可以使得这个列排到指定列的后面去。
一条语句包含多个修改操作:
alter table 表名 操作1, 操作2, ......;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。