分类 数据库 下的文章

使用SELECT语句从数据库中检索数据

  • 适用的对象:

    • 视图
  • 最简单的形式
SELECT * FROM staff
SELECT name, salary FROM staff
  • 限制结果行数,使用FETCH FIRST字句
SELECT * FROM staff FETCH FIRST 10 ROWS ONLY
  • 使用DISTINCT字句来排除重复行。
SELECT DISTINCT dept, job FROM staff
  • AS为结果列赋予一个新的名字
SELECT name, salary+comm AS pay FROM staff

如果没有AS语句的话,列名可能会是salary + comm

使用INSERT语句向表或视图中添加新行

  • 适用对象:

    • 视图
      向视图中插入一行,视图所基于的表也会被插入数据。
INSERT INTO staff VALUES(1212,'ceny',20,'Sales',3)
INSERT INTO satff(id, name, dept, jod, years) 
  VALUES 
 (1212,'ceny',20,'Sales',3),
  (1213,'ceny',20,'Sales',3)

使用UPDATE语句来改变表或者视图中的数据

  • 适用对象:

    • 视图
UPDATE staff 
  SET dept=51, salary=7000
  WHERE id=750

或者

UPDATE staff 
  SET (dept,salary)=(51,7000)
  WHERE id=750

如果不指定WHERE字句,就会更新表或者视图的每一行

使用DELETE语句来删除数据

DELETE FROM staff 
  WHERE id IN(1212,1213)

如果不指定WHERE字句,DB2会把表或者视图中的所有行删除掉

使用CREATE语句创建新的数据库对象

  • 创建的数据库对象包括

    • 缓冲池
    • 事件监听器
    • 函数
    • 索引
    • 模式
    • 存储过程
    • 表空间
    • 触发器
    • 视图

    每当用户创建数据库对象时,都会更新系统目录。

CREATE TABLE student(
  stdid INTEGER NOT NULL,
  name VARCHAR(5),
  local VARCHAR(13)
) 

使用DECLARE语句生成新的数据库对象

  • 用DECLARE创建的是只能在数据库连接期间存在的临时表。当要用到中间结果时,临时表很有用。
  • 声明的表可以被引用、修改和删除。
  • 表是唯一一个可以被声明的数据库对象。
  • 当用户声明临时表时,系统目录不会被更新。
DECLARE GLOBAL TEMPORORY TABLE session.temp1
  LIKE employee
  ON COMMIT PRESERVE ROWS
  NOT LOGGED
 IN mytempspace
  • DECLARE GLOBAL TEMPRORY TABLE声明一个临时表
  • temp1为表名,列名同employee
  • mytempspace为临时表空间(用户的临时表空间必须存在)
  • 每当处理COMMIT语句时,临时表中的行就会被保留下来(不会被删除)
  • session为模式,临时表必须由模式名显示限定,因为每个定义声明过的表的会话对该临时表都有自己的(可能是唯一的)描述

使用ALTER语句来改变数据库对象

  • ALTER语句可以用来改变现有数据库对象的一些特性,包括:

    • 缓冲池
    • 模式
    • 表空间
    • 触发器
    • 视图

不可以修改索引,如果想要改变索引,那么必须删除它然后用不同的定义创建一个新的。

   ALTER TABLE org
     ADD state char(2)

使用DROP语句来去掉数据库对象

可以删除任何CREATE和DECLARE语句创建的对象。

DROP TABLE org

DROP语句从系统目录中删除对象的定义,所以也从数据库本身中删除了表。数据库对象可能会依赖其他的数据库对象,所以删除对象可能会使有关的对象变成无效的。

  • 使用GRANT语句授予权限

    调用grant语句,权限和特权可以被显示授予单个的用户或者组。其中,可授出的对象包括数据库、表空间、表、视图、索引、包和模式。

    GRANT privilege ON object-type object-name TO [{USER|GROUP|PUBLIC}] 
    authorization-name [WITH GRANT OPTION]
    如,GRANT CONTROL ON TABLE students TO USER ccpt
    GRANT INSERT,UPDATE,DELETE ON TABLE students TO USER ccpt WITH GRANT 
    OPTION
    • 其中,PUBLIC是将特权授权给所有用户。
    • WITH GRANT OPTION是允许authorization-name将特权授权给其他用户。
    • 如果用户拥有包含students表的数据库上的SYSADM和DBADM或者students表的CONTROL特权,那么这个用户已经拥有授予students表上的INSERT,UPDATE,DELETE特权的权限了。
  • 使用REVOKE语句撤销权限

    调用revoke语句,可以将特权从单个的用户或者组显示撤销。可撤销的对象同上。

    REVOKE privilege ON object-type obect-name FROM [{USER|GROUP|PUBLIC}] 
    authorization-name
    • 撤销所有特权,可以用ALL
    REVOKE ALL PRIVILEGES ON TABLE students FROM ccpt
    • 必须拥有包含students表的数据库上的SYSADM和DBADM或者students表的CONTROL特权才能让用户撤销该对象上的特权,WITH GRANT OPTOION并不可以
    • 如果组内的任何成员曾作为个体或者另外一个组的成员被授予过权限,那么使用...FROM GROUP ...不能撤销其特权。

MYSQL mysql_real_connect(MYSQL mysql, const char host, const char user, const char passwd, const char db, unsigned int port, const char *unix_socket, unsigned long client_flag)

参数

第一个参数,MYSQL结构的地址。MYSQL *mysql mysql_init()后,会返回一个 指针。
第二个参数,主机名或者IP地址。如果是 NULL 和 localhost 则为本地主机的连接。
第三个参数,用户名
第四个参数,密码
第五个参数,数据库名称
第六个参数,端口号(如果“port”不是0,其值将用作TCP/IP连接的端口号。“host”参数决定了连接的类型。)
第七个参数,使用 socket 或者 管道机制
第八个参数,常常设置为0

返回值

如果连接成功,返回MYSQL*连接句柄。如果连接失败,返回NULL。对于成功的连接,返回值与第1个参数的值相同。