Skip to content

SQL

Truncate & Delete & Drop

  • Truncate TABLE 删除表中所有的行, 速度更快
  • DELETE 支持 WHERE 子句
  • Drop Table/Index/DATABASE 删除表,索引,数据库

约束(Constraints)

  • NOT NULL 指示某列不能存储 NULL 值。
  • UNIQUE 保证某列的每行必须有唯一的值
  • PRIMARY KEY NOT NULL 和 UNIQUE 的结合。
  • FOREIGN KEY 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK 保证列中的值符合指定的条件。
  • DEFAULT 默认约束
CREATE TABLE Persons
(
  Id_P int NOT NULL PRIMARY KEY,
  LastName varchar(255) NOT NULL
)
  ```
## 常用类型(mysql)
* CHAR(size)  size最多 255 个字符
* VARCHAR(size) 可变长字符串,超过255 转为 TEXT
* TEXT 65,535 个字符
* TINYTEXT 255个字符
* BLOB/MEDIUMBLOB/LONGBLOB   二进制BLOB 65535 / 16,777,215 字节
* MEDIUMTEXT/LONGTEXT
* TINYINT/SMALLINT/INT/
* FLOAT/DOUBLE
* DECIMAL
* DATE   YYYY-MM-DD
* DATETIME   YYYY-MM-DD HH:MM:SS
* TIMESTAMP  时间戳
* TIME       HH:MM:SS
## 创建索引
```sql
CREATE UNIQUE INDEX index_name
ON table_name (column_name)

CREATE INDEX PIndex
ON Persons (LastName, FirstName)

JOIN

JOIN/INNER JOIN 多个表中返回满足JOIN条件的所有行

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;

LEFT JOIN/LEFT OUTER JOIN 左表返回所有行即使右表没有匹配,右表没有时该行相关的数据为NULL

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

RIGHT JOIN /RIGHT OUTER JOIN 类似LEFT JOIN换成了右表始终返回

FULL OUTER JOIN: MYSQL 中不支持

联合索引/最左匹配

根据WHERER语句的顺序从左到右查找满足相同规则的索引

Mysql innodb 使用B+树