SQL介绍(二)完整性约束,数据类型,索引(创建,更新,删除)

主要参考:

书籍:

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索引总结


1,MySQL支持完整性约束

所谓完整性是指数据的准确性和一致性,而完整性检查是指检查数据的准确性和一致性。

MySQL数据库管理系统提供了一种机制来检查数据库表中的数据是否满足规定的条件

以保证数据库表中的数据的准确性和一致性,这种机制就是约束。

完整性约束如下:

NOT NULL 约束字段的值不能为空
DEFAULT 设置字段的默认值
UNIQUE KEY(UK) 约束字段的值是唯一
PRIMARY KEY(PK) 约束字段为表的主键,可以作为该表记录的唯一标识
AUTO_INCREMENT 约束字段的值为自动增加
FOREIGN KEY(FK) 约束字段为表的外键

 

 

 

 

 

 

 

约束可以分为:

  1. 单列约束
  2. 多列约束

1.1设置非空约束(NOT NULL,NK)

当数据库表中的某个字段的内容不希望设置为NULL时,则可以使用NK约束进行设置,即NK约束在创建数据库表时为某些字段加上“NOT NULL”约束条件,保证所有记录中,该字段都有值,如果插入的记录中,该字段为空值,则数据库管理系统会报错。

CREATE TABLE table_name (
    属性名 数据类型 NOT NULL,
.......
);

1.2设置字段的默认值(DEFAULT)

当为数据库插入一条新纪录时,如果没有为某个字段赋值,那么数据库系统会自动为这个字段插入默认值,为了达到这种效果,可以通过SQL语句关键字DEFAULT来设置。

CREATE TABLE table_name (
    属性名 数据类型 DEFAULT 默认值,
.......
);

1.3设置唯一约束(UNIQUE,UK)

当数据库表中的某个字段的内容不允许重复时,则可以使用UK约束进行设置,即UK约束在创建数据库表时为某些字段加上“UNIQUE”约束条件,保证所有记录中该字段上的值不重复,如果重复,数据库报错。 

CREATE TABLE table_name (
    属性名 数据类型 UNIQUE,
.......
);

1.4设置主键约束(PRIMARY KEY,PK)

当想用数据库表中的某个字段来唯一标识所有记录时,则可以使用PK约束进行设置。即PK约束在创建数据库表时为某些字段加上“PRIMARY KEY”约束条件,则该字段可以唯一地标示所有记录。

在数据库表中之所以设置主键约束,是为了便于数据库管理系统快速地查找到表中的记录。在具体设置主键约束时,必须要满足主键字段的值是唯一、非空的。由于主键可以是单一字段,也可以是多个字段,因此分为单字段主键和多字端主键。

1.4.1单字段主键

CREATE TABLE table_name (
    属性名 数据类型 PRIMARY KEY,
.......
);

1.4.2多字端主键

CREATE TABLE table_name (
    属性名1 数据类型1,
    属性名2 数据类型1,
    CONSTRAINT PK_name PRIMARY KEY(属性名1,属性名2)
.......
);
-PK_name被成为约束名,其中属性名1和属性名2已经被设置成联合主键

 

1.5设置字段值自动增加(AUTO_INCREMENT)

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,

.......
);

 

1.6设置外键约束(FOREIGN KEY,FK)

前面介绍的完整性约束都是在单表中进行设置,而本节所要介绍的外键约束则保证多个表(通常为两个表)之间的参照完整性,即构建于两个表的两个字段之间的参照关系。

设置外键约束的两个表之间具有父子关系,即字表中某个字段的取值范围由父表决定。例如表示一种部门和雇员关系,即每个部分有多少个雇员。首先应该有两个表,部门表和雇员表,然后雇员表中有一个表示部门编号的字段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 父表(属性名);
);

 2,MySQL数据库中的数据类型

整数类型
整数类型 字节
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相似,可以储存二进制数据,图片,音乐或视频。

3,索引的操作

在MySQL数据库中,数据库对象表是存储和操作数据的逻辑结构,下面要介绍的数据库对象索引则是一种有效组合数据的方式。

通过索引对象,可以快速查询到数据库对象表中的特定记录,是一种提高性能的常用方式。

