创建表:
格式:
create table 表名(表选项)
表定义选项格式为:
列名1 列类型1 约束, 列名2 列类型2 约束,……
默认的情况是,表被创建到当前的数据库中。若表已存在、没有当前数据库或者数据库不存在,则会出现错误
使用 crate table 创建表时,必须指定以下信息:
要创建的表的名称不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INSER等。
必须指定数据表中每个列(字段)的名称和数据类型,如果创建多个列,要用逗号隔开
示例1:创建数据库并新建表
数据表属于数据库,在创建数据表之前,应使用语句“use <数据库>”指定操作在哪个数据库中进行,如果没有选择数据库,就会抛出 No database selected 的错误
mysql> select database(); # 查看当前数据库
mysql> create database mydb2_stuinfo; # 创建数据库
Query OK, 1 row affected (0.02 sec)
mysql> use mydb2_stuinfo; # 使用数据库
Database changed
mysql> create table student1(id int, name varchar(30), sex char(2), age int unsigned, score float, addr varchar(50));
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+-------------------------+
| Tables_in_mydb2_stuinfo |
查看表:
show语句:显示当前数据库中已有的数据表
格式:show table [from 数据库名] [like wild]
describe语句:查看数据表中各列的信息
格式:{describe|desc}表名[列名]; # or show columns from 表名称;
mysql> desc student1;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int unsigned | YES | | NULL | |
| score | float | YES | | NULL | |
| addr | varchar(50) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
mysql> show columns from student1;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int unsigned | YES | | NULL | |
| score | float | YES | | NULL | |
| addr | varchar(50) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
字段意义分析:
Field :字段名称
type:字段类型
null:是否允许为空
key:索引类型
default:默认值
extra:填充
使用\G可以查看更全面的表定义信息:
删除表
格式: drop table [if exists] 表名:
注意:
用户必须拥有执行 drop table 命令的权限,否则数据表不会被删除
推荐使用if exists字句,即先判断是否存在,存在则删除,如:
mysql> drop table if exists tb1;
Query OK, 0 rows affected (0.01 sec)
修改表:
更改表名(重命名):
语法1:
alter table 表名 rename 新表名;
语法2:
rename table 表名 to 新表名;
添加新列:
alter table 表名 add 新列名 列类型 [after|first] 列名;
# after:在指定列之后插入新列
# first:在第一列插入新列
# 注意:无before关键字
例:增加一列password
mysql> alter table student1 add password char(8);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
# 注意:数据库操作后得到的反馈,表明操作的结果。这个信息表示:
Records: 2: 表示成功导入或处理的记录总数是2条。
Duplicates: 0: 表示在操作过程中没有发现重复的记录。
Warnings: 0: 表示在操作过程中没有产生任何警告。
删除列:
格式:alter table 表名 drop 列名;
修改列名:
格式: alter table 表名 change 旧列名 新列名 列类型;
修改列类型:
格式:alter table 表名 modifyn 列名 列类型;
修改列位置:
格式:alter table 表名 modify 列名 列类型 after 某列;
复制表的结构:
方法一:在create table语句的末尾添加like子句,可以将源表的表结构复制到新表中,语法格式如下:
create table 新表名 like 源表 #(结构)
方法二:在create table语句的末尾添加一个select语句,可以实现表结构的复制,甚至可以将源表的表记录拷贝到新表中,下面的语法格式将源表的结构和记录都拷贝到新表中:
create table 新表名 select * from 源表 #(结构和内容)
方法三:如果已经存在一张结构一致的表,复制数据:
insert into 表名 select * from 来源表; #(同结构和类型可以插入数据)
数据库字典
数据字典:类似于系统编目或花名册,它保存数据库服务器上的元数据信息(数据库的整体属性信息)
元数据(meta data):即“data about data” 关于数据的数据,理解为描述数据的数据,内容包括:数据库的属性信息、数据表的属性信息、字段的属性信息、视图的属性信息、用户信息、统计类信息等。
information_schema数据库是MySQL系统自带的数据库,它提供了数据库元数据的访问方式
show databases;
+--------------------+
| information_schema |
| mydb1_test |
| mydb2_stuinfo |
| mydb3_employee |
| mydb4_product |
| mysql |
| performance_schema |
| sys |
+--------------------+
8 rows in set (0.00 sec)
information_schema就像是MySQL实例的一个百科全书,记录了数据库当中大部分我们需要了结的信息,比如字符集,权限相关,数据库实体对象信息,外检约束,分区,压缩表,表信息,索引信息,参数,优化,锁和事物等等。
通过information_schema我们可以窥透整个MySQL实例的运行情况,可以了结MySQL实例的基本信息,甚至优化调优,维护数据库等,可以说是真正的一部百科全书。
mysql> use information_schema ;
mysql> show tables;
# 常用表解释
tables-存放数据库里所有的数据表、以及每个表所在数据库。
schemata-存放数据库里所有的数据库信息
views-存放数据库里所有的视图信息。
columns-存放数据库里所有的列信息。
triggers-存放数据库里所有的触发器。
routines-存放数据库里所有存储过程和函数。
key_column_usage-存放数据库所有的主外键
table_constraints-存放数据库全部约束。
statistics-存放了数据表的索引。
……
删除的注意事项:
1.删除数据库表之前,一定要备份数据,以免数据丢失。
2.在删除数据库表之前,要确保该表没有被其他的表所引用,否则可能会破坏外键约束。
3.在删除数据库表之前,要确保该表的数据已经备份,并且不再需要使用。
4.在删除数据库表之前,要确保该表的数据已经被清空,否则会破坏外键约束。
5.在删除数据库表之前,要确保该表的所有索引都已经被删除。如果还存在索引,可能会导致删除失败。
6.在删除数据库表之前,要确保该表的所有相关程序已经停止运行,以免影响其他程序的正常运行。