`
mywebcode
  • 浏览: 995296 次
文章分类
社区版块
存档分类
最新评论

11级_Java_曹建波5.22 数据库和表

 
阅读更多

数据库和表

创建数据库

1. 创建数据库

使用CREATEDATABASE或CREATE 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 NOTEXISTS:在建数据库前进行判断,只有该数据库目前尚不存在时才执行CREATE DATABASE操作。用此选项可以避免出现数据库已经存在而再新建的错误。

● DEFAULT:指定默认值。

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

● COLLATE:指定字符集的校对规则,collation_name为校对规则名称(字符集和校对规则的概念见附录D)。

MySQL不允许两个数据库使用相同的名字,使用IF NOT 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文件中。用户必须有对数据库进行修改的权限,才可以使用 ALTERDATABASE。修改数据库的选项与创建数据库相同,功能不再重复说明。如果语句中数据库名称忽略,则修改当前(默认)数据库。

修改数据库mydata(假设mydata已经创建)的默认字符集和校对规则。

ALTER DATABASE mydata

DEFAULT CHARACTER SET gb2312

DEFAULT COLLATE gb2312_chinese_ci;

3. 删除数据库

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

语法格式:

DROP DATABASE [IF EXISTS] db_name

其中,db_name是要删除的数据库名。可以使用IF EXISTS子句以避免删除不存在的数据库时出现的MySQL错误信息。示例如下:

注意:这个命令必须小心使用,因为它将删除指定的整个数据库,该数据库的所有表(包括其中的数据)也将永久删除。

创建表使用CREATETABLE命令。

语法格式:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS]tbl_name

[( [column_definition] , ... | [index_definition] ) ]

[table_option] [select_statement];

说明:

● 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操作的时间

VARCHAR、BLOB和TEXT类是变长类型。每个类型的存储需求取决于列值的实际长度。

创建表

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

● table_option:用于描述表的选项。

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

列定义column_definition格式如下:

col_nametype [NOT NULL | NULL] [DEFAULTdefault_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:为列指定默认值,默认值必须为一个常数。其中,BLOB和TEXT列不能被赋予默认值。如果没有为列指定默认值,MySQL自动地分配一个。如果列可以取NULL值,默认值就是NULL。如果列被声明为NOT NULL,默认值取决于列类型:

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

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

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

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

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

● reference_definition:指定参照的表和列,具体定义在第5章参照完整性中介绍。

type定义如下:

说明:以上是各种数据类型的定义格式,值得注意的是,在字符数据类型和数值数据类型之后,MySQL允许指定一个数据类型选项用来改变数据类型的属性和功能。

对于字符数据类型,MySQL支持两种数据类型选项:CHARACTER SET和COLLATE。如果要区分字符的大小写情况,可以在字符类型后面加上BINGARY。

对于除BIT以外的数值数据类型,MySQL允许添加一个或多个数据类型选项。UNSIGNED:不允许负值。ZEROFILL:当插入的值长度小于字段设定的长度时,剩余部分用0填补。

spatial_type是空间类型数据,本书不讨论。

表选项table_option定义如下:

{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中介绍。

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

USE XSCJ

CREATE TABLE XS

(

学号 char(6) NOTNULL PRIMARY KEY,

姓名 char(8) NOTNULL ,

专业名 char(10) NOTNULL ,

性别 tinyint(1) NOT NULL DEFAULT 1 ,

出生日期 date NOTNULL ,

总学分 tinyint NULL,

照片 blob NULL,

备注 text NULL

) ENGINE=InnoDB;

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

ALTER TABLE用于更改原有表的结构。例如,可以增加或删减列,创建或取消索引,更改原有列的类型,重新命名列或表,还可以更改表的评注和表的类型。

语法格式:

ALTER [IGNORE] TABLE tbl_name

alter_specification [, alter_specification] ...

alter_specification:

ADD [COLUMN] column_definition [FIRST | AFTER col_name ] /*添加列*/

|ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} /*修改默认值*/

|CHANGE [COLUMN] old_col_name column_definition /*对列重命名*/

[FIRST|AFTER col_name]

|MODIFY [COLUMN] column_definition [FIRST | AFTER col_name] /*修改列类型*/

|DROP [COLUMN] col_name /*删除列*/

|RENAME [TO] new_tbl_name /*重命名该表*/

|ORDER BY col_name /*排序*/

|CONVERT TO CHARACTER SET charset_name [COLLATE collation_name] /*将字符集转换为

二进制*/

|[DEFAULT] CHARACTER SET charset_name [COLLATE collation_name] /*修改默认字符集*/

|table_options

| 列或表中索引项的增、删、改(见第5章索引部分)

说明:

● tb1_name:表名。

● col_name:指定的列名。

● IGNORE:是MySQL相对于标准SQL的扩展。若在修改后的新表中存在重复关键字,如果没有指定IGNORE,当重复关键字错误发生时操作失败。如果指定了IGNORE,则对于有重复关键字的行只使用第一行,其他有冲突的行被删除。

● column_definition:定义列的数据类型和属性,具体内容在CREATE TABLE的语法中已做说明。

● ADD[COLUMN]子句:向表中增加新列。例如,在表t1中增加新的一列a:

ALTERTABLE t1 ADDCOLUMN a TINYINTNULL ;

● FIRST | AFTER col_name:表示在某列的前或后添加,不指定则添加到最后。

● ALTER [COLUMN]子句:修改表中指定列的默认值。

● CHANGE [COLUMN]子句:修改列的名称。重命名时,需给定旧的和新的列名称和列当前的类型,old_col_name表示旧的列名。column_definition中定义新的列名和当前数据类型。例如,要把一个INTEGER列的名称从a变更到b:

ALTERTABLE t1 CHANGEa b INTEGER;

● MODIFY [COLUMN]子句:修改指定列的类型。例如,要把一个列的数据类型改为BIGINT:

ALTERTABLE t1 MODIFYb BIGINT NOT NULL;

注意,若表中该列所存数据的数据类型与将要修改的列的类型冲突,则发生错误。例如,原来CHAR类型的列要修改成INT类型,而原来列值中有字符型数据“a”,则无法修改。

● DROP子句:从表中删除列或约束。

● RENAME子句:修改该表的表名,new_tbl_name是新表名。例如,将表a改名为b:

ALTERTABLE a RENAME TOb ;

● ORDER BY子句:用于在创建新表时,让各行按一定的顺序排列。注意,在插入和删除后,表不会仍保持此顺序。在对表进行了大的改动后,通过使用此选项,可以提高查询效率。在有些情况下,如果表按列排序,对于MySQL来说,排序可能会更简单。ORDERBY子句会在第4章中具体介绍。

● table_options:修改表选项,具体定义与CREATE TABLE语句中一样。

可以在一个ALTERTABLE语句里写入多个ADD、ALTER、DROP和CHANGE子句,中间用逗号分开。这是MySQL相对于标准SQL的扩展。在标准SQL中,每个ALTER TABLE语句中每个子句只允许使用一次。

3. 修改表名

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

语法格式:

RENAME TABLE tbl_name TO new_tbl_name

[ , tbl_name2 TO new_tbl_name2]...

说明:

● tbl_name:修改之前的表名。

● new_tbl_name:修改之后的表名。

假设数据库XSCJ中已经存在table1表和table2表,将table1表重命名为student,table2表重命名为course。

USE XSCJ

RENAME TABLE table1 TO student,

table2 TO course;

假设已经在数据库XSCJ中创建了表XS,表中存在“姓名”列。在表XS中增加“奖学金等级”列并将表中的“姓名”列删除。

USE XSCJ

ALTER TABLE XS

ADD 奖学金等级 tinyintNULL ,

DROP COLUMN 姓名 ;

4. 复制表

语法格式:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS]tbl_name

[ ( ) LIKE old_tbl_name [ ] ]

| [AS (select_statement)] ;

说明:

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

假设数据库XSCJ中有一个表test,创建test表的一个名为test_copy1的拷贝。

CREATE TABLE test_copy1 LIKE test;

创建表test的一个名为test_copy2的拷贝,并且复制其内容。

CREATE TABLE test_copy2AS

(SELECT * FROM test);

分享到:
评论

相关推荐

    神经网络与量子计算的交叉研究.pptx

    神经网络与量子计算的交叉研究.pptx

    非线性端口 MEMS 麦克风的 Simscape 模型.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    用于超声成像和仿真的 MATLAB 工具箱.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    HFI高频注入仿真—matlab.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    北京工商大学上网登陆版源码.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    攻击离开优化器 (ALO)matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    Ruby基于Ruby的MKS rebase脚本 Ruby语言基础

    【Ruby】基于Ruby的MKS rebase脚本 Ruby语言基础 将MKS网盘中其他工程路径下的工程文件批量rebase到目标工程路径。 【Ruby】基于Ruby的MKS rebase脚本 Ruby语言基础

    18.CSGO赛事管理系统的设计与实现-Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档

    18.CSGO赛事管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码(含数据库脚本)+开发文档+lw(高分毕设项目) 详细介绍链接:http://t.csdnimg.cn/CDBjW 内容概要: 全套项目源码+详尽文档,一站式解决您的学习与项目需求。 适用人群: 计算机、通信、人工智能、自动化等专业的学生、老师及从业者。 使用场景及目标: 无论是毕设、期末大作业还是课程设计,一键下载,轻松部署,助您轻松完成项目。 项目代码经过调试测试,确保直接运行,节省您的时间和精力。 其他说明: 项目整体具有较高的学习借鉴价值,基础能力强的可以在此基础上修改调整,以实现不同的功能。

    46.书籍学习平台的设计与实现-Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)论坛

    46.书籍学习平台的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)论坛,公告,付费专区,免费专区,销售,会员办理,书籍分类 详细设计文档链接:http://t.csdnimg.cn/GSeDN 内容概要: 全套项目源码+详尽文档,一站式解决您的学习与项目需求。 适用人群: 计算机、通信、人工智能、自动化等专业的学生、老师及从业者。 使用场景及目标: 无论是毕设、期末大作业还是课程设计,一键下载,轻松部署,助您轻松完成项目。 项目代码经过调试测试,确保直接运行,节省您的时间和精力。 其他说明: 项目整体具有较高的学习借鉴价值,基础能力强的可以在此基础上修改调整,以实现不同的功能。

    基于OpenCV+Tensorflow的银行卡号识别源码+使用文档+全部资料(优秀项目).zip

    【资源说明】 基于OpenCVTensorflow的银行卡号识别源码+使用文档+全部资料(优秀项目).zip基于OpenCVTensorflow的银行卡号识别源码+使用文档+全部资料(优秀项目).zip基于OpenCVTensorflow的银行卡号识别源码+使用文档+全部资料(优秀项目).zip 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    AI快速生成原创音乐的平台.txt

    AI快速生成原创音乐的平台.txt

    决斗者算法是一种元启发式优化算法matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    xiuno模板知乎蓝魔改版源码附多个插件.zip

    xiuno模板知乎蓝魔改版源码附多个插件

    学习 C语言 编程语言 中的实敲代码仓库,提升自我的编程思维,编程能力 坚持下去.zip

    C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯尼斯·蓝·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI C”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。 [5] C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而B语言则源自BCPL语言。 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。

    FS-S01059_STEP_01A.zip

    FS-S01059_STEP_01A.zip

    监听自身被卸载.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    基于遗传算法的公交排班系统分析matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于深度强化学习的住宅区电动汽车充电策略

    基于深度强化学习的住宅区电动汽车充电策略是一种用于优化住宅区电动汽车充电行为的算法。面对日益增长的电动汽车数量和有限的充电资源,该算法结合了深度学习和强化学习方法,旨在实现住宅区电动汽车充电的智能调度和管理。

    第5章 s7200编程语言及指令系统.ppt

    第5章 s7200编程语言及指令系统.ppt

    基于遗传算法将电子卡车和电子三轮车路由到街道街区的客户matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

Global site tag (gtag.js) - Google Analytics