数据表管理
如果将数据库管理系统与之前的文件管理系统做类比的话:
数据库管理系统 | 文件管理系统 |
---|---|
数据库 | 文件夹 |
数据表 | 文件夹下的文件 |
数据表的常见操作指令
-
进入数据库
use 数据库
,查看当前所有表:show tables
-
创建表结构
id name email age 创建表的基础语句
create table t1 ( id int , name varchar(16), email varchar(32), age int) default charset=utf8;
null,not null 属性
create table t2( id int, name varchar(16) not null, -- 不可以为空 email varchar(32) null, -- 数据可以为空 age int) default charset=utf8;
设置列的默认值
create table t3( id int, name varchar(16) not null, --不可以为空 email varchar(18) null, --数据可以为空 age int default 18 --设置数据的默认值为18,如果没有数据插入的情况这列的数据为18 )default charset=utf8;
主键的要求:
- 主键不能重复出现 - 不能为空 - 一个表中只能有一个主键
主键的作用:
- 加快查询的速度 - 提高数据的完整性和安全性
设置主键一般用于表示当前这个条数据的id标号(类似于人的身份证号),需要我们自己维护一个不重复的的值,比较繁琐,所以在数据库中,一般会自增和主键会结合
create table t4( id int not null auto_increment primary key, name varchar(16) not null, email varchar(32) null, age int default 18 ) default charset=utf8;
主要一个表只能有一个自增列[自增列一般为主键]
-
删除表:
drop table 表名
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1 |
| t2 |
| t4 |
| test |
+----------------+
4 rows in set (0.00 sec)
mysql> drop table test;
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1 |
| t2 |
| t4 |
+----------------+
3 rows in set (0.00 sec)
清空数据:delete from 数据表名
或者truncate table 表名
(删除的速度快但是无法进行回滚和撤销等)
修改表:
-
添加列
alter table 表名 add 列名 数据类型; alter table 表名 add 列名 数据类型 default 默认值; alter table 表名 add 列名 数据类型 not null default 默认值; alter table 表名 add 列名 数据类型 not null primary key auto_increment;
示例:
desc 查看表结构
mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(16) | YES | | NULL | |
| email | varchar(32) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> alter table t1 add pwd varchar(16) not null default '123456';
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(16) | YES | | NULL | |
| email | varchar(32) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| pwd | varchar(16) | NO | | 123456 | |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
- 删除列
alter table 表名 drop column 列名;
示例:
mysql> alter table t1 drop pwd;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(16) | YES | | NULL | |
| email | varchar(32) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
- 修改列的数据类型
alter table 表名 modify column 列名 原数据类型 新数据类型;
示例
mysql> alter table t1 modify column age varchar(8);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(16) | YES | | NULL | |
| email | varchar(32) | YES | | NULL | |
| age | varchar(8) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
- 修改表的列名和数据类型
alter table 表名 change 原列名 新列名 数据类型;
mysql> alter table t1 change email em varchar(16) null default 0;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(16) | YES | | NULL | |
| em | varchar(16) | YES | | 0 | |
| age | varchar(8) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
-- 需要注意这个操作相当于把id列的主键和非空的约束去除掉了
mysql> alter table t1 change id id int;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(16) | YES | | NULL | |
| em | varchar(16) | YES | | 0 | |
| age | varchar(8) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
修改列的默认值
alter table 表名 alter 列名 set defalut 默认值;
mysql> alter table t1 alter em set default 100;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(16) | YES | | NULL | |
| em | varchar(16) | YES | | 100 | |
| age | varchar(8) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
删除默认值
alter table 表名 alter 列名 drop default;
mysql> alter table t1 alter em drop default;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(16) | YES | | NULL | |
| em | varchar(16) | YES | | NULL | |
| age | varchar(8) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)