主要参考:
书籍:
MySQL数据库应用从入门到精通(删库) 中国铁道出版社
SQL相关介绍合集:
SQL介绍(一)创建数据库,表的操作(创建,更新,删除):https://blog.csdn.net/qq_41605114/article/details/97292616
SQL介绍(二)完整性约束,数据类型,索引(创建,更新,删除):https://blog.csdn.net/qq_41605114/article/details/97392269
SQL介绍(三)触发器:https://blog.csdn.net/qq_41605114/article/details/97794131
SQL介绍(四)单表查询:https://blog.csdn.net/qq_41605114/article/details/97934605
Qt:MySQL数据库总结(表的创建,插入,各种查询方式,删除,封装时需要的dll):https://blog.csdn.net/qq_41605114/article/details/90671791
Qt封装调用MySQL的软件时所需的依赖项:https://blog.csdn.net/qq_41605114/article/details/86612264
目录
1,MySQL支持完整性约束
1.1设置非空约束(NOT NULL,NK)
1.2设置字段的默认值(DEFAULT)
1.3设置唯一约束(UNIQUE,UK)
1.4设置主键约束(PRIMARY KEY,PK)
1.4.1单字段主键
1.4.2多字端主键
1.5设置字段值自动增加(AUTO_INCREMENT)
1.6设置外键约束(FOREIGN KEY,FK)
2,MySQL数据库中的数据类型
3,索引的操作
3.1创建和查看普通索引-INDEX|KEY [索引名](属性名1[(长度)] [ASC||DESC])
3.1.1创建表时创建普通索引
3.1.2在已经存在的表上创建普通索引
3.1.2.1CREATE INDEX
3.1.2.2ALTER TABLE
3.2创建和查看唯一索引-UNIQUE INDEX|KEY [索引名](属性名1 [(长度)] [ASC||DESC])
3.2.1创建表时创建唯一索引
3.2.2在已存在的表上创建唯一索引
3.2.2.1CREATE INDEX
3.2.2.1ALTER TABLE
3.3创建和查看全文索引(for CHAR,VACHAR和TEXT)
3.3.1创建表时创建全文索引
3.3.2在已经存在的表上创建全文索引
3.3.2.1CREATE INDEX
3.3.2.2ALTER TABLE
3.4创建和查看多列索引
3.4.1创建表时创建多列索引
3.3.4在已经存在的表上创建全文索引
3.3.4.1CREATE INDEX
3.3..2ALTER TABLE
3.5删除索引
3.6索引总结
所谓完整性是指数据的准确性和一致性,而完整性检查是指检查数据的准确性和一致性。
MySQL数据库管理系统提供了一种机制来检查数据库表中的数据是否满足规定的条件
以保证数据库表中的数据的准确性和一致性,这种机制就是约束。
完整性约束如下:
NOT NULL | 约束字段的值不能为空 |
DEFAULT | 设置字段的默认值 |
UNIQUE KEY(UK) | 约束字段的值是唯一 |
PRIMARY KEY(PK) | 约束字段为表的主键,可以作为该表记录的唯一标识 |
AUTO_INCREMENT | 约束字段的值为自动增加 |
FOREIGN KEY(FK) | 约束字段为表的外键 |
约束可以分为:
当数据库表中的某个字段的内容不希望设置为NULL时,则可以使用NK约束进行设置,即NK约束在创建数据库表时为某些字段加上“NOT NULL”约束条件,保证所有记录中,该字段都有值,如果插入的记录中,该字段为空值,则数据库管理系统会报错。
CREATE TABLE table_name (
属性名 数据类型 NOT NULL,
.......
);
当为数据库插入一条新纪录时,如果没有为某个字段赋值,那么数据库系统会自动为这个字段插入默认值,为了达到这种效果,可以通过SQL语句关键字DEFAULT来设置。
CREATE TABLE table_name (
属性名 数据类型 DEFAULT 默认值,
.......
);
当数据库表中的某个字段的内容不允许重复时,则可以使用UK约束进行设置,即UK约束在创建数据库表时为某些字段加上“UNIQUE”约束条件,保证所有记录中该字段上的值不重复,如果重复,数据库报错。
CREATE TABLE table_name (
属性名 数据类型 UNIQUE,
.......
);
当想用数据库表中的某个字段来唯一标识所有记录时,则可以使用PK约束进行设置。即PK约束在创建数据库表时为某些字段加上“PRIMARY KEY”约束条件,则该字段可以唯一地标示所有记录。
在数据库表中之所以设置主键约束,是为了便于数据库管理系统快速地查找到表中的记录。在具体设置主键约束时,必须要满足主键字段的值是唯一、非空的。由于主键可以是单一字段,也可以是多个字段,因此分为单字段主键和多字端主键。
CREATE TABLE table_name (
属性名 数据类型 PRIMARY KEY,
.......
);
CREATE TABLE table_name (
属性名1 数据类型1,
属性名2 数据类型1,
CONSTRAINT PK_name PRIMARY KEY(属性名1,属性名2)
.......
);
-PK_name被成为约束名,其中属性名1和属性名2已经被设置成联合主键
AUTO-INCTEMENT是MySQL唯一扩展的完整性约束,当为数据库表插入新纪录时,字段上的值会自动生成唯一的ID。在具体设置AUTO-INCTEMENT时,一个数据库表中只能有一个字段使用该约束,该字段的数据类型必须是整形类型,由于设置AUTO-INCTEMENT约束后的字段会生成唯一的ID,所以该字段也经常成PK主键。
CREATE TABLE table_name (
属性名1 数据类型1 PRIMARY KEY AUTO_INCREMENT,
.......
);
CREATE TABLE table_name (
属性名1 数据类型1 AUTO_INCREMENT,
.......
);
前面介绍的完整性约束都是在单表中进行设置,而本节所要介绍的外键约束则保证多个表(通常为两个表)之间的参照完整性,即构建于两个表的两个字段之间的参照关系。
设置外键约束的两个表之间具有父子关系,即字表中某个字段的取值范围由父表决定。例如表示一种部门和雇员关系,即每个部分有多少个雇员。首先应该有两个表,部门表和雇员表,然后雇员表中有一个表示部门编号的字段deptno,其依赖于部门表的主键,这样字段deptno就是雇员的外键,通过该字段部门表和雇员表建立关系。
CREATE TABLE t_dept(
deptno INT PRIMAY KEY;
dname VARCHAR(20);
loc VARCHAR(40);
);
CREATE TABLE t_employee(
empno INT PRIMARY KEY;
ename VARCHAR(20);
MGR INT;
CONSTRAINT fk_deptno FOREIGN KEY(deptno)
REFERENCES t_dept(deptno);
);
-外键约束名,语法
CREATE TABLE t_employee(
属性名 数据类型;
CONSTRAINT 外键约束名 FOREIGN KEY(属性名)
REFERENCES 父表(属性名);
);
整数类型 | 字节 |
TINYINT | 1 |
SMALLINT | 2 |
MEDIUMINT | 3 |
INT和INTEGER | 4 |
BIGINT | 8 |
浮点型 | 字节 |
FLOAT | 4 |
DOUBLE | 8 |
位类型 | 字节 |
BIT(M) | 1~8 |
日期和时间类型 | 字节 |
DATE | 4 |
DATETIME | 8 |
TIMESTAMP | 4 |
TIME | 3 |
YEAR |
1 |
CHAR系列字符串类型 | 字节 |
CHAR(M) | M |
VARCHAR(M) | M |
储存少量字符串,则可以选择CHAR和VARCHAR类型,至于选择这两个类型中的哪儿一个,如果存储字符串长度经常变换,使用VARCHAR,反之,使用CHAR。
TEXT系列字符串类型 | 字节 |
TINYTEXT |
0~255 |
TEXT | 0~65 535 |
MEDIUMTEXT | 0~167 772 150 |
LONGTEXT | 0~4 294 967 295 |
存储大量字符串时,例如纯文本,则可以选择TEXT系列。
BINARY系列字符串类型 | 字节 |
BINARY(M) | M |
VARCHAR(M) | M |
与CHAR类型比较相似,可以储存二进制数据,图片,音乐或视频。
BLOB系列字符串类型 | 字节 |
TINYBLOB | |
BLOB | |
MEDIUMBLOB | |
LONGBLOB |
与TEXT相似,可以储存二进制数据,图片,音乐或视频。
在MySQL数据库中,数据库对象表是存储和操作数据的逻辑结构,下面要介绍的数据库对象索引则是一种有效组合数据的方式。
通过索引对象,可以快速查询到数据库对象表中的特定记录,是一种提高性能的常用方式。
一个索引会包含表中按照一定顺序排列的一列或多列字段,索引的操作包含常见索引,修改索引和删除索引,这些操作是MySQL软件中最基本,最重要的操作。
所谓的普通索引,就是在创建索引时,不附加任何限制条件(唯一、非空等),该类型的索引可以创建在任何数据类型的字段上。
CREATE TABLE table_name(
属性名 数据类型,
属性名 数据类型,
.....
属性名 数据类型,
INDEX|KEY [索引名](属性名1[(长度)] [ASC||DESC])
);
INDEX或KEY参数用来指定字段为索引
“索引名”参数用指定所创建索引名
“属性名1”参数用来指定索引所关联的字段的名称,“长度”参数用来指定索引的长度
“ASC”参数用来指定为升序排列,“DESC”为降序排列
-举例说明问题
CREATE TABLE t_dept(
deptno INT,
dname VARCHAR(20),
loc VARCHAR(40),
INDEX index_deptno(deptno)
)
CREATE INDEX 索引名
ON 表名(属性名[(长度)] [ASC|DESC]);
CREATE INDEX index_deptno
ON t_dept(deptno);
ALTER TABLE table_name
ADD INDEX|KEY 索引名(属性名[(长度)] [ASC|DESC]);
ALTER TABLE t_dept
ADD INDEX index_deptno(deptno);
所谓唯一索引,就是在创建索引时,限制索引的值必须是唯一的。通过该类型的索引可以更快速地查询某条信息,在MySQL中,根据创建索引方式,可以分为自动索引和手动索引两种。
CREATE TABLE table_name(
属性名 数据类型,
属性名 数据类型,
....
属性名 数据类型,
UNIQUE INDEX|KEY [索引名](属性名1 [(长度)] [ASC||DESC])
);
实例演示:在的deptno上创建唯一索引。
CREATE TABLE t_dept(
deptno INT UNIQUE,
dname VARCHAR(20),
loc VARCHAR(40),
UNIQUE INDEX index_deptno(deptno)
);
CREATE UNIQUE INDEX 索引名
ON 表名(属性名[(长度)] [ASC|DESC]);
实例演示:在的deptno上创建唯一索引。
CREATE UNIQUE INDEX index_deptno
ON t_dept(deptno);
ALTER TABLE table_name
ADD UNIQUE INDEX 索引名(属性名[(长度)] [ASC||DESC]);
实例演示:在的deptno上创建唯一索引。
ALTER TABLE t_dept
ADD UNIQUE INDEX index_deptno(deptno);
全文索引主要关联在数据类型CHAR,VACHAR和TEXT的字段上,以便能够更快速地查询数据量比较大的字符串类型和字段。
CREATE TABLE table_name(
属性名 数据类型,
属性名 数据类型,
....
属性名 数据类型,
FULLTEXT INDEX|KEY [索引名](属性名1 [(长度)] [ASC||DESC])
);
实际例子:
CREATE TABLE t_dept(
deptno INT,
dname VARCHAR(20),
LOC VARCHAR(40),
FULLTEXT INDEX index_loc(loc)
);
CREATE FULLTEXT INDEX 索引名
ON 表名(属性名[(长度)] [ASC|DESC]);
实际例子:
CREATE FULLTEXT INDEX index_loc
ON t_dept(loc);
ALTER TABLE table_name
ADD FULLTEXT INDEX 索引名(属性名[(长度)] [ASC||DESC]);
实际例子:
ALTER TABLE t_dept
ADD FULLTEXT INDEX index_loc(loc);
所谓多列索引,是指在创建索引时,所关联的字段不是一个字段,而是多个字段。虽然可以通过所关联的字段进行查询,但是只有查询条件中使用了所关联字段中的第一个字段,多列索引才会被使用。
CREATE TABLE table_name(
属性名 数据类型,
属性名 数据类型,
....
属性名 数据类型,
INDEX|KEY [索引名](属性名1 [(长度)] [ASC||DESC],
........
属性名1 [(长度)] [ASC||DESC])
);
实际例子:dname和loc均为索引
CREATE TABLE t_dept(
deptno INT,
dename VARCHAR(20),
loc VARCHAR(40),
KEY index_dname_loc(dname,loc)
);
CREATE INDEX 索引名
ON 表名(属性名[(长度)] [ASC|DESC],
......
属性名[(长度)] [ASC|DESC]
);
实际例子:
CREATE INDEX index_dname_loc
ON t_dept (dname,loc);
ALTER TABLE table_name
ADD INDEX|KEY 索引名(属性名[(长度)] [ASC|DESC],
......
属性名[(长度)] [ASC|DESC]
);
实际例子:
ALTER TABLE t_dept
ADD INDEX index_dname_loc(dname,loc);
DROP INDEX index_name
ON table_name;
创建表时加入索引
CREATE TABLE table_name(
属性名 数据类型,
属性名 数据类型,
.....
属性名 数据类型,
{约束关键字:UNIQUE,FULLTEXT} INDEX|KEY [索引名](属性名1[(长度)] [ASC||DESC])
);
在已经常见好的表中添加内容:
CREATE {约束关键字:UNIQUE,FULLTEXT} INDEX 索引名
ON 表名(属性名[(长度)] [ASC|DESC]);
ALTER TABLE table_name
ADD {约束关键字:UNIQUE,FULLTEXT} INDEX 索引名(属性名[(长度)] [ASC||DESC]);