SQL(Structured Query Language)是一种用于管理关系数据库的标准语言。它包括以下几类语句:
- 1.数据定义语言(DDL):如CREATE, ALTER, DROP等,用于定义或更改数据库的结构。
- 2.数据操纵语言(DML):如SELECT, INSERT, UPDATE, DELETE等,用于查询和修改数据库中的数据。
- 3.数据控制语言(DCL):如GRANT, REVOKE等,用于数据库的访问控制。
- 4.事务控制语言(TCL):如COMMIT, ROLLBACK等,用于管理事务。
DDL语句
CREATE
1.使用规范:创建新的数据库、表、视图或索引。
2.应用场景:初始化数据库结构时。
3.注意事项:确保命名遵循规范,避免保留字冲突。
4.常见错误:未指定字段类型或大小,导致数据存储问题。
ALTER
1.使用规范:修改现有数据库对象的结构。
2.应用场景:调整表结构,如添加或删除列。
3.注意事项:小心使用,以免破坏现有数据结构。
4.常见错误:在有数据的情况下删除非空列。
DROP
1.使用规范:删除数据库对象。
2.应用场景:移除不再需要的表或数据库。
3.注意事项:谨慎使用,一旦执行,所有数据将不可恢复。
4.常见错误:误删重要数据。
DML语句
SELECT
1.使用规范:从数据库中检索数据。
2.应用场景:查询数据,支持多种条件和连接。
3.注意事项:合理使用WHERE子句过滤数据。
4.常见错误:返回过多不必要的数据,影响性能。
INSERT
1.使用规范:向表中添加新数据。
2.应用场景:添加新记录。
3.注意事项:确保插入的数据符合列的数据类型和约束。
4.常见错误:违反唯一性约束或引用完整性。
UPDATE
1.使用规范:修改表中的现有数据。
2.应用场景:更新记录。
3.注意事项:小心使用,避免无意向大量数据应用更改。
4.常见错误:错误地更新了错误的行或列。
DELETE
1.使用规范:从表中删除数据。
2.应用场景:移除不再需要的记录。
3.注意事项:确认删除的数据是正确的。
4.常见错误:未使用WHERE子句,意外删除所有数据。
DCL语句
GRANT/REVOKE
1.使用规范:管理数据库用户的权限。
2.应用场景:为用户分配或撤销权限。
3.注意事项:合理分配权限,防止未授权访问。
4.常见错误:过度宽松的权限设置可能导致安全风险。
TCL语句
COMMIT/ROLLBACK
1.使用规范:管理事务的提交和回滚。
2.应用场景:在一系列相关的数据库操作中确保数据的一致性。
3.注意事项:在事务中正确使用,以避免数据不一致。
4.常见错误:忘记提交事务,导致数据变更未保存。
实战技巧
1.编写可读的SQL代码:使用缩进和注释提高代码可读性。
2.性能优化:通过合理的索引和查询优化减少查询时间。
3.安全性考虑:避免SQL注入攻击,使用参数化查询或预编译语句。
4.备份与恢复:定期备份数据库,并验证备份的可用性。
例题:分别给library00数据库中的图书表、读者表、借阅表、类别表创建默认值约束、非空约束、检查约束,并进行规则测试。
解析:
首先,我们需要为library00数据库中的图书表、读者表、借阅表、类别表创建默认值约束、非空约束、检查约束。以下是创建这些约束的SQL语句:
1. 图书表(book):
```sql
ALTER TABLE book
ADD CONSTRAINT book_default_value DEFAULT '未知' FOR title,
ADD CONSTRAINT book_not_null CHECK (title IS NOT NULL),
ADD CONSTRAINT book_check_value CHECK (price > 0);
```
2. 读者表(reader):
```sql
ALTER TABLE reader
ADD CONSTRAINT reader_default_value DEFAULT '未知' FOR name,
ADD CONSTRAINT reader_not_null CHECK (name IS NOT NULL),
ADD CONSTRAINT reader_check_value CHECK (age >= 0);
```
3. 借阅表(borrow):
```sql
ALTER TABLE borrow
ADD CONSTRAINT borrow_default_value DEFAULT '未归还' FOR status,
ADD CONSTRAINT borrow_not_null CHECK (status IS NOT NULL),
ADD CONSTRAINT borrow_check_value CHECK (borrow_date <= return_date OR return_date IS NULL);
```
4. 类别表(category):
```sql
ALTER TABLE category
ADD CONSTRAINT category_default_value DEFAULT '其他' FOR type,
ADD CONSTRAINT category_not_null CHECK (type IS NOT NULL),
ADD CONSTRAINT category_check_value CHECK (stock >= 0);
```
接下来,我们进行规则测试。以下是一些测试用例:
1. 插入一本书,书名为空,价格为负数:
```sql
INSERT INTO book (title, price) VALUES ('', -10); -- 应违反非空约束和检查约束
```
2. 插入一个读者,姓名为空,年龄为负数:
```sql
INSERT INTO reader (name, age) VALUES ('', -1); -- 应违反非空约束和检查约束
```
3. 插入一条借阅记录,状态为空,还书日期早于借书日期:
```sql
INSERT INTO borrow (book_id, reader_id, borrow_date, return_date) VALUES (1, 1, '2022-01-01', '2022-01-02'); -- 应违反非空约束和检查约束
```
4. 插入一个类别,类型为空,库存为负数:
```sql
INSERT INTO category (type, stock) VALUES ('', -1); -- 应违反非空约束和检查约束
```
结论
通过本学期的学习,我们掌握了SQL语句的基本知识和应用技巧。在实际开发中,我们需要不断地实践和总结,以提高数据库操作的效率和安全性。希望本文能帮助大家巩固所学知识,为未来的数据库管理和开发打下坚实的基础。