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;
相关推荐
月空MoonSky13 分钟前
Oracle中TRUNC()函数详解
数据库·sql·oracle
momo小菜pa14 分钟前
【MySQL 06】表的增删查改
数据库·mysql
向上的车轮1 小时前
Django学习笔记二:数据库操作详解
数据库·django
编程老船长1 小时前
第26章 Java操作Mongodb实现数据持久化
数据库·后端·mongodb
Mephisto.java1 小时前
【力扣 | SQL题 | 每日四题】力扣2082, 2084, 2072, 2112, 180
sql·算法·leetcode
全栈师2 小时前
SQL Server中关于个性化需求批量删除表的做法
数据库·oracle
Data 3172 小时前
Hive数仓操作(十七)
大数据·数据库·数据仓库·hive·hadoop
BergerLee3 小时前
对不经常变动的数据集合添加Redis缓存
数据库·redis·缓存
程序员大金3 小时前
基于SpringBoot+Vue+MySQL的装修公司管理系统
vue.js·spring boot·mysql
gorgor在码农3 小时前
Mysql 索引底层数据结构和算法
数据结构·数据库·mysql