- 数据库
- MySQL 中的SQL(1)
结构化查询语言(英语:Structured Query Language,缩写:SQL),是一种特殊目的之编程语言,用于数据库中的标准数据查询语言,IBM公司最早使用在其开发的数据库系统中。
不过各种通行的数据库系统在其实践过程中都对SQL规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用。
### 数据库操作
#### 创建数据库
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] character_name
`{}`表示为必选项,即必填参数。`|`表示选项,即其中选取一项即可。`[]`表示为可选项。
`character_name`参数为指定数据库的编码方式,不填则使用MySQL配置的字符集编码。
#### 查看当前服务器下的数据表列表
SHOW {DATABASES | SCHEMAS} [LIKE 'pattern' | WHERE expr]
#### 删除数据库
DROP {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
#### AUTO_INCREMENT
自动编号,且必须与主键组合使用。
数值型数据。
默认情况下,起始值为1,每次的增量为1。
#### 约束
1.保证数据的完整性和一致性。
2.分为表级约束(针对两个或两个以上的字段进行约束)和列级约束(针对某一个字段进行约束)。
3.类型包括:
* NOT NULL 非空约束
* PRIMARY KEY 主键约束
* UNIQUE KEY 唯一约束
* DEFAULT 默认约束
* FOREIGN KEY 外键约束
CREATE TABLE t6(id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(20) NOT NULL UNIQUE KEY, sex ENUM('1', '2', '3') DEFAULT '3');
![](/uploads/article/2017/05/31/20170531222204_2348.png)
INSERT t6 (username) VALUES ('Chars');
![](/uploads/article/2017/05/31/20170531222257_2158.png)
#### 空值与非空值
NULL,字段值可以为空。
NOT NULL,字段值禁止为空。不存在表级约束。
#### PRIMARY KEY
主键约束。
每张数据表只能存在一个主键。
主键保证记录的唯一性。
主键自动为NOT NULL。
**注意:**
`AUTO_INCREMENT`必须与`PRIMARY KEY`一起使用。但是,`PRIMARY KEY`不一定与`AUTO_INCREMENT`一起使用。
#### UNIQUE KEY
唯一约束。
唯一约束可以保证记录的唯一性。
唯一约束的字段可以为空值(NULL)。
每张数据表可以存在多个唯一约束。
**注意:UNIQUE KEY与PRIMARY KEY区别**
PRIMARY KEY每张数据表只能有一个,且不能为空。
UNIQUE KEY每张数据表可以有多个,且可以为空。
#### DEFAULT
默认值。
当插入记录时,如果没有明确为字段赋值,则自动赋予默认值。
不存在表级约束。
#### FOREIGN KEY
保持数据一致性,完整性。
实现一对一或一对多关系。
关系型数据库名称的来源。
#### 外键约束的要求
1.父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
2.数据表的存储引擎只能为InnoDB。
3.外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。
4.外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。
#### 外键约束的参照操作
1.CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行。
2.SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL。
3.RESTRICT:拒绝对父表的删除或更新操作。
4.NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同。
**注意:**物理外键即使用FOREIGN KEY关键字定义表。逻辑外键即定义表的时候按照某种联系,但是不使用FOREIGN KEY关键字修饰。
#### 编辑数据表的默认存储引擎
MySQL配置文件
`default-storage-engine=INNODB`
示例:
create table provinces(id smallint unsigned primary key auto_increment, pname varchar(20) not null);
create table users(id smallint unsigned primary key auto_increment, username varchar(10) not null, pid bigint, foreign key(pid) references provinces(id));
# 报错
# ERROR 1215 (HY000): Cannot add foreign key constraint
# 因为类型不匹配
# 正确命令应该是:
create table users(id smallint unsigned primary key auto_increment, username varchar(10) not null, pid smallint unsigned, foreign key(pid) references provinces(id));
![](/uploads/article/2017/05/31/20170531222816_2399.png)
![](/uploads/article/2017/05/31/20170531222837_6549.png)