CREATE TABLE
[IF NOT EXISTS] tb_name -- 不存在才创建,存在就跳过
(column_name1 data_type1 -- 列名和类型必选
[ PRIMARY KEY -- 可选的约束,主键
| FOREIGN KEY -- 外键,引用其他表的键值
| AUTO_INCREMENT -- 自增ID
| COMMENT comment -- 列注释(评论)
| DEFAULT default_value -- 默认值
| UNIQUE -- 唯一性约束,不允许两条记录该列值相同
| NOT NULL -- 该列非空
], ...
) [CHARACTER SET charset] -- 字符集编码
[COLLATE collate_value] -- 列排序和比较时的规则(是否区分大小写等)
示例
create table user_info_vip (
id int(11) primary key auto_increment comment '自增ID',
uid int(11) not null unique comment '用户ID',
nick_name varchar(64) comment'昵称',
achievement int(11) default 0 comment'成就值',
level int(11) comment'用户等级',
job varchar(32) comment'职业方向',
register_time datetime default CURRENT_TIMESTAMP comment'注册时间'
)default charset=utf8;
CREATE TABLE tb_name LIKE tb_name_old
CREATE TABLE tb_name AS SELECT * FROM tb_name_old WHERE options
ALTER TABLE 表名 修改选项
选项集合:
{ ADD COLUMN <列名> <类型> -- 增加列
| CHANGE COLUMN <旧列名> <新列名> <新列类型> -- 修改列名或类型
| ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT } -- 修改/删除 列的默认值
| MODIFY COLUMN <列名> <类型> -- 修改列类型
| DROP COLUMN <列名> -- 删除列
| RENAME TO <新表名> -- 修改表名
| CHARACTER SET <字符集名> -- 修改字符集
| COLLATE <校对规则名> } -- 修改校对规则(比较和排序时用到)
示例
ALTER TABLE user_info CHANGE job profession varchar(10);
DROP TABLE [IF EXISTS] 表名1 [, 表名2]
示例
drop table if exists exam_record
CREATE
[UNIQUE -- 唯一索引
| FULLTEXT -- 全文索引
] INDEX index_name ON table_name -- 不指定唯一或全文时默认普通索引
(column1[(length) [DESC|ASC]] [,column2,...]) -- 可以对多列建立组合索引
示例
CREATE INDEX idx_duration ON examination_info(duration);
ALTER TABLE tb_name ADD [UNIQUE | FULLTEXT] [INDEX] index_content(content)
DROP INDEX <索引名> ON <表名>
ALTER TABLE <表名> DROP INDEX <索引名>
索引使用时满足最左前缀匹配原则,即对于组合索引(col1, col2),在不考虑引擎优化时,条件必须是col1在前col2在后,或者只使用col1,索引才会生效;
索引不包含有NULL值的列
一个查询只使用一次索引,where中如果使用了索引,order by就不会使用
like做字段比较时只有前缀确定时才会使用索引
在列上进行运算后不会使用索引,如year(start_time)<2020不会使用start_time上的索引
加法 (+):用于两个数值的相加,如 5 + 3。
减法 (-):用于两个数值的相减,如 10 - 7。
乘法 (*):用于两个数值的相乘,如 4 * 2。
除法 (/):用于两个数值的相除,如 15 / 3。
取模(%):返回除法的余数,如 7 % 2 返回 1。
等于 (=):检查两个值是否相等,如 age = 25。
不等于 (<>) 或 (!=):检查两个值是否不相等,如 age <> 30 或 age != 30。
大于 (>):检查一个值是否大于另一个值,如 salary > 50000。
小于 (<):检查一个值是否小于另一个值,如 age < 18。
大于等于 (>=):检查一个值是否大于或等于另一个值,如 score >= 80。
小于等于 (<=):检查一个值是否小于或等于另一个值,如 price <= 100。
逻辑非 (NOT):反转布尔值,如 NOT (age < 18)。
逻辑与 (AND):两个条件都必须为真,如 (age > 18) AND (age < 60)。
逻辑或 (OR):至少一个条件为真,如 (age < 18) OR (age > 60)。
逻辑异或 (XOR):在某些SQL系统中可用,表示两个条件中只有一个为真。
逻辑等价 (EQV):在特定SQL系统中,用于逻辑等价判断。
字符串连接 (& 或 -):在某些SQL实现中,用于连接字符串,但更常见的是使用 CONCAT() 函数或 ||(在某些数据库中)。
LIKE:用于模式匹配,如 name LIKE 'John%' 匹配所有以"John"开头的名字。
BETWEEN:用于范围查询,如 age BETWEEN 18 AND 30。
IN:检查值是否在列表中,如 id IN (1, 2, 3)。
IS NULL 和 IS NOT NULL:用于检查值是否为NULL。
NULL-safe 等于( <=> ):MySQL特有的,用于NULL安全的比较。