美文网首页
SQL操作数据

SQL操作数据

作者: Rannio | 来源:发表于2018-08-10 21:21 被阅读0次

    DML

    DML 语句可执行:

    插入新数据

    修改已有数据

    删除数据

    INSERT

    INSERT语句一次将一个记录的数据输入表中

    INSERT INTO table [(column [, column...])]

    VALUES (value [, value...]);

    例子:

    INSERT INTO dept (deptno, dname, loc)

        VALUES (50, 'DEVELOPMENT', 'DETROIT')

    INSERT语句中使用函数

    例如:

    使用NOW()函数插入当前的日期和时间

    INSERT INTO emp (empno, ename, job,

      mgr, hiredate, sal, comm,

      deptno)

        VALUES (7196, 'GREEN', 'SALESMAN',

      7782, NoW(), 2000, NULL,

      10);

    插入空值

    例1

    INSERT INTO dept (deptno, dname )

        VALUES (60, 'MIS');

    例2

    INSERT INTO dept

        VALUES (70, 'FINANCE', NULL);

    从其他表中拷贝记录

    INSERT INTO managers(id, name, salary, hiredate)

                SELECT empno, ename, sal, hiredate

              FROM  emp

                WHERE job = 'MANAGER';

    INSERT INTO emp_copy

                SELECT *

              FROM  emp

                WHERE job = 'MANAGER‘

    UPDATE 语句

    使用UPDATE语句修改已存在的记录

    UPDATE table

    SET column = value [, column = value]

    [WHERE condition]

    修改记录

    使用WHERE子句修改指定的记录.

    UPDATE emp

        SET    deptno = 20

        WHERE  empno = 7782

    修改所有的记录.

    UPDATE employee

        SET    deptno = 20

    通过查询更新

    UPDATE emp_copy

        SET  job = (SELECT job

              FROM    emp

          WHERE  empno = 7698),deptno= (SELECT deptno

          FROM    emp  WHERE  empno = 7698) WHERE empno=7566

    DELETE 语句

    使用DELETE删除表中所有数据 

    DELETE [FROM] table

    [WHERE   condition](使用WHERE来限定删除什么)

    从表中删除记录

    DELETE FROM dept

      WHERE dname = 'DEVELOPMENT'

    删除所有的记录

    DELETE FROM dept

    数据类型

    创建表

    你必须有 :

        建表的权限

        有存储区域

        CREATE TABLE [schema.]table

        (column datatype [DEFAULT expr]

    你可指定:

        表名 Table name

        列名, 列的数据类型, 列的大小

    建表

    REATE TABLE dept2(deptno INT,

      dname VARCHAR(14),

      loc VARCHAR(13))

    使用子查询创建表

    列的数目要和子查询中的匹配

    可定义列名和缺省值

    CREATE TABLE table

        [column(, column...)]

    AS subquery

    例:CREATE TABLE dept30

                   AS

                           SELECT empno, ename, sal*12 ANNSAL, hiredate

                            FROM emp

                            WHERE deptno = 30

    ALTER TABLE 语句

    使用ALTER TABLE 语句可:

    加一列

    ALTER TABLE table

    ADD   (column datatype [DEFAULT expr]

      [, column datatype]...)

    ALTER TABLE dept30

        ADD   (job VARCHAR(9))

    修改列

    ALTER TABLE table

    MODIFY   (column datatype [DEFAULT expr]

      [, column datatype]...)

    ALTER TABLE dept30

    MODIFY job VARCHAR(20)

    删除列

    ALTER TABLE table DROP COLUMN column

    ALTER TABLE dept30 DROP COLUMN job

    删除表

    DROP TABLE dept2

    改表名

    ALTER TABLE tablename RENAME table_newname

    ALTER TABLE dept30 RENAME dept40

    什么是约束

    约束是表级强制执行的规则.

    当表中数据有相互依赖性时,可保护数据不被删除.

    有如下类型的约束:

    NOT NULL

    UNIQUE Key

    PRIMARY KEY

    FOREIGN KEY

    约束概况

    创建约束:

    在建表的同时创建

    建表后创建

    可定义列级或表级约束.

    CREATE TABLE [schema.]table

        (column datatype [DEFAULT expr]

    [column_constraint],

    [table_constraint]);

    CREATE TABLE emp

          (empno  NUMBER(4),

            ename  VARCHAR2(10),

          deptno  NUMBER(7,2) NOT NULL,

        CONSTRAINT emp_empno_pk

              PRIMARY KEY (EMPNO));

    创建约束

    列级约束

    column [CONSTRAINT constraint_name] constraint_type,

    表级约束

    column,...

      [CONSTRAINT constraint_name] constraint_type

      (column, ...)

    非空约束(NOT NULL)

    定义列级约束

    CREATE TABLE dept6(deptno INT NOT NULL,

        deptname VARCHAR(20),

        deptloc VARCHAR(50))

    唯一性约束(UNIQUE)

    定义唯一性约束

    CREATE TABLE dept(

      deptno INT,

      dname VARCHAR2,

      loc VARCHAR2,

      CONSTRAINT uk_dept_dname UNIQUE(dname))

    主键约束

    CREATE TABLE dept6(

        deptno INT,

      dname VARCHAR(14),

      loc VARCHAR(13),

      CONSTRAINT dept_dname_uk UNIQUE(dname),

      CONSTRAINT pk_deptno PRIMARY KEY(deptno))

    外键约束(FOREIGN KEY)

    定义外键约束

    CREATE TABLE `emp_copy` (

      `empno` int(4) NOT NULL,

      `ename` varchar(60) default NULL,

      `job` varchar(30) default NULL,

      `mgr` int(4) default NULL,

      `hiredate` date default NULL,

      `sal` float default NULL,

      `comm` float default NULL,

      `deptno` int(2) default NULL,

      PRIMARY KEY  (`empno`),

      KEY `emp_index` (`deptno`),

      CONSTRAINT `pk_emp_dept` FOREIGN KEY (`deptno`) REFERENCES `dept` (`deptno`)

                                                      )

    视图

    视图是一个虚拟表,限制对数据的访问

    很容易的写成复杂的查询

    允许数据的独立性

    不同的视图可获得相同的数据

    创建视图的语句中可嵌入子查询.

    CREATE [OR REPLACE] VIEW

    view_name [(column_list)]

    AS select_statement

    创建视图.

    CREATE VIEW empvu10

      AS SELECT empno, ename, job

        FROM emp

        WHERE deptno = 10

    在子查询中使用列别名创建视图.

    CREATE VIEW salvu30

        AS SELECT empno as EMPLOYEE_NUMBER, ename as NAME,

      sal as SALARY

        FROM emp

        WHERE deptno = 30

    在查询视图时使用列别名.

    SELECT EMPLOYEE_NUMBER, NAME, SALARY

      FROM    salvu30

    修改视图

    使用CREATE OR REPLACE VIEW 子句修改 视图 ,并为每列加别名.

    CREATE OR REPLACE VIEW empvu10

          (employee_number, employee_name, job_title)

        AS SELECT empno, ename, job

        FROM emp

        WHERE deptno = 10

    在CREATE VIEW语句中列的别名的顺序是和子查询中一致的.

    复杂视图的特点:

    从多个表查询

    包含函数

    包含分组数据

    CREATE VIEW dept_sum_vu

          (name, minsal, maxsal, avgsal)

        AS SELECT d.dname, MIN(e.sal), MAX(e.sal),

    AVG(e.sal)

        FROM emp e, dept d

        WHERE e.deptno = d.deptno

        GROUP BY d.dname

    删除视图

    删除视图并不删除基表中的数据.

    DROP VIEW view

    DROP VIEW empvu10

    视图可从其他的表或视图中获取数据.

    视图提供如下优点:

    限制数据的访问

    简化查询

    提供独立的数据

    允许多个视图使用相同的数据

    删除时不影响基表

    建用户

    设置密码

    CREATE USER user

    IDENTIFIED BY  password

    CREATE USER tester IDENTIFIED BY 'tiger'

    设置或修改密码

    超级用户可使用 CREATE USER 语句建用户.

    SET PASSWORD=PASSWORD (password)

    SET PASSWORD=PASSWORD ('tom1')

    权限列表

    ALTER: 修改表和索引。

    CREATE: 创建数据库和表。

    DELETE: 删除表中已有的记录。

    DROP: 抛弃(删除)数据库和表。

    INDEX: 创建或抛弃索引。

    INSERT: 向表中插入新行。

    REFERENCE: 引用。

    SELECT: 检索表中的记录。

    UPDATE: 修改现存表记录。

    FILE: 读或写服务器上的文件。

    PROCESS: 查看服务器中执行的线程信息或杀死线程。

    RELOAD: 重载授权表或清空日志、主机缓存或表缓存。

    SHUTDOWN: 关闭服务器。

    ALL: 所有权限,ALL PRIVILEGES同义词。

    USAGE: 特殊的 "无权限" 权限。

    赋予权限

    GRANT privilege ON object TO host IDENTIFIED BY 'password'

    GRANT ALL ON *.* TO 'tester'@'localhost' IDENTIFIED BY 'tester'

    说明:授予tester在服务器本机上所有权限。

              *.*  代表所有数据库所有对象。Test.*  代表test数据库所有对象

        ’ tester ‘ @ ’ localhost ‘ 代表tester用户在本机操作权限。    

        ’ tester ‘ @ ’ % ‘ 代表tester用户从所有机器上操作权限。

    刷新权限

    通常执行完需要刷新权限

    FLUSH PRIVILEGES

    撤销权限

    REVOKE privilege ON object FROM username

    REVOKE update ON company.* FROM tester

    相关文章

      网友评论

          本文标题:SQL操作数据

          本文链接:https://www.haomeiwen.com/subject/irnlbftx.html