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;

 

posted @ 2018-06-16 11:40  Gmiao  阅读(204)  评论(0编辑  收藏  举报