(一)MySQL中数据库概念
数据库可以看作是一个专门存储数据对象的容器,这里的数据对象包括表、视图、触发器、存储过程等,其中表是最基本的数据对象。物理上数据库由各种操作系统文件组成,主要包括数据文件和日志文件,不同DBMS的文件机制不同。在 MySQL 数据库中创建数据对象之前,先要创建好数据库。MySQL创建数据库时忽略文件设置,由系统自动管理,一般一个表对应一个文件存储数据。
(二)MySQL中数据库管理命令格式
1、SQL创建数据库命令语法格式
CREATE DATABASE <数据库名>
2、SQL删除数据库命令语法格式
DROP DATABASE <数据库名>
(三)数据表结构
数据表是对数据进行存储和操作的一种逻辑结构,每个表代表一个对象。数据库通常包含多个表,每个表都是一个存储数据的容器,具有唯一的名称。数据表为其他对象提供数据。
l 表由若干个列组成,每一个列在表中是唯一的。字段列具有多个属性:列值应该为可选的数据类型;大小则规定列值的最大长度;小数位用于定义数据型numeric列的小数位数;是否为空说明列值是否允许为空值;默认值用于定义不经输入所定义的列值。
常用的数据类型主要有:
表1-1 常用数据类型
char(n) | 固定长度的字符或Unicode字符 |
varchar(n) | 可变长度的字符或Unicode字符 |
datetime, time, date | 时间日期型 |
tinyint,smallint,int,bigint | 各种整型数值,int类型可以设置数字长度 |
float和real | 近似小数数据类型,普通的带小数点数据使用 |
numeric和decimal | 精确的小数数值类型,精度高,存储占用字节大 |
enum | 枚举类型 |
(四)MySQL中数据表管理命令格式
1、SQL创建表命令语法格式
CREATE TABLE <表名> (
<列1定义> [列级完整性约束]
[,<列2定义> [列级完整性约束]
┆
[,<列n定义> [列级完整性约束]]
[,表级完整性约束1[,…]] )
列定义格式:
<列名> <数据类型> [Default]
其中:Default用于设置默认值。
表1-2 参数说明
参数 | 说明 |
表名 | 表名必须符合标识符规则。 |
列名 | 列名必须符合标识符规则,并且在表内唯一。 |
数据类型 | 指定列的数据类型。可以是系统数据类型或用户定义数据类型。 |
列级完整性约束 表级完整性约束 | 表示对列或表的约束条件,用于规范数据输入。放在列定义后面的是列级约束条件,一般只涉及一个列。放在所有列的后面的是表级约束条件,一般涉及多个列。 |
创建数据表时除了定了字段列的属性,还需要对数据的约束条件进行定义。约束分为列级完整性约束和表级完整性约束。
列级完整性约束条件是指定义在字段列中的约束,列级约束一般只针对一个字段取值进行限制。列级约束定义格式:
<字段定义> [CONSTRAINT <约束名>] <约束类型>
注意:Mysql基本不支持在列级约束定义时使用约束名。
列级约束类型及定义如下:
NOT NULL约束:是否允许字段值为空,只能作为列级约束,不能加约束名
UNIQUE约束:唯一性约束,指定的列或列的组合的取值在表中必须唯一
DEFAULT约束:默认值,比如:ssex char(2) DEFAULT( ‘男’)
CHECK约束:检查约束,设置字段取值要满足的条件,比如:sage int CHECK (sage >=10 AND sage <=50)
PRIMARY KEY:主键约束,指定的字段或字段组合为表的主键,用以实现实体完整性。比如:sno char(5) PRIMARY KEY
表级完整性约束条件是指不定义在字段中,而是定义在所有字段之后的约束,表级约束定义格式:
[CONSTRAINT <约束名>] <约束类型> (约束字段设置)
注意:约束字段设置,可以是单个字段,也可以是字段组合,表级约束一般针对多个字段联合取值进行限制。
表级约束类型及定义如下:
UNIQUE,比如:CONSTRAINT UQ_stu_namesex UNIQUE(sName,sSex)
CHECK,比如:CONSTRAINT CK_stu_BMI CHECK(sWeight/sHeight/sHeight>=19)
PRIMARY KEY(),比如:PRIMARY KEY(sNo,ccNo)
FOREIGN KEY(),外键约束,定义外键字段及其参照的主键字段,并设置参照完整性的实施细则。比如:FOREIGN KEY(sNo) REFERENCES student(sNo)
注意:MySQL中列级外键约束不能使用foreign key
2、SQL修改数据表命令语法格式
ALTER TABLE <表名>
[ ADD <新列名> <数据类型> [列级完整性约束]]
[ ADD <表级完整性约束>
[ DROP [COLUMN] <列名>]
[ DROP <完整性约束名>]
[ MODIFY COLUMN <列名> <列定义>]
3、SQL删除数据表命令语法格式
DROP TABLE <表名>
(五)MySQL中DML语句语法格式
1、INSERT 命令
一次向基本表中插入一个元组。一般格式:
INSERT INTO <表名> [(<列名1>[,<列名2>]...)]
VALUES (<常量1> [,<常量2>]...)
说明:
VALUES子句中各常量的数据类型必须与INTO子句中所对应列的数据类型相兼容,VALUES子句中各常量的数量必须与INTO子句中的列数相匹配。
如果省略INTO子句中的<列名1>[,<列名2>,…n],则新插入元组的每一列必须在VALUES子句中均有值对应,即与基本表中的列一一对应。
INTO子句中没有出现的列,新插入的元组在这些列上会被置为默认值或空值。
如果在基本表中存在定义为NOT NULL的列,则该列的值必须要出现在VALUES子句中的常量列表中。
如果需要一次性插入多条语句,可以这么书写:
INSERT INTO table_name [(column1[,<column2>,…n])]
VALUES(value11[,value12,…n]), (value21[,value22,…n]), …n
2、DELETE 命令
删除数据表中的数据。一般格式:
DELETE FROM <表名>
[WHERE <条件>]
说明:
DELETE语句删除的是基本表中的数据,而不是表的定义。
省略WHERE子句,表示删除基本表中的全部元组。
在WHERE子句中也可以嵌入子查询。
数据一旦被删除将无法恢复,除非事先有备份。
3、UPDATE 命令
修改表中的数据。一般格式:
UPDATE <表名>
SET <列名1>=<表达式1>[,<列名2>=<表达式2>]...
[WHERE <条件>]
说明:
WHERE子句指出表中需要修改的行应满足的条件,如省略,则修改表中的全部元组。
使用SET子句给出修改的新数据,新数据可以是常量,也可以是固定的表达式甚至是一个子查询。
新值必须符合列的数据类型以及在列上的约束。
如果使用修改命令更新关键字的值,而该关键字在其他表中作为外码存在时,操作可能违反参照完整性。系统将拒绝执行。