美文网首页
MairDB 初始数据库与表 (四)

MairDB 初始数据库与表 (四)

作者: simuty | 来源:发表于2016-12-06 10:08 被阅读28次
第一部分 创建数据库

1.1 创建并切换操作的数据库

创建数据库CREATE DATABASE 数据库名
切换: USE 数据库名

#创建数据库
MariaDB [mysql]> CREATE DATABASE study_db;
#切换数据库
MariaDB [mysql]> USE study_db;
Database changed
第二部分 表操作

2.1 创建一个书籍表格

MariaDB [study_db]> CREATE TABLE books(
    -> book_id INT AUTO_INCREMENT PRIMARY KEY,
    -> book_name VARCHAR(20),
    -> book_author_name VARCHAR(20),
    -> publication_date DATE,
    -> description TEXT);
Query OK, 0 rows affected (0.02 sec)
  1. AUTO_INCREMENT 选项则告诉 MySQL 此列的值是自增的。如果没指定一个起始数,那么就 是从1开始。
  2. PRIMARY KEY 主键, 使数据能以其索引;(唯一)

2.2 查看表结构: DESCRIBE

也可以使用> DESC 表名

MariaDB [study_db]> DESCRIBE books;
+------------------+-------------+------+-----+---------+----------------+
| Field            | Type        | Null | Key | Default | Extra          |
+------------------+-------------+------+-----+---------+----------------+
| book_id          | int(11)     | NO   | PRI | NULL    | auto_increment |
| book_name        | varchar(20) | YES  |     | NULL    |                |
| book_author_name | varchar(20) | YES  |     | NULL    |                |
| publication_date | date        | YES  |     | NULL    |                |
| description      | text        | YES  |     | NULL    |                |
+------------------+-------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)

  1. 第一行是各列的标题。
  2. 第二列,Type,用于展示各列的类型。
  3. 第三列,Null,用于说明各列能否含有 NULL 值;
  4. 第四列,Key,用于说明该列是否是键——索引列。
  5. 第五列,Default,用于说明各列的默认值。
  6. 最后一列,Extra,用于提供一些额外的信息。

删除表---DROP TABLE 表名; 不可逆, 切勿乱操作.

2.3 创建书类表

MariaDB [study_db]> CREATE TABLE book_classify
    -> (classify_id TINYINT AUTO_INCREMENT PRIMARY KEY,
    -> classify_name VARCHAR(20),
    -> description BLOB);
第三部分 插入数据

3.1 格式:

INSERT INTO 表名 (列名, 列名....) VALUES (数据, 数据....)

3.2 实例
插入两条数据

MariaDB [study_db]> INSERT INTO books
    -> (book_name, publication_date)
    -> VALUES
    -> ('跟我学MariaDB', NOW()),
    -> ('NodeJS', '2016-12-02'),
    -> ('MYSQL', '2016-12-01');

3.3 筛选数据

MariaDB [study_db]> SELECT * FROM books;
+---------+------------------+------------------+------------------+-------------+
| book_id | book_name        | book_author_name | publication_date | description |
+---------+------------------+------------------+------------------+-------------+
|       1 | 跟我学MariaDB    | NULL             | 2016-12-02       | NULL        |
|       2 | NodeJS           | NULL             | 2016-12-02       | NULL        |
+---------+------------------+------------------+------------------+-------------+
2 rows in set (0.00 sec)

3.4 查看表结构的另外一种方法

MariaDB [study_db]> SHOW CREATE  TABLE books \G
*************************** 1. row ***************************
       Table: books
Create Table: CREATE TABLE `books` (
  `book_id` int(11) NOT NULL AUTO_INCREMENT,
  `book_name` varchar(20) DEFAULT NULL,
  `book_author_name` varchar(20) DEFAULT NULL,
  `publication_date` date DEFAULT NULL,
  `description` text,
  PRIMARY KEY (`book_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

*附加

查看数据存储位置

MariaDB [(none)]> SHOW VARIABLES LIKE '%dir%';
+-----------------------------------------+---------------------------------------------------------+
| Variable_name                           | Value                                                   |
+-----------------------------------------+---------------------------------------------------------+
| aria_sync_log_dir                       | NEWFILE                                                 |
| basedir                                 | /usr/local/Cellar/mariadb/10.1.19                       |
| binlog_direct_non_transactional_updates | OFF                                                     |
| character_sets_dir                      | /usr/local/Cellar/mariadb/10.1.19/share/mysql/charsets/ |
| datadir                                 | /usr/local/var/mysql/                                   |
| ignore_db_dirs                          |                                                         |
| innodb_data_home_dir                    |                                                         |
| innodb_log_arch_dir                     | ./                                                      |
| innodb_log_group_home_dir               | ./                                                      |
| innodb_max_dirty_pages_pct              | 75.000000                                               |
| innodb_max_dirty_pages_pct_lwm          | 0.001000                                                |
| innodb_tmpdir                           |                                                         |
| innodb_undo_directory                   | .                                                       |
| lc_messages_dir                         |                                                         |
| plugin_dir                              | /usr/local/Cellar/mariadb/10.1.19/lib/plugin/           |
| slave_load_tmpdir                       | /var/folders/jb/_sy6fgc57n5d25r6hkk36cqh0000gn/T/       |
| tmpdir                                  | /var/folders/jb/_sy6fgc57n5d25r6hkk36cqh0000gn/T/       |
| wsrep_data_home_dir                     | /usr/local/var/mysql/                                   |
| wsrep_dirty_reads                       | OFF                                                     |
+-----------------------------------------+---------------------------------------------------------+
19 rows in set (0.00 sec)

遇到的问题:

创建表时, 只是设置了主键, 没有对任何一列设置AUTO_INCREMENT,
后期将列添加AUTO_INCREMENT,直接使用ALTER TABLE book_classify CHANGE classify_id test_id INT PRIMARY KEY AUTO_INCREMENT;无效

**原因: **

MariaDB [study_db]> SHOW INDEX FROM book_classify \G
*************************** 1. row ***************************
        Table: book_classify
   Non_unique: 0
   #此处有彩蛋!!!!!!!!!!!!!
     Key_name: PRIMARY
 Seq_in_index: 1
  Column_name: classify_id
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: 
   Index_type: BTREE
      Comment: 
Index_comment: 
1 row in set (0.00 sec)

因为索引与该列关联,该列要在索引删除后才能重命名。

解决方法:

先删除索引, 再更改.

> ALTER TABLE book_classify
     DROP PRIMARY KEY,
     CHANGE classify_id test_id INT PRIMARY KEY AUTO_INCREMENT;

Tip:
更改AUTO_INCREMENT的值:
ALTER TABLE book_classify AUTO_INCREMENT = 100;

更多精彩内容请关注“IT实战联盟”哦~~~


IT实战联盟.jpg

关于索引相关后续再进一步学习

相关文章

网友评论

      本文标题:MairDB 初始数据库与表 (四)

      本文链接:https://www.haomeiwen.com/subject/sxzlmttx.html