数据定义之模式定义
Part [mysql]
在mysql中并没有对 schema 和 databas 做严格区分,mysql中 schema 就是 database.
模式定义:
mysql>create database IF NOT EXISTS [schemaName];
mysql>create schema IF NOT EXISTS [schemaName];
上面两条命令是等价的,都会创建一个数据库实例。if not exists 不加也可以;
模式查看:
mysql>show dabatases;
mysql>show schemas;
模式删除:
mysql>drop database [schemaName];
mysql>drop schema [schemaName];
会默认把模式内的所有对象也一并删除(表,视图,索引...);
实例:
Part [sqlite]
在sqlite中 schema 和 database 是有差异的。下面来详细讲解:
在sqlite中 database 和mysql中很像,里面包含各种对象(表,视图...),但操作方面有很多不同(各有优缺点);
database的创建:
sqlite把一个database当作一个单独的文件,可在命令行下使用:
test@linux:~$ sqlite3 test.db
处理过程就像把这个文件动态加载成database对象,该文件不在就预创建,但如果之后没有写入任何数据,结束后还是没有该文件。之后从命令行模式进入sqlite运行模式;
database的查看:
sqlite> .database
加载的test.db会默认当作主数据库。
database的附加与分离:
sqlite> attach database ['databaseNmae'] as ['alias']; #注意加引号
sqlite> detach database ['alias']; #注意加引号
注意,main 和 temp 是保留的,不能当作 alias ;
more:
因为sqlite把一个数据库当成一个单独的文件,方便了移动和保存。
还可以将只能sqlite读懂的数据导出成用文本数据
命令行模式下:
test@linux:~$ sqlite3 test.db .dump > test.sql #导出成文本数据
test@linux:~$ sqlite3 test1.db < test.sql #从文本数据中导回数据库文件
在sqlite运行模式下也有实现这些操作的命令。可自行查找资料。该部分与sql相关理论无关。
在 sqlite 中 schema 相对来说更符合教材中提到的概念:“模式(schema)是数据库中全体数据的逻辑结构和特征的描述,它不涉及具体的值”。 sqlite运行模式下 sqlite> .schema [object] #object 一般为表或为空,为空时显示当前所有已存在的对象的逻辑机构的描述。
下篇:数据定义之基本表的定义