在创建表前需要打开数据库
mysql> USE db_name;
mysql> CREATE TABLE [ IF NOT EXISTS ] table_name (
column_name data_type,
...
);
如:
mysql> CREATE TABLE user (
name VARCHAR(20),
age TINYINT UNSIGNED,
salary FLOAT(8,2) UNSIGNED
);
mysql> SHOW TABLES [ FROM db_name ] [ LIKE 'pattern' | WHERE expr ];
mysql> SHOW COLUMNS FROM tb_name;
mysql> INSERT [ INTO ] tb_name [( col_name,... )] VALUES (val,...);
如果不写列名,VALUES 必须包含所有字段,如果写了列名,则 VALUES 值与列名一一对应。
mysql> SELECT expression,... FROM tb_name;
- 约束保证数据的完整性和一致性。
- 约束分为表级约束和列级约束。
- 约束类型包括:
- NOT NULL(非空约束)
- PRIMARY KEY(主键约束)
- UNIQUE KEY(唯一约束)
- DEFAULT(默认约束)
- FOREIGN KEY(外键约束)
NULL 和 NOT NULL,表示允许为空和不允许为空,默认为 NULL
mysql> CREATE TABLE user (
username CARCHAR NOT NULL,
age TINYINT NULL
);
AUTO_INCREMENT 自动编号必须与主键组合使用,默认情况下起始值为1,每次的增量为1
mysql> CREATE TABLE user (
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY
);
PRIMARY KEY
- 主键约束
- 每张数据表只能存在一个主键
- 主键保证记录的唯一性
- 主键自动为 NOT NULL
UNIQUE KEY
- 唯一约束
- 唯一约束可以保证记录的唯一性
- 唯一约束的字段可以为空值
- 每张数据表可以存在多个唯一约束
DEFAULT 当插入记录时,如果没有明确为字段赋值,则自动赋予默认值
mysql> CREATE TABLE tb (
column ENUM('a','b','c') DEFAULT 'a'
);
FOREIGN KEY 保持数据一致性,完整性。 实现一对一或一对多关系。
mysql> CREATE TABLE users(
-> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> pid BIGINT,
-> POREIGN KEY (pid) REFERENCES provinces (id)
-> );
- 父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
- 数据表的存储引擎只能为 InnoDB。
- 外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度可以不同。
- 外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL 将自动创建索引。
编辑数据表的默认存储引擎 编辑 MySQL 配置文件
default-storage-engine=INNODB
查看表的索引
mysql> SHOW INDEXES FROM provinces\G;
\G
表示以表格的形式显示。
- CASCADE:从父表删除或更新时自动删除或更新子表中匹配的行。
- SET NULL:从父表删除或更新行时设置子表中的外键列为 NULL。如果使用该选项,必须保证子表列没有指定 NOT NULL。
- RESTRICT:拒绝对父表的删除或更新操作。
- NO ACTION:标准 SQL 的关键字,在 MySQL 中与 RESTRICT 相同。
mysql> CREATE TABLE users(
-> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> pid BIGINT,
-> POREIGN KEY (pid) REFERENCES provinces (id) ON DELETE CASCADE
-> );
在平时项目中很少使用外键约束,因为外键约束只能使用 InnoDB 存储引擎,我们采用“逻辑外键”,即设计数据库时按照外键约束的结构设计,但不使用 FOREIGN KEY 关键字。
对一个数据列建立的约束,称为列级约束。 对多个数据列建立的约束,称为表级约束。 列级约束既可以在列定义时声明,也可以在列定义后声明。 表级约束只能在列定义后声明。