mysql数据库SQL语句大全(上)

一、数据库操作

  1. 创建数据库

sql 复制代码
CREATE DATABASE database_name;

创建一个名为 database_name 的数据库。
3. 1、删除数据

sql 复制代码
DROP DATABASE database_name;

删除一个名为 database_name 的数据库。
5. 2、选择数据库

sql 复制代码
USE database_name;
  1. 选择一个名为 database_name 的数据库进行操作。

  2. 二、表操作

  3. 1、创建表

复制代码
```sql
CREATE TABLE table_name (
    column1 datatype [constraints],
    column2 datatype [constraints],
    ...
);
```

创建一个名为 `table_name` 的表。

示例:

```sql
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```

2、删除表
复制代码
```sql
DROP TABLE table_name;
```

删除一个名为 `table_name` 的表。
  1. 3、修改表

  2. 添加列:

复制代码
```sql
ALTER TABLE table_name ADD column_name datatype [constraints];
```

删除列:
复制代码
```sql
ALTER TABLE table_name DROP COLUMN column_name;
```

修改列:
复制代码
```sql
ALTER TABLE table_name MODIFY COLUMN column_name datatype [constraints];
```

4、重命名表
复制代码
```sql
ALTER TABLE old_table_name RENAME TO new_table_name;
```

三、数据操作
  1. 1、插入数据

复制代码
```sql
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
```

示例:
复制代码
```sql
INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com');
```

2、查询数据
复制代码
```sql
SELECT column1, column2, ... FROM table_name [WHERE condition] [ORDER BY column1, column2, ...] [LIMIT number];
```

示例:
复制代码
```sql
SELECT id, username, email FROM users WHERE username = 'john_doe';
```

3、更新数据
复制代码
```sql
UPDATE table_name SET column1 = value1, column2 = value2, ... [WHERE condition];
```

示例:
复制代码
```sql
UPDATE users SET email = 'new_email@example.com' WHERE username = 'john_doe';
```

4、删除数据
复制代码
```sql
DELETE FROM table_name WHERE condition;
```

示例:
复制代码
```sql
DELETE FROM users WHERE username = 'john_doe';
```

四、高级查询
  1. 1、连接查询

  2. 内连接:

    sql 复制代码
    SELECT columns FROM table1 INNER JOIN table2 ON table1.column = table2.column;

    左连接:

复制代码
```sql
SELECT columns FROM table1 LEFT JOIN table2 ON table1.column = table2.column;
```

右连接:

```sql
SELECT columns FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;
```

2、子查询

```sql
SELECT columns FROM table WHERE column IN (SELECT column FROM table WHERE condition);
```

示例:

```sql
SELECT username FROM users WHERE id IN (SELECT user_id FROM orders WHERE amount > 100);
```

3、分组和聚合
  1. 分组:

    sql 复制代码
    SELECT column1, COUNT(*) FROM table GROUP BY column1;

    聚合函数:

    sql 复制代码
    SELECT COUNT(column), SUM(column), AVG(column), MAX(column), MIN(column) FROM table;

    五、索引和约束

  2. 1、创建索引

复制代码
```sql
CREATE INDEX index_name ON table_name (column1, column2, ...);
```

示例:

```sql
CREATE INDEX idx_username ON users (username);
```

**唯一索引**:不允许索引列中有重复的值。

```sql
CREATE UNIQUE INDEX index_name ON table_name (column1, column2, ...);
```

示例:

```sql
CREATE UNIQUE INDEX idx_email ON users (email);
```

2、删除索引

```sql
DROP INDEX index_name ON table_name;
```

示例:

```sql
DROP INDEX idx_username ON users;
```

3、**查看索引**
  1. 使用 SHOW INDEX 命令可以查看表的索引信息。

复制代码
```sql
SHOW INDEX FROM table_name;
```

示例:

```sql
SHOW INDEX FROM users;
```

4、**全文索引**
  1. 全文索引主要用于文本搜索,可以对大量文本进行高效的关键词搜索。

复制代码
```sql
CREATE FULLTEXT INDEX index_name ON table_name (column1, column2, ...);
```

示例:

```sql
CREATE FULLTEXT INDEX idx_content ON articles (content);
```

5、**空间索引**
  1. 空间索引用于地理数据的查询,需要 MyISAMInnoDB 存储引擎支持。

    python 复制代码
    CREATE SPATIAL INDEX index_name ON table_name (geometry_column);

    示例:

    sql 复制代码
    CREATE SPATIAL INDEX idx_location ON places (location);

    6、主键约束

    sql 复制代码
    CREATE TABLE table_name (
        column1 datatype PRIMARY KEY,
        column2 datatype
    );

    示例:

    sql 复制代码
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) NOT NULL
    );

    如果在创建表之后添加主键:

    sql 复制代码
    ALTER TABLE table_name ADD PRIMARY KEY (column1, column2, ...);

    示例:

    sql 复制代码
    ALTER TABLE users ADD PRIMARY KEY (id);

    7、外键约束

  2. 外键约束用于维护表之间的数据一致性。它确保一个表中的值对应另一个表中的值。

    sql 复制代码
    CREATE TABLE table_name (
        column1 datatype,
        column2 datatype,
        CONSTRAINT fk_name FOREIGN KEY (column) REFERENCES other_table (other_column)
    );

    示例:

    sql 复制代码
    CREATE TABLE orders (
        order_id INT AUTO_INCREMENT PRIMARY KEY,
        user_id INT,
        amount DECIMAL(10, 2),
        CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(id)
    );

    如果在创建表之后添加外键:

    sql 复制代码
    ALTER TABLE table_name ADD CONSTRAINT fk_name FOREIGN KEY (column) REFERENCES other_table (other_column);

    示例:

    sql 复制代码
    ALTER TABLE orders ADD CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(id);

    8、唯一约束

  3. 唯一约束确保列中的所有值都是唯一的。

