结构化查询语言(英语: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
自动编号,且必须与主键组合使用。
数值型数据。
默认情况下,起始值为1,每次的增量为1。
1.保证数据的完整性和一致性。
2.分为表级约束(针对两个或两个以上的字段进行约束)和列级约束(针对某一个字段进行约束)。
3.类型包括:
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');
INSERT t6 (username) VALUES ('Chars');
NULL,字段值可以为空。
NOT NULL,字段值禁止为空。不存在表级约束。
主键约束。
每张数据表只能存在一个主键。
主键保证记录的唯一性。
主键自动为NOT NULL。
注意:
AUTO_INCREMENT
必须与PRIMARY KEY
一起使用。但是,PRIMARY KEY
不一定与AUTO_INCREMENT
一起使用。
唯一约束。
唯一约束可以保证记录的唯一性。
唯一约束的字段可以为空值(NULL)。
每张数据表可以存在多个唯一约束。
注意:UNIQUE KEY与PRIMARY KEY区别
PRIMARY KEY每张数据表只能有一个,且不能为空。
UNIQUE 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));