一个索引会包含表中按照一定顺序排列的一列或多列字段,索引的操作包含常见索引,修改索引和删除索引,这些操作是MySQL软件中最基本,最重要的操作。

3.1创建和查看普通索引-INDEX|KEY [索引名](属性名1[(长度)] [ASC||DESC])

所谓的普通索引,就是在创建索引时,不附加任何限制条件(唯一、非空等),该类型的索引可以创建在任何数据类型的字段上。

3.1.1创建表时创建普通索引

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)
)

3.1.2在已经存在的表上创建普通索引

3.1.2.1CREATE INDEX

CREATE INDEX 索引名
       ON 表名(属性名[(长度)] [ASC|DESC]);
CREATE INDEX index_deptno
       ON t_dept(deptno);

3.1.2.2ALTER TABLE

ALTER TABLE table_name
   ADD INDEX|KEY 索引名(属性名[(长度)] [ASC|DESC]);
ALTER TABLE t_dept
   ADD INDEX index_deptno(deptno);

3.2创建和查看唯一索引-UNIQUE INDEX|KEY [索引名](属性名1 [(长度)] [ASC||DESC])

所谓唯一索引,就是在创建索引时,限制索引的值必须是唯一的。通过该类型的索引可以更快速地查询某条信息,在MySQL中,根据创建索引方式,可以分为自动索引和手动索引两种。

3.2.1创建表时创建唯一索引

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)
);

3.2.2在已存在的表上创建唯一索引

3.2.2.1CREATE INDEX

CREATE UNIQUE INDEX 索引名
       ON 表名(属性名[(长度)] [ASC|DESC]);

  实例演示:在的deptno上创建唯一索引。

CREATE UNIQUE INDEX index_deptno
       ON t_dept(deptno);

 3.2.2.1ALTER TABLE

ALTER TABLE table_name
   ADD UNIQUE INDEX 索引名(属性名[(长度)] [ASC||DESC]);

 实例演示:在的deptno上创建唯一索引。

ALTER TABLE t_dept
   ADD UNIQUE INDEX index_deptno(deptno);

3.3创建和查看全文索引(for CHAR,VACHAR和TEXT)

全文索引主要关联在数据类型CHAR,VACHAR和TEXT的字段上,以便能够更快速地查询数据量比较大的字符串类型和字段。

 3.3.1创建表时创建全文索引

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)
);

 3.3.2在已经存在的表上创建全文索引

 3.3.2.1CREATE INDEX

CREATE FULLTEXT INDEX 索引名
       ON 表名(属性名[(长度)] [ASC|DESC]);

 实际例子:

CREATE FULLTEXT INDEX index_loc
       ON t_dept(loc);

 3.3.2.2ALTER TABLE 

ALTER TABLE table_name
   ADD FULLTEXT INDEX 索引名(属性名[(长度)] [ASC||DESC]);

实际例子: 

ALTER TABLE t_dept
   ADD FULLTEXT INDEX index_loc(loc);

 

3.4创建和查看多列索引

所谓多列索引,是指在创建索引时,所关联的字段不是一个字段,而是多个字段。虽然可以通过所关联的字段进行查询,但是只有查询条件中使用了所关联字段中的第一个字段,多列索引才会被使用。

3.4.1创建表时创建多列索引

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)
);

 3.3.4在已经存在的表上创建全文索引

 3.3.4.1CREATE INDEX

CREATE INDEX 索引名
       ON 表名(属性名[(长度)] [ASC|DESC],
               ......
               属性名[(长度)] [ASC|DESC]
);

 实际例子:

CREATE INDEX index_dname_loc
       ON t_dept (dname,loc);

 3.3..2ALTER TABLE 

ALTER TABLE table_name
   ADD INDEX|KEY 索引名(属性名[(长度)] [ASC|DESC],
                        ......
                        属性名[(长度)] [ASC|DESC]
);

实际例子:

ALTER TABLE t_dept
   ADD INDEX index_dname_loc(dname,loc);

 

3.5删除索引

DROP INDEX index_name
       ON table_name;

3.6索引总结

创建表时加入索引

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]);

 

你可能感兴趣的:(Qt,数据库)