表
1.创建
create [temporary] table [if not exists] 表名 (字段名 字符类型 [字段属性]...)[表选项]
- temporary-表示临时表,仅在此会话中出现,关闭就会自动删除
- 字段名-就是数据表的列名
- 字符类型就是字段中保存的数据类型
- 字段属性-就是约束条件
创建MySQL数据表需要以下信息:
- 表名
- 表字段名
- 定义每个表字段
以下为创建MySQL数据表的SQL通用语法:
CREATE TABLE table_name (column_name column_type);
实例:
以下例子中我们将在 RUNOOB 数据库中创建数据表runoob_tbl:
CREATE TABLE IF NOT EXISTS `runoob_tbl`( `runoob_id` INT UNSIGNED AUTO_INCREMENT, `runoob_title` VARCHAR(100) NOT NULL, `runoob_author` VARCHAR(40) NOT NULL, `submission_date` DATE, PRIMARY KEY ( `runoob_id` ) )ENGINE=InnoDB DEFAULT CHARSET=utf8;
实例解析:
- 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
- AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
- PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
- ENGINE 设置存储引擎,CHARSET 设置编码。
2.查看
语法: SHOW TABLES [ LIKE 匹配模式];
匹配模式符:
1. “%” -----匹配一个或多个,任意长度字符串 2. “_” -----只能匹配一个字符 注意:匹配模式必须用单引号和双引号包裹
# 为一个叫mydb数据库再添加一张数据表new_goods CREATE TABLE new_goods ( id INT COMMENT '编号', name VARCHAR(32) COMMENT '商品名', price INT COMMENT '价格', description VARCHAR(255) COMMENT '商品描述' );
# ①查看所有数据表 SHOW TABLES;
# ② 查看名称中含有new的数据表 SHOW TABLES LIKE '%new%';
查看信息
# 查看叫mydb数据库下含有new的数据表的详细信息 SHOW TABLE STATUS FROM mydb LIKE '%new%'\G
注意:\G 在MySQL中才有用哦
查看结构
1.查看字段
语法1查看所有字段: DESC 数据表名; 语法2查看所选字段: DESC 数据表名 字段名;
# ① 所有字段 DESC my_goods; # ② name字段 DESC my_goods name;
2.查看表的创建语句
语法: SHOW CREATE TABLE 表名;
# 查看my_goods数据表的创建语句 SHOW CREATE TABLE my_goods \G
3.查看表的结构
语法1: SHOW [ FULL] COLUMNS FROM 数据表名 [FROM 数据库名]; 语法2: SHOW [ FULL] COLUMNS FROM 数据库名.数据表名;
# 查看my_goods数据表结构的详细信息 SHOW FULL COLUMNS FROM my_goods;
可选项FULL表示显示详细内容,添加后可以看到DESC语句所查看的也可以查看到字段权限、COMMENT字段的注释信息等。
通过命令提示符创建表
通过 mysql> 命令窗口可以很简单的创建MySQL数据表。你可以使用 SQL 语句 CREATE TABLE 来创建数据表。
实例
以下为创建数据表 runoob_tb1实例:
root@host# mysql -u root -p Enter password:******* mysql> use RUNOOB; Database changed mysql> CREATE TABLE runoob_tbl( runoob_id INT NOT NULL AUTO_INCREMENT, runoob_title VARCHAR(100) NOT NULL, runoob_author VARCHAR(40) NOT NULL, submission_date DATE, PRIMARY KEY ( runoob_id ) )ENGINE=InnoDB DEFAULT CHARSET=utf8; Query OK, 0 rows affected (0.16 sec) mysql>
注意: MySQL命令终止符为分号 ; 。
注意:-> 是换行符标识,不要复制。
实例:
#1.创建mydb库 create database mydb; #2.选择数据库 use mydb; #3.创建goods数据表 create table goods( id int comment'编号', name varchar(32) comment '商品名', price int comment '价格', description varchar(255) comment '商品属性' );
注意
- 使用数据表时可以用 use库名 指定操作的数据库,否则抛出No database selected的错误(不是必须使用use 库名)当然也可以使用库名.表名的形式。
# 省略②,修改③创建goods数据表 CREATE TABLE mydb.goods ( id INT COMMENT '编号', name VARCHAR(32) COMMENT '商品名', price INT COMMENT '价格', description VARCHAR(255) COMMENT '商品描述' );
语法1: ALTER TABLE 旧表名 RENAME [ TO|AS ] 新表名; 语法2: RENAME TABLE 旧表名 1 TO 新表名 1[,旧表名 2 TO 新表名 2 ]...
# 将new_goods表的名称修改为my_goods RENAME TABLE new_goods TO my_goods; # 查看所有数据表 SHOW TABLES;
修改表选项
语法: ALTER TABLE 表名 表选项 [=] 值;
# ① 将my_goods数据表的字符集改为utf8 ALTER TABLE my_goods CHARSET = utf8; # ② 查看修改结果 SHOW CREATE TABLE my_goods \G
修改结构
1.修改字段名
语法:ALTER TABLE 数据表名 CHANGE[COLUMN] 旧字段名 新字段名 字段类型 [字段属性];
# ① 将my_goods数据表中名为description的字段修改为des ALTER TABLE my_goods CHANGE description des VARCHAR(255); # ② 查看字段名的修改情况 DESC my_goods;
2.修改字段类型
语法:ALTER TABLE 数据表名 MODIFY [COLUMN] 字段名 新类型 [字段属性];
ALTER TABLE my_goods MODIFY des CHAR(255); # ② 查看字段类型的修改情况 DESC my_goods des;
3.修改字段位置
语法:ALTER TABLE 数据表名 MODIFY [COLUMN] 字段名1 数据类型 [字段属性] [FIRST | AFTER 字段名2];
# ① 将my_goods表中最后一个字段des移动到name字段后 ALTER TABLE my_goods MODIFY des VARCHAR(255) AFTER name; # ② 查看字段位置的修改结果 DESC my_goods;
4.新增字段
语法: ALTER TABLE 数据表名 ADD [COLUMN] (新字段名1 字段类型1,新字段名2 字段类型2,...)
# ① 在my_goods数据表中字段name后新增一个num字段,表示商品的数量 ALTER TABLE my_goods ADD num INT AFTER name; # ② 查看新增的字段 DESC my_goods;
5.删除字段
ALTER TABLE 数据表名 DROP [COLUMN] 字段名;
# ① 删除my_goods数据表中num字段 ALTER TABLE my_goods DROP num; # ② 看删除num字段后数据表中的字段 DESC my_goods;
4.删除
语法:DROP [TEMPORARY] TABLE [IF EXISTS] 数据表1 [, 数据表2] ...;
# 删除数据表my_goods DROP TABLE IF EXISTS my_goods;
删除数据表是非常容易操作的, 但是你在进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。
命令提示窗口中删除数据表
在mysql>命令提示窗口中删除数据表SQL语句为 DROP TABLE :
以下实例删除了数据表runoob_tbl:
mysql> use RUNOOB; Database changed mysql> DROP TABLE runoob_tbl Query OK, 0 rows affected (0.8 sec) mysql>