美文网首页
2018-08-09 Mysql Database Operat

2018-08-09 Mysql Database Operat

作者: 初见_0308 | 来源:发表于2018-08-10 01:06 被阅读0次

    数据操作语言

    使用 DML 语句可执行:

    1、插入新数据 insert  into

    2、修改已有数据 update

    3、删除数据 delete

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

    INSERT INTO dept (deptno, dname, loc)

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

    INSERT INTO dept (deptno, dname )

        VALUES (60, 'MIS');

    INSERT INTO dept                              (没有列名,表明都插入)

        VALUES (70, 'FINANCE', NULL);

    INSERT语句中使用函数;例如使用NOW()函数插入当前的日期和时间

    INSERT INTO emp (empno, ename, job,

      mgr, hiredate, sal, comm,

      deptno)

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

      7782, NOW(), 2000, NULL,

      10);

    从其他表中拷贝记录

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

                SELECT empno, ename, sal, hiredate

              FROM  emp

                WHERE job = 'MANAGER';  (managers是已经存在的表)

    creat table emp_copy

    as

                SELECT *

              FROM  emp

                WHERE job = 'MANAGER‘;  #创建一个空表emp_copy,并将emp中的列名及数据完全复制

    (2)UPDATE 语句

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

    使用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;

    或用for  update  操作关系表改值

    (3)DELETE 语句

    使用DELETE命令从表中删除记录

    DELETE  FROM    table 

    [WHERE   condition];

    从表中删除记录

    DELETE FROM dept

      WHERE dname = 'DEVELOPMENT';

    删除所有的记录

    DELETE FROM dept;

    (4)数据类型

    使用子查询创建表

    CREATE TABLE dept30

      AS

      SELECT empno, ename, sal*12 ANNSAL, hiredate

      FROM emp

      WHERE deptno = 30;

    ALTER TABLE 语句

    使用ALTER TABLE 语句可:

    加一

    修改

    删除

    使用 ADD 子句增加列

    ALTER TABLE dept30

        ADD   (job VARCHAR(9));

    可修改列的数据类型,大小和缺省值.

    修改后的缺省值只影响以后插入的数据.

    ALTER TABLE dept30

    MODIFY job VARCHAR(20);

    删除列,如果存在数据一起删除.

    ALTER TABLE  dept30  DROP    COLUMN(可有可无)    job;

    改表的名称

    ALTER TABLE dept30 RENAME dept40

    约束

    (1)什么是约束

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

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

    有如下类型的约束:

    NOT NULL

    UNIQUE Key

    PRIMARY KEY

    FOREIGN KEY

    DEFAULT 'M' (默认约束,值为M)

    CHECK (sm_sex IN ('M','F')) (选择约束,字段sm_sex可选择值只有 M,F 两种)

    创建约束:

    在建表的同时创建

    建表后创建

    可定义列级或表级约束

    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));

    主键约束( PRIMARY KEY)

    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;

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

    用户及权限

    设置密码

    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;

    相关文章

      网友评论

          本文标题:2018-08-09 Mysql Database Operat

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