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', '[email protected]');
```

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 = '[email protected]' 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, '[email protected]', '2020-01-15');
    INSERT INTO employees (name, position, salary, email) VALUES ('Bob', 'Developer', 60000, '[email protected]');
    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;
相关推荐
IvanCodes6 分钟前
MySQL 数据库备份与还原
大数据·数据库·sql·mysql
mahuifa18 分钟前
ubuntu18.04编译qt5.14.2源码
开发语言·数据库·qt
Freedom℡1 小时前
Spark,连接MySQL数据库,添加数据,读取数据
数据库·hadoop·spark
Code哈哈笑2 小时前
【图书管理系统】用户注册系统实现详解
数据库·spring boot·后端·mybatis
2401_837088502 小时前
SQL性能分析
数据库·sql
瓜皮弟子头很铁2 小时前
多项目共用SQL 添加需要字段
数据库·sql
冰茶_2 小时前
掌握LINQ:查询语法与方法语法全解析
sql·学习·microsoft·微软·c#·linq
CryptoRzz2 小时前
股票数据源对接技术指南:印度尼西亚、印度、韩国
数据库·python·金融·数据分析·区块链
Pluto_CSND3 小时前
hbase shell的常用命令
大数据·数据库·hbase
哈哈真棒3 小时前
sparkSQL读入csv文件写入mysql(2)
数据库·mysql