一、数据库操作
-
创建数据库
sql
CREATE DATABASE database_name;
创建一个名为 database_name
的数据库。
3. 1、删除数据
sql
DROP DATABASE database_name;
删除一个名为 database_name
的数据库。
5. 2、选择数据库
sql
USE database_name;
-
选择一个名为
database_name
的数据库进行操作。 -
二、表操作
-
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` 的表。
-
3、修改表
-
添加列:
```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、插入数据
```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、连接查询
-
内连接:
sqlSELECT 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、分组和聚合
-
分组:
sqlSELECT column1, COUNT(*) FROM table GROUP BY column1;
聚合函数:
sqlSELECT COUNT(column), SUM(column), AVG(column), MAX(column), MIN(column) FROM table;
五、索引和约束
-
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、**查看索引**
-
使用
SHOW INDEX
命令可以查看表的索引信息。
```sql
SHOW INDEX FROM table_name;
```
示例:
```sql
SHOW INDEX FROM users;
```
4、**全文索引**
-
全文索引主要用于文本搜索,可以对大量文本进行高效的关键词搜索。
```sql
CREATE FULLTEXT INDEX index_name ON table_name (column1, column2, ...);
```
示例:
```sql
CREATE FULLTEXT INDEX idx_content ON articles (content);
```
5、**空间索引**
-
空间索引用于地理数据的查询,需要
MyISAM
或InnoDB
存储引擎支持。pythonCREATE SPATIAL INDEX index_name ON table_name (geometry_column);
示例:
sqlCREATE SPATIAL INDEX idx_location ON places (location);
6、主键约束
sqlCREATE TABLE table_name ( column1 datatype PRIMARY KEY, column2 datatype );
示例:
sqlCREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL );
如果在创建表之后添加主键:
sqlALTER TABLE table_name ADD PRIMARY KEY (column1, column2, ...);
示例:
sqlALTER TABLE users ADD PRIMARY KEY (id);
7、外键约束
-
外键约束用于维护表之间的数据一致性。它确保一个表中的值对应另一个表中的值。
sqlCREATE TABLE table_name ( column1 datatype, column2 datatype, CONSTRAINT fk_name FOREIGN KEY (column) REFERENCES other_table (other_column) );
示例:
sqlCREATE 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) );
如果在创建表之后添加外键:
sqlALTER TABLE table_name ADD CONSTRAINT fk_name FOREIGN KEY (column) REFERENCES other_table (other_column);
示例:
sqlALTER TABLE orders ADD CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(id);
8、唯一约束
-
唯一约束确保列中的所有值都是唯一的。
```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、检查约束**
-
检查约束用于确保列中的值符合指定的条件。MySQL从8.0.16开始支持CHECK约束。
sqlCREATE TABLE table_name ( column1 datatype, column2 datatype, CONSTRAINT chk_name CHECK (condition) );
示例:
sqlCREATE TABLE products ( product_id INT PRIMARY KEY, price DECIMAL(10, 2), CONSTRAINT chk_price CHECK (price > 0) );
如果在创建表之后添加检查约束:
sqlALTER TABLE table_name ADD CONSTRAINT chk_name CHECK (condition);
示例:
sqlALTER TABLE products ADD CONSTRAINT chk_price CHECK (price > 0);
10、默认约束
-
默认约束用于在没有提供值时,为列分配默认值。
sqlCREATE TABLE table_name ( column1 datatype DEFAULT default_value, column2 datatype );
示例:
sqlCREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
如果在创建表之后添加默认约束:
sqlALTER TABLE table_name ALTER COLUMN column SET DEFAULT default_value;
示例:
sqlALTER 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;