MySQL/mariadb知识点——操作篇(3)表管理语句

创建表
方法一:直接创建
CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,...)
示例:
MariaDB [testdb]> CREATE TABLE IF NOT EXISTS students (id TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,name VARCHAR(30) NOT NULL,phone CHAR(11),gender ENUM('M','F'));
方法二:通过查询现存表创建,新表会被直接插入查询来的数据
CREATE TABLE [IF NOT EXISTS] tbl_name select_statement
示例:
MariaDB [testdb]> CREATE TABLE user SELECT user,host,password FROM mysql.user;
如果只想模仿查询旧表创建一个无记录的表,加入如下条件即可;
where 0=1;
示例:
MariaDB [testdb]> CREATE TABLE user2 SELECT user,host,password FROM mysql.user WHERE 0=1;
方法三:通过复制现存表的表结构创建,但不复制数据
CREATE TABLE [IF NOT EXISTS] tbl_name LIKE old_tbl_name
MariaDB [testdb]> CREATE TABLE user3 LIKE mysql.user;
查看表
SHOW TABLES; 列出库中所有的表
DESC [db_name.]tb_name; 查看表结构
SHOW CREATE TABLE tbl_name; 查看创建表的命令
SHOW TABLE STATUS LIKE 'tbl_name'; 查看表状态
SHOW TABLE STATUS FROM db_name; 查看指定库中所有表状态
SHOW ENGINES; 查看所有存储引擎
示例:
显示当前数据库上的所有表;
MariaDB [testdb]> SHOW tables; +------------------+ | Tables_in_testdb | +------------------+ | score | | students | | user | | user2 | +------------------+ 4 rows in set (0.00 sec)
查看当前库所有表的具体属性信息;
MariaDB [testdb]> SHOW table status\G;
*************************** 1. row ***************************
Name: score
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 6
Avg_row_length: 2730
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: 7
Create_time: 2018-06-10 20:11:53
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
......
如只想查看当前库的某张状态;可用like匹配名称;
MariaDB [testdb]> SHOW table status like 'students' \G;
或者使用通配符,进行搜索匹配;
MariaDB [testdb]> SHOW table status where name like '%tude%'\G;
查看表结构;
MariaDB [testdb]> DESC students;
+---------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+---------+----------------+
| id | tinyint(3) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(30) | NO | | NULL | |
| ages | tinyint(2) | NO | | NULL | |
| gender | enum('M','F') | YES | | NULL | |
| address | text | YES | | NULL | |
| sid | tinyint(2) | YES | | NULL | |
| tid | tinyint(2) | YES | | NULL | |
+---------+---------------------+------+-----+---------+----------------+
7 rows in set (0.01 sec)
查看某张表被创建时对应的sql语句;
MariaDB [testdb]> SHOW CREATE table students\G;
*************************** 1. row ***************************
Table: students
Create Table: CREATE TABLE `students` (
`id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`ages` tinyint(2) NOT NULL,
`gender` enum('M','F') DEFAULT NULL,
`address` text DEFAULT NULL,
`sid` tinyint(2) DEFAULT NULL,
`tid` tinyint(2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
修改表
如果在表中还没有任何数据时,我们可以相对倾诉的修改表结构;但当表中已经存在了一定数据,我们应充分考虑到修改表结构之后所带来的相应问题。所以,在表设计伊始,就应该具有前瞻性,尽量避免日后对表进行二次修改。
ALTER TABLE tbl_name [alter_specification [, alter_specification] ...]
修改表名or重命名表;
MariaDB [testdb]> ALTER test1 RENAME AS test2;
增加属性;ADD
只添加字段,不指定字段任何属性
MariaDB [testdb]> ALTER TABLE test ADD column age INT;
修改表字段时,column可省;不指定被操作对象时,默认为列操作
为表添加字段,同时添加相应约束
MariaDB [testdb]> ALTER TABLE test ADD age INT not null default 0;
在name字段后添加age字段
MariaDB [testdb]> ALTER TABLE students ADD age TINYINT AFTER name;
删除属性;DROP
warning!!删除包含数据的字段前请三思;真爱数据,请勿手抖
MariaDB [testdb]> ALTER TABLE students DROP phone;
修改属性;CHANGE,MODIFY
修改age字段名称为ages并从新定义数据类型
MariaDB [testdb]> ALTER TABLE students CHANGE age ages TINYINT(2) NOT NULL;
修改gender字段的数据类型
MariaDB [testdb]> ALTER TABLE students MODIFY gender ENUM('M','F');
删除表
warning!!删除表前请三思;真爱数据,请勿手抖;此操作不可逆。
MariaDB [testdb]> DROP TABLE user3;

浙公网安备 33010602011771号