全栈开发工程师(第六天)

发布时间:2024年01月17日

SQL数据库 学习

目录

SQL数据库 学习

1. 存储过程

1.1 执行存储过程

1.2 创建存储过程

2. 管理事务处理

2.1 事务处理

2.2?控制事务处理

3. 使用游标

3.1 游标

3.2 使用游标

4. 高级SQL特性

4.1 约束

4.2 主键

4.3 外键

4.4 唯一约束

4.5?检查约束

4.6 索引

4.7 触发器

今日体会


1. 存储过程

1.1 执行存储过程

EXECUTE接受存储过程名和需要传递给它的任何参数。

    EXECUTE AddNewProduct('JTS01',
                            'Stuffed Eiffel Tower',
                            6.49,
                            'Plush stuffed toy with
    ?the text La Tour Eiffel in red white and blue');

1.2 创建存储过程

其中用DECLARE语句声明了一个名为@cnt的局部变量(SQL Server中所有局部变量名都以@起头)

    CREATE PROCEDURE MailingListCount
    AS
    DECLARE @cnt INTEGER
    SELECT @cnt = COUNT(*)
    FROM Customers
    WHERE NOT cust_email IS NULL;
    RETURN @cnt;

2. 管理事务处理

2.1 事务处理

使用事务处理(transaction processing),通过确保成批的SQL操作要么完全执行,要么完全不执行,来维护数据库的完整性。

事务(transaction)指一组SQL语句;

?回退(rollback)指撤销指定SQL语句的过程;

提交(commit)指将未存储的SQL语句结果写入数据库表;

?保留点(savepoint)指事务处理中设置的临时占位符(placeholder),可以对它发布回退(与回退整个事务处理不同)。

2.2?控制事务处理

BEGIN TRANSACTION
...
COMMIT TRANSACTION

ROLLBACK命令用来回退(撤销)SQL语句

    DELETE FROM Orders;
    ROLLBACK;

进行明确的提交,使用COMMIT语句

    BEGIN TRANSACTION
    DELETE OrderItems WHERE order_num = 12345
    DELETE Orders WHERE order_num = 12345
    COMMIT TRANSACTION

3. 使用游标

3.1 游标

游标(cursor)是一个存储在DBMS服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。

3.2 使用游标

使用DECLARE语句创建游标

    DECLARE CustCursor CURSOR
    FOR
    SELECT * FROM Customers
    WHERE cust_email IS NULL;

使用OPEN CURSOR语句打开游标

    OPEN CURSOR CustCursor

关闭游标

    CLOSE CustCursor
    DEALLOCATE CURSOR CustCursor

实际例子

    DECLARE @cust_id CHAR(10),
            @cust_name CHAR(50),
            @cust_address CHAR(50),
            @cust_city CHAR(50),
            @cust_state CHAR(5),
            @cust_zip CHAR(10),
            @cust_country CHAR(50),
            @cust_contact CHAR(50),
            @cust_email CHAR(255)
    OPEN CustCursor
    FETCH NEXT FROM CustCursor
        INTO @cust_id, @cust_name, @cust_address,
              @cust_city, @cust_state, @cust_zip,
              @cust_country, @cust_contact, @cust_email
        ...
    WHILE @@FETCH_STATUS = 0
    BEGIN
    FETCH NEXT FROM CustCursor
            INTO @cust_id, @cust_name, @cust_address,
                  @cust_city, @cust_state, @cust_zip,
                  @cust_country, @cust_contact, @cust_email
    ...
    END
    CLOSE CustCursor

4. 高级SQL特性

4.1 约束

通过在数据库表上施加约束来实施引用完整性。大多数约束是在表定义中定义的,

4.2 主键

主键是一种特殊的约束,用来保证一列(或一组列)中的值是唯一的,而且永不改动。

    CREATE TABLE Vendors
    (
        vend_id           CHAR(10)        NOT NULL PRIMARY KEY,
        vend_name        CHAR(50)        NOT NULL,
        vend_address     CHAR(50)        NULL,
        vend_city        CHAR(50)        NULL,
        vend_state       CHAR(5)          NULL,
        vend_zip          CHAR(10)        NULL,
        vend_country     CHAR(50)        NULL
    );

表的vend_id列定义添加关键字PRIMARY KEY,使其成为主键。

    ALTER TABLE Vendors
    ADD CONSTRAINT PRIMARY KEY (vend_id);

4.3 外键

外键是表中的一列,其值必须列在另一表的主键中。外键是保证引用完整性的极其重要部分。

其中的表定义使用了REFERENCES关键字,它表示cust_id中的任何值都必须是Customers表的cust_id中的值。

    CREATE TABLE Orders
    (
        order_num     INTEGER     NOT NULL PRIMARY KEY,
        order_date    DATETIME    NOT NULL,
        cust_id       CHAR(10)    NOT NULL REFERENCES Customers(cust_id)
    );

4.4 唯一约束

唯一约束用来保证一列(或一组列)中的数据是唯一的。它们类似于主键

4.5?检查约束

检查约束用来保证一列(或一组列)中的数据满足一组指定的条件

4.6 索引

索引用来排序数据以加快搜索和排序操作的速度。

索引用CREATE INDEX语句创建

    CREATE INDEX prod_name_ind
    ON Products (prod_name);

4.7 触发器

触发器是特殊的存储过程,它在特定的数据库活动发生时自动执行。触发器可以与特定表上的INSERT、UPDATE和DELETE操作(或组合)相关联。

    CREATE TRIGGER customer_state
    ON Customers
    FOR INSERT, UPDATE
    AS
    UPDATE Customers
    SET cust_state = Upper(cust_state)
    WHERE Customers.cust_id = inserted.cust_id;

今日体会

找好方向,专注的坚持下去,时间会让你看到你的收获的。

今天所有的sql基础都学完了,看的书是《SQL必知必会》,共勉。

文章来源:https://blog.csdn.net/weixin_73549108/article/details/135634871
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。