SQL杂记

1.表的创建、修改、删除

1.1 直接创建表:

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;

1.2 从另一张表复制表结构创建表:

CREATE TABLE tb_name LIKE tb_name_old

1.3 从另一张表的查询结果创建表:

CREATE TABLE tb_name AS SELECT * FROM tb_name_old WHERE options

2.1 修改表:

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);

3.1 删除表:

DROP TABLE [IF EXISTS] 表名1 [, 表名2]

示例

drop table if exists exam_record

2.索引的创建、修改、删除

1.1create方式创建索引:

CREATE 
  [UNIQUE -- 唯一索引
  | FULLTEXT -- 全文索引
  ] INDEX index_name ON table_name -- 不指定唯一或全文时默认普通索引
  (column1[(length) [DESC|ASC]] [,column2,...]) -- 可以对多列建立组合索引  

示例

CREATE INDEX idx_duration ON examination_info(duration);

1.2 alter方式创建索引:

ALTER TABLE tb_name ADD [UNIQUE | FULLTEXT] [INDEX] index_content(content)

2.1 drop方式删除索引:

DROP INDEX <索引名> ON <表名>

2.2 alter方式删除索引:

ALTER TABLE <表名> DROP INDEX <索引名>
  • 3.1 索引的使用:

    • 索引使用时满足最左前缀匹配原则,即对于组合索引(col1, col2),在不考虑引擎优化时,条件必须是col1在前col2在后,或者只使用col1,索引才会生效;

    • 索引不包含有NULL值的列

    • 一个查询只使用一次索引,where中如果使用了索引,order by就不会使用

    • like做字段比较时只有前缀确定时才会使用索引

    • 在列上进行运算后不会使用索引,如year(start_time)<2020不会使用start_time上的索引

3.运算符

3.1. 算术运算符

加法 (+):用于两个数值的相加,如 5 + 3。

减法 (-):用于两个数值的相减,如 10 - 7。

乘法 (*):用于两个数值的相乘,如 4 * 2。

除法 (/):用于两个数值的相除,如 15 / 3。

取模(%):返回除法的余数,如 7 % 2 返回 1。

3.2. 比较运算符

等于 (=):检查两个值是否相等,如 age = 25。

不等于 (<>) 或 (!=):检查两个值是否不相等,如 age <> 30 或 age != 30。

大于 (>):检查一个值是否大于另一个值,如 salary > 50000。

小于 (<):检查一个值是否小于另一个值,如 age < 18。

大于等于 (>=):检查一个值是否大于或等于另一个值,如 score >= 80。

小于等于 (<=):检查一个值是否小于或等于另一个值,如 price <= 100。

3.3. 逻辑运算符

逻辑非 (NOT):反转布尔值,如 NOT (age < 18)。

逻辑与 (AND):两个条件都必须为真,如 (age > 18) AND (age < 60)。

逻辑或 (OR):至少一个条件为真,如 (age < 18) OR (age > 60)。

逻辑异或 (XOR):在某些SQL系统中可用,表示两个条件中只有一个为真。

逻辑等价 (EQV):在特定SQL系统中,用于逻辑等价判断。

3.4. 连接运算符

字符串连接 (& 或 -):在某些SQL实现中,用于连接字符串,但更常见的是使用 CONCAT() 函数或 ||(在某些数据库中)。

3.5. 其他特殊运算符

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安全的比较。

你可能感兴趣的:(SQL,sql,数据库)