数据库和表

1. 创建数据库

使用CREATE DATABASECREATE SCHEMA命令可以创建数据库。

语法格式:

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS]db_name

[create_specification [,create_specification] ...]

其中create_specification:

[DEFAULT]CHARACTER SET charset_name

| [DEFAULT] COLLATE collation_name

说明:语句中“[ ]”内为可选项。

db_name:数据库名。在文件系统中,MySQL的数据存储区将以目录方式表示MySQL数据库。因此,命令中的数据库名字必须符合操作系统文件夹命名规则。值得注意的是:在MySQL中是不区分大小写的。

IF NOT EXISTS:在建数据库前进行判断,只有该数据库目前尚不存在时才执行CREATE DATABASE操作。用此选项可以避免出现数据库已经存在而再新建的错误。

DEFAULT:指定默认值。

CHARACTER SET:指定数据库字符集(Charset),charset_name为字符集名称。

COLLATE:指定字符集的校对规则,collation_name为校对规则名称.

MySQL不允许两个数据库使用相同的名字,使用IFNOT EXISTS从句可以不显示错误信息,

为了表达问题简单,在以后的示例中单独描述命令而不需要界面结果时,在命令前省略“mysql>”提示符。

创建了数据库之后使用USE命令可指定当前数据库。

语法格式:

USEdb_name;

说明:这个语句也可以用来从一个数据库跳转到另一个数据库,在用CREATE DATABASE语句创建了数据库之后,该数据库不会自动成为当前数据库,需要用这条USE语句来指定。

注意:在MySQL中,每一条SQL语句都以“;”作为结束标志。

2. 修改数据库

数据库创建后,如果需要修改数据库的参数,可以使用ALTER DATABASE命令。

语法格式:

ALTER {DATABASE | SCHEMA} [db_name]

alter_specification [, alter_specification] ...

其中alter_specification

[DEFAULT] CHARACTER SET charset_name

|[DEFAULT] COLLATE collation_name

说明:

ALTER DATABASE用于更改数据库的全局特性,这些特性储存在数据库目录中的db.opt文件中。用户必须有对数据库进行修改的权限,才可以使用ALTER DATABASE。修改数据库的选项与创建数据库相同,功能不再重复说明。如果语句中数据库名称忽略,则修改当前(默认)数据库。

3. 删除数据库

已经创建的数据库需要删除,使用DROP DATABASE命令。

语法格式:

DROP DATABASE [IF EXISTS] db_name

说明:

TEMPORARY:该关键字表示用CREATE命令新建的表为临时表。不加该关键字创建的表通常称为持久表,在数据库中持久表一旦创建将一直存在,多个用户或者多个应用程序可以同时使用持久表。有时候需要临时存放数据,例如,临时存储复杂的SELECT语句的结果。此后,可能要重复地使用这个结果,但这个结果又不需要永久保存。这时,可以使用临时表。用户可以像操作持久表一样操作临时表。只不过临时表的生命周期较短,而且只能对创建它的用户可见,当断开与该数据库的连接时,MySQL会自动删除它们。

IF NOT EXISTS:在建表前加上一个判断,只有该表目前尚不存在时才执行CREATE TABLE操作。用此选项可以避免出现表已经存在无法再新建的错误。

table_name:要创建的表的表名。该表名必须符合标志符规则,如果有MySQL保留字必须用单引号括起来。

column_definition:列定义,包括列名、数据类型,可能还有一个空值声明和一个完整性约束。

分类

数据类型

说明

数值类型

BIT(M)

TINYINT [UNSIGNED] [ZEROFILL]

BOOL,BOOLEAN

SMALLINT [UNSIGNED] [ZEROFILL]

INT [UNSIGNED] [ZEROFILL]

BIGINT [UNSIGNED] [ZEROFILL]

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

位类型。M指定位数,默认值1,范围1-64

带符号的范围是-128到127。无符号0到255。

使用0或1表示真或假

2的16次方

2的32次方

2的64次方

M指定显示长度,d指定小数位数

表示比float精度更大的小数

文本、二进制类型

CHAR(size) char(20)

VARCHAR(size) varchar(20)

BLOB LONGBLOB

TEXT(clob) LONGTEXT(longclob)

固定长度字符串

可变长度字符串

二进制数据

大文本

时间日期

DATE/DATETIME/TimeStamp

日期类型(YYYY-MM-DD) (YYYY-MM-DD HH:MM:SS),TimeStamp表示时间戳,它可用于自动记录insert、update操作的时间

index_definition:表索引项定义,主要定义表的索引、主键、外键等,具体定义将在第5章中讨论。

table_option:用于描述表的选项。

select_statement:可以在CREATETABLE语句的末尾添加一个SELECT语句,在一个表的基础上创建表。

列定义column_definition格式如下:

col_nametype [NOT NULL | NULL] [DEFAULT default_value]

[AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]

[COMMENT 'string'] [reference_definition]

说明:

col_name:表中列的名字。列名必须符合标志符规则,长度不能超过64个字符,而且在表中要唯一。如果有MySQL保留字必须用单引号括起来。

