MySQL 数据表操作
MySQL 数据表操作
数据表操作
每一张数据表都相当于一个文件,在数据表中又分为表结构与表记录。
表结构:包括存储引擎,字段,主外键类型,约束性条件,字符编码等;
表记录:数据表中的每一行数据(不包含字段行);
创建数据表
创建数据表其实大有讲究,它包括表名称,表字段,存储引擎,主外键类型,约束性条件,字符编码等。
如果InnoDB数据表没有创建主键,那么MySQL会自动创建一个以行号为准的隐藏主键。
-
语法
CREATE TABLE [IF NOT EXISTS] 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] ) [chrset="字符编码"];
Tips
IF NOT EXISTS
判断数据库是否存在,不存在则创建数据;存在则忽略创建语句,不再创建数据库;- 在同一张表中,字段名是不能相同;
- 宽度和约束条件可选;
- 字段名和类型是必须的;
- 表中最后一个字段不要加逗号;
- 也可以不进入数据库在外部或另外的库中进行创建,那么创建时就应该指定数据库;
查看数据表
-
查看所有表
SHOW TABLES [FROM db_name];
-
查看表结构(字段, 类型, 约束条件等)
-
SQL 1
DESC table_name;
-
SQL 2
SHOW COLUMNS FROM table_name;
-
-
查看表创建信息
SHOW CREATE TABLE table_name;
-
数据库命令
-
进入数据库
USE db_name;
-
查看当前所在数据库
SELECT DATABASE();
-
修改表名字
-
SQL 1
RENAME TABLE old_table TO new_table;
-
SQL 2
ALTER TABLE old_table RENAME AS new_table;
清空数据表
-
截断表
TRUNCATE TABLE table_name;
-
清空表
DELETE FROM table_name;
Tips:
- 都可以实现对表中所有数据的删除,同时保留表结构;
TRUNCATE TABLE
: 表数据全部清除; 数据是不可以回滚的;DELETE FROM
: 表数据可以全部清除; 数据是可以实现回滚的;
删除数据表
-
单表删除
DROP TABLE [IF EXISTS] table_name;
-
批量删除
DROP TABLES table_name table_name2, ...;
Tips:
IF EXISTS
判断当前数据库中是否存在该表,存在则删除数据表;不存在则忽略删除语句,不再执行删除数据表的操作;- 删除
表数据
和表结构
,且释放表空间;
复制表操作
结构复制
CREATE TABLE table_name LIKE temp_table_name;
全部复制(不会复制主键,外键,索引)
CREATE TABLE table_name [AS] SELECT * FROM temp_table_name [WHERE 1<>1];
Tips: where条件用来筛选数据,WHERE 1<>1
表示只复制表结构;
选择复制
CREATE TABLE table_name SELECT field1,field2... FROM temp_table_name;
表字段操作
表字段是属于表结构的一部分,可以将他作为文档的标题。
其标题下的一行均属于当前字段下的数据。
新增字段
-
增加多个字段
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…], ADD 字段名 数据类型 [完整性约束条件…];
-
增加单个字段,排在最前面
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] FIRST;
-
增加单个字段,排在某一字段后面
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
修改字段
修改字段分为修改
字段名
或者修改其数据类型
-
RENAME
只改表字段名ALTER TABLE 表名 RENAME COLUMN 旧字段名 TO 新字段名;
-
MODIFY
只能修改 -数据类型- 及其 -完整性约束条件-ALTER TABLE 表名 MODIFY 字段名 新数据类型 [完整性约束条件…];
-
CHANGE
能修改 -字段名-、-数据类型- 及其 -完整性约束条件--
SQL 1
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
-
SQL 2
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
-
删除字段
ALTER TABLE table_name DROP [COLUMN] field_name;
Via