zoukankan      html  css  js  c++  java
  • MySQL语法相关其一

    一篇基础语法相关的笔记

    // 参考资料: MySQL入门很简单 黄缙华等编著 清华大学出版社 北京

    建议进入官网下载对应版本后安装:https://dev.mysql.com/downloads/mysql/
    我一开始练习都是使用 root 账户登录了

    mysql  -u  root  -pPASSWORD 
    // 注意 PASSWORD就是你的密码了,应该紧贴 -p之后,中间没有空格
    SHOW DATABASES;                               // 显示所有数据库 
    USE  DATABASES;                               // 指定使用某个数据库 
    CREATE DATABASE databaseName;                 // 创建一个以databaseName为名的数据库  
    DROP DATABASE databaseName;                   // 删除一个指定名数据库  
    SHOW ENGINES;                                 // 显示数据库引擎相关信息  
    SHOW TABLES;                                  // 显示数据库所含有的表  
    SHOW CREATE TABLE tableName;                  // 显示表名为 tableName 的表的相关信息 
    mysql修改密码
    update mysql.user set authentication_string=password('you_password') where User='root' and Host='localhost';
    赋予远程连接自己这个数据的权限
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'a_password' WITH GRANT OPTION;
    最后别忘记刷新权限
    FLUSH PRIVILEGES;
    DESCRIBE  tableName;           // 查看指定表的结构 可以简化为  
    DESC      tableName;           // 效果相同
    SELECT * FROM tableName;    // 显示表内所有数据 CREATE TABLE tableName (字段名 数据类型[完整性约束条件],字段名 数据类型[完整性约束条件], ...);
                      // 建立表的操作 DROP TABLE tableName; // 删除无其他关联的 简单表的 操作 ALTER TABLE 旧表名 RENAME 新表名 // 表改名 ALTER TABLE 表名 CHANGE 旧属性名 新属性名 新数据类型
                      // 修改属性的名或数据类型 ALTER TABLE 表名 MODIFY 属性名1 新数据类型 [FIRST | AFTER 属性名2]                   // 修改字段的数据类型或排列位置
    ALTER TABLE 表名 ADD 属性名1 数据类型 [完整性约束] [FIRST | AFTER 属性名2];    // 增加字段  
    ALTER TABLE 表名 DROP 属性名;                                               // 删除字段  
    ALTER TABLE 表名 DROP FOREIGN KEY 外键别名;                                 // 删除表的外键约束  
    ALTER TABLE 表名 ENGINE = 存储引擎名;                                       // 更改存储引擎  
    INSERT INTO 表名 VALUES  (值1,值2,值...),  
        (值m,值m+1,...),  
        (值k,值k+1,...);                                   //插入单位 INSERT语句中不指定具体的字段名  
    INSERT INTO 表名 VALUES (属性1,属性2,...) VALUES (值1,值2,...);             // 插入单位  指定具体字段名 较为灵活  
    INSERT INTO 表名1 (属性列表1)SELECT 属性列表2 FROM 表名2 WHERE 条件表达式;     // 将表2中的查询结果插入表1中  
    UPDATE 表名 SET  属性名1 = 取值1,  
        属性名2 = 取值2,  
        属性名n = 取值n  WHERE 条件表达式;     //UPDATE 修改
    DELETE FROM 表名 [ WHERE 条件表达式 ];    //若无 WHERE 删除表中所有数据  
        若要设立单个字段为 主键 (primary key)  :  字段名 数据类型 PRIMARY KEY  
        若是要设置多个字段为主键                 :  在设置完字段名之后在 , 后面加一句      PRIMARY KEY(字段1,字段2,字段3,...)      即可4  
        对于完整性约束条件  类似还有      UNIQUE : 表的唯一性约束         NOT NULL : 非空约束
    AUTO_INCREMENT : 表的字段自增

    外键的作用:  建立该表与其父表的关联关系
    若有字段 mbA 是表A的属性,且依赖于表 B 的主键。则称表 B 为父表 表A为子表  mbA 是表A 的外键。  
    // 要特别留意 子表的外键必须为 父表的主键,类型必须一致, 外键可以为空值
    // 比如    ID 是  student表的primary key ,关于学生这个对象,有一些相关的资料 比如 姓名 健康状况等 存储在 表2,那么当删除某一个指定ID的学生时
    // 表2中的关于这个ID的学生的资料也应该同步删除/更新
    创建表时可以加入这样一个声明:

    CONSTRAINT 外键别名 FOREIGN KEY(字段名1,字段名2,...)  
              REFERENCES 表名(字段名1,字段名2,...) ON DELETE CASCADE ON UPDATE CASCADE

    例子:

    CREATE TABLE myTable1 ( mb2 INT, mb3 INT, PRIMARY KEY( mb2 , mb3) );  
    CREATE TABLE myTable2 (  
    mb1 INT PRIMARY KEY, mb2 INT ,mb3 INT,  
    CONSTRAINT mb23 FOREIGN KEY( mb2,mb3 )  
    REFERENCES myTable1( mb2,mb3 ) ON DELETE CASCADE ON UPDATE CASCADE
    );    

    // 则mb2,mb3为 myTable2 的外键 且 mb23为这两个外键的别名。

    触发器
    CREATE TRIGGER 触发器名 BEFORE | AFTER 触发事件 ON 表名 FOR EACH ROW 执行语句;
    若多语句时

    DELIMITER &&  
    CREATE TRIGGER 触发器名 BEFORE | AFTER 触发事件 ON 表名 FOR EACH ROW  
    BEGIN  
    执行语句;  
    执行语句;  
        ...  
    END&&  
    DELIMITER ;  

    // 一般情况下 MySQL 默认是以 ; 作为结束执行语句 在创建触发器过程中要用到 ; 为了解决这个问题
    可以用 DELIMITER 语句如 DELIMITER && 将结束符变成&& 当触发器创建完成后 可以再用命令 DELIMITER ;
    来恢复结束符号为 ;

    查看触发器  SHOW TRIGGERS;
    删除触发器  DROP TRIGGER 触发器名;

    基本查询语句

    SELECT  属性列表  FROM 表名和视图列表  
    [WHERE 条件表达式1]  
    [GROUP BY 属性名1 [ HAVING 条件表达式2] ]  
    [ORDER BY 属性名2 [ASC | DESC] ];  
    SELECT * FROM 表名;     // 查询表的所有字段 

    /*-------------------------------------
    查询条件各种符号:
    比较: = < <= > >= != !> !< <>
    指定范围 BETWEEN AND   NOT BETWEEN AND
    指定集合 IN   NOT IN
    匹配字符 LIKE NOT LIKE
    是否为空值 IS NULL    IS NOT NULL
    多个查询条件 AND   OR
    ......................................*/

    SELECT DISTINCT 属性名;   //消除重复记录  
    SELECT * FROM  newTableName WHERE语句 ;     //将表名以 newTableName 展示出来(实际不改变) 方便阅读  
    属性名 REGEXP '匹配方式';   //使用 REGEXP 关键字来匹配查询正则表达式 
    IF ( expr ,v1, v2 ) //函数 若expr成立返回v1 否则返回v2  
    SELECT 属性 , IF(属性相关的expr, v1, v2 ); //节选 注意属性之后要有逗号  
    CASE WHEN expr1 THEN v1 [ WHEN expr2 THEN v2 ...] [ELSE vn]  END; 
    //加密函数 留坑  
    FORMAT (x ,n); //格式化函数 将x保留到小数点后n位  
    BENCHMARK (count,expr); //函数将表达式 expr 重复执行count此  
    CONVERT (s USING cs); //将字符串s的字符集变成 cs  
          
    CREATE PROCEDURE sp_name ( [proc_parameter [...] ] )   [characteristic ...]   routine_body;//创建存储过程  
    //sp_name  存储过程名称  
    //proc_parameter 存储过程参数列表   [ IN | OUT | INOUT ] param_name type  
    //characteristic 存储过程特性  
    LANGUAGE SQL //routine_body 部分由 SQL语句组成  
    { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }//指明子程序使用SQL语句的限制  
    SQL SECURITY { DEFINER | INVOKER }//指明谁由权限来执行 前者仅定义设计者自己可执行 后者则调用者可 默认前者  
    //routine_body 部分由 SQL语句组成 SQL 代码内容 可以用 BEGIN..END 来标志SQL 代码的开始和结束  
    
    例子: DELIMITER && CREATE PROCEDURE numFromEmployee ( IN empID INT , OUT countNum INT)//proc_parameter 部分 READS SQL DATA//characteristic 部分 BEGIN SELECT COUNT(*) INTO countNum FROM tableEmployee WHERE employeeID=empID; END&& ELIMITER ;
  • 相关阅读:
    第十五次-语法制导的语义翻译
    第十四次--算符优先分析
    第十二次-递归下降语法分析
    第十一次-LL(1)文法的判断,递归下降分析程序
    第十次-消除左递归
    第九次-DFA最小化,语法分析初步
    个人作业——软件工程实践总结作业
    【评分】Alpha阶段
    K 班前7次作业成绩汇总
    【评分】第七次作业--项目需求分析(团队)
  • 原文地址:https://www.cnblogs.com/Rosebud/p/7136020.html
Copyright © 2011-2022 走看看