复制代码
```sql
CREATE TABLE table_name (
    column1 datatype UNIQUE,
    column2 datatype
);
```

示例:

```sql
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(100) UNIQUE
);
```

如果在创建表之后添加唯一约束:

```sql
ALTER TABLE table_name ADD UNIQUE (column);
```

**9、检查约束**
  1. 检查约束用于确保列中的值符合指定的条件。MySQL从8.0.16开始支持CHECK约束。

    sql 复制代码
    CREATE TABLE table_name (
        column1 datatype,
        column2 datatype,
        CONSTRAINT chk_name CHECK (condition)
    );

    示例:

    sql 复制代码
    CREATE TABLE products (
        product_id INT PRIMARY KEY,
        price DECIMAL(10, 2),
        CONSTRAINT chk_price CHECK (price > 0)
    );

    如果在创建表之后添加检查约束:

    sql 复制代码
    ALTER TABLE table_name ADD CONSTRAINT chk_name CHECK (condition);

    示例:

    sql 复制代码
    ALTER TABLE products ADD CONSTRAINT chk_price CHECK (price > 0);

    10、默认约束

  2. 默认约束用于在没有提供值时,为列分配默认值。

    sql 复制代码
    CREATE TABLE table_name (
        column1 datatype DEFAULT default_value,
        column2 datatype
    );

    示例:

    sql 复制代码
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );

    如果在创建表之后添加默认约束:

    sql 复制代码
    ALTER TABLE table_name ALTER COLUMN column SET DEFAULT default_value;

    示例:

    sql 复制代码
    ALTER TABLE users ALTER COLUMN created_at SET DEFAULT CURRENT_TIMESTAMP;

    参考例子

    综合使用索引和约束可以提升查询效率和数据完整性。以下是一个综合示例:

    sql 复制代码
    -- 创建数据库
    CREATE DATABASE company;
    
    -- 选择数据库
    USE company;
    
    -- 创建员工表
    CREATE TABLE employees (
        id INT AUTO_INCREMENT PRIMARY KEY,               -- 主键约束
        name VARCHAR(100) NOT NULL,
        position VARCHAR(50),
        salary DECIMAL(10, 2) CHECK (salary > 0),        -- 检查约束
        email VARCHAR(100) UNIQUE,                       -- 唯一约束
        hire_date DATE DEFAULT CURRENT_DATE              -- 默认约束
    );
    
    -- 创建部门表
    CREATE TABLE departments (
        dept_id INT AUTO_INCREMENT PRIMARY KEY,
        dept_name VARCHAR(100) UNIQUE
    );
    
    -- 创建职位表,包含外键约束
    CREATE TABLE jobs (
        job_id INT AUTO_INCREMENT PRIMARY KEY,
        job_title VARCHAR(100),
        min_salary DECIMAL(10, 2),
        max_salary DECIMAL(10, 2),
        dept_id INT,
        CONSTRAINT fk_dept FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
    );
    
    -- 创建索引
    CREATE INDEX idx_emp_name ON employees (name);
    
    -- 插入数据
    INSERT INTO departments (dept_name) VALUES ('HR'), ('IT'), ('Finance');
    INSERT INTO employees (name, position, salary, email, hire_date) VALUES ('Alice', 'Manager', 75000, 'alice@example.com', '2020-01-15');
    INSERT INTO employees (name, position, salary, email) VALUES ('Bob', 'Developer', 60000, 'bob@example.com');
    INSERT INTO jobs (job_title, min_salary, max_salary, dept_id) VALUES ('Software Engineer', 50000, 100000, 2);
    
    -- 查询数据
    SELECT * FROM employees;
    SELECT * FROM jobs WHERE dept_id = 2;
相关推荐
岁岁种桃花儿4 小时前
MySQL从入门到精通系列:InnoDB记录存储结构
数据库·mysql
jiunian_cn5 小时前
【Redis】hash数据类型相关指令
数据库·redis·哈希算法
冉冰学姐5 小时前
SSM在线影评网站平台82ap4(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm框架·在线影评平台·影片分类
Exquisite.6 小时前
企业高性能web服务器(4)
运维·服务器·前端·网络·mysql
知识分享小能手6 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019数据库的操作(2)
数据库·学习·sqlserver
踩坑小念7 小时前
秒杀场景下如何处理redis扣除状态不一致问题
数据库·redis·分布式·缓存·秒杀
萧曵 丶8 小时前
MySQL 语句书写顺序与执行顺序对比速记表
数据库·mysql
Wiktok8 小时前
MySQL的常用数据类型
数据库·mysql
曹牧9 小时前
Oracle 表闪回(Flashback Table)
数据库·oracle
J_liaty9 小时前
Redis 超详细入门教程:从零基础到实战精通
数据库·redis·缓存