type:列的数据类型,有的数据类型需要指明长度n,并用括号括起,MySQL支持的数据类型在附录C中介绍。

AUTO_INCREMENT:设置自增属性,只有整型列才能设置此属性。当插入NULL值或0到一个AUTO_INCREMENT列中时,列被设置为value+1,在这里value是此前表中该列的最大值。AUTO_INCREMENT顺序从1开始。每个表只能有一个AUTO_INCREMENT列,并且它必须被索引。

NOT NULL | NULL:指定该列是否允许为空。如果不指定,则默认为NULL

DEFAULT default_value:为列指定默认值,默认值必须为一个常数。其中,BLOBTEXT列不能被赋予默认值。如果没有为列指定默认值,MySQL自动地分配一个。如果列可以取NULL值,默认值就是NULL。如果列被声明为NOT NULL,默认值取决于列类型:

1)对于没有声明AUTO_INCREMENT属性的数字类型,默认值是0。对于一个AUTO_INCREMENT列,默认值是在顺序中的下一个值。

2)对于除TIMESTAMP以外的日期和时间类型,默认值是该类型适当的值。对于表中第一个TIMESTAMP列,默认值是当前的日期和时间。

3)对于除ENUM的字符串类型,默认值是空字符串。对于ENUM,默认值是第一个枚举值。

UNIQUE KEY | PRIMARY KEYPRIMARY KEYUNIQUE KEY都表示字段中的值是唯一的。PRIMARY KEY表示设置为主键,一个表只能定义一个主键,主键一定要为NOT NULL

COMMENT 'string':对于列的描述,string是描述的内容。

{ENGINE | TYPE} = engine_name /*存储引擎*/

| AUTO_INCREMENT = value /*初始值*/

| AVG_ROW_LENGTH = value /*表的平均行长度*/

| [DEFAULT] CHARACTER SET charset_name[COLLATE collation_name] /*默认字符集和校对*/

| CHECKSUM = {0 | 1} /*设置为1表示求校验和*/

| COMMENT = 'string' /*注释*/

| CONNECTION = 'connect_string' /*连接字符串*/

| MAX_ROWS = value /*行的最大数*/

| MIN_ROWS = value /*列的最小数*/

| PACK_KEYS = {0 | 1 | DEFAULT}

| PASSWORD = 'string' /*.frm文件加密*/

| DELAY_KEY_WRITE = {0 | 1} /*对关键字的更新*/

| ROW_FORMAT ={DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}

/*定义各行应如何储存*/

| UNION = (tbl_name[,tbl_name]...) /*表示哪个表应该合并*/

| INSERT_METHOD = { NO | FIRST | LAST } /*是否执行INSERT语句*/

| DATA DIRECTORY = 'absolute path todirectory' /*数据文件的路径*/

| INDEX DIRECTORY = 'absolute path todirectory' /*索引的路径*/

说明:表中大多数的选项涉及的是表数据如何存储及存储在何处。多数情况下,不必指定表选项。ENGINE选项是定义表的存储引擎,具体在附录E中介绍。

【例2.3】设已经创建了数据库XSCJ,在该数据库中创建学生情况表XS

USE XSCJ

CREATE TABLE XS

(

学号 char(6) NOTNULL PRIMARY KEY,

姓名 char(8) NOTNULL ,

专业名 char(10) NOT NULL ,

性别 tinyint(1) NOT NULLDEFAULT 1 ,

出生日期 date NOT NULL ,

总学分 tinyint NULL,

照片 blob NULL,

备注 text NULL

) ENGINE=InnoDB;

在上面的例子里,每个字段都包含附加约束或修饰符,这些可以用来增加对所输入数据的约束。“PRIMARY KEY”表示将学号字段定义为主键。“DEFAULT 1”表示性别的默认值为1“ENGINE=InnoDB”表示采用的存储引擎是InnoDBInnoDBMySQLWindows平台默认的存储引擎,所以“ENGINE=InnoDB”可以省略。

3. 修改表名

除了上面的ALTER TABLE命令,还可以直接用RENAME TABLE语句来更改表的名字。

语法格式:

RENAME TABLE tbl_name TO new_tbl_name

[ , tbl_name2 TO new_tbl_name2]...

说明:

tbl_name:修改之前的表名。

new_tbl_name:修改之后的表名。

4. 复制表

语法格式:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS]tbl_name

[ ( ) LIKE old_tbl_name [ ] ]

| [AS (select_statement)] ;

说明:

使用LIKE关键字创建一个与old_table_name表相同结构的新表,列名、数据类型、空指定和索引也将复制,但是表的内容不会复制,因此创建的新表是一个空表。使用AS关键字可以复制表的内容,但索引和完整性约束是不会复制的。select_statement表示一个表达式,。

5. 删除表

需要删除一个表时可以使用DROP TABLE语句。

语法格式:

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name[, tbl_name] ...

其中,

tb1_name:要被删除的表名。

IF EXISTS:避免要删除的表不存在时出现错误信息。

这个命令将表的描述、表的完整性约束、索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值