Mysql笔记+sql语句

来源:互联网 发布:三天打鱼两天晒网c语言 编辑:程序博客网 时间:2024/05/22 12:59
  • Mysql数据库
    • Demo
      • select * from Student limit 1;  1表示要查询的 行数,关键字limit; select * from Student where name like 'y%';查询包含以y开头的记录,关键字like %通配符(y后面不管是什么都显示)                                                          通配符描述%替代一个或多个字符        _仅替代一个字符       [charlist]字符列中的任何单一字符       [^charlist]或者[!charlist]不在字符列中的任何单一字符                  Persons" 表中选取名字的第一个字符之后是 "eorge"的人:                   SELECT * FROM Persons WHERE FirstName LIKE '_eorge'               Persons" 表中选取居住的城市以 "A" "L" "N"开头的人:                                
      • SELECT * FROM Persons WHERE City LIKE '[ALN]%’;             Persons" 表中选取居住的城市不以 "A" "L" "N"开头的人:                                
      • SELECT * FROM Persons WHERE City LIKE ‘[!ALN]%’;                 查询多个值:SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)
    • 四.子查询
      • 多表查询
        • select * from emp,department;多表用逗号隔开如果是 主外键 关系 表 查询出来的 数据 会 重复.                                               Select * from employe,department where employe.d_id= department.id;      查询出来的 数据 不会重复 .                   selectname,department.id,department_name  from employe,department where= employe.d_id= department.id;查询两个表的某个字段 .                        select e.id,name,department_name from employees as e,department as d where e.d_id=d.id; (as d 表示 表的别名).    内连接:语法:from开始,表1与表2进行笛卡尔积,每匹配一行的数据,就会通过on后条件判断
        • 是否成立,就将该行匹配的信息存放到临时表,否则不存放.SELECT * FROM employe AS e INNER JOIN deparment AS d ON e.d_id = d.id;                                                     selectemployees.id,name,department  _name,department_dec from employees INNER JOIN department ON employees.d_id=department.id order by employees.name; 左连接(LEFT JOIN):SELECT employees.id, name, department.department_name
        • FROM employees
        • LEFT JOIN department
        • ON employees.d_id=department.id
        • ORDER BY employees.name;右连接:RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。select employees.id,name,department.department_name from employees RIGHT JOIN department ON employees.d_id=department.id ORDER BY employees.name;左外连接:左表中所有的记录都会被放到结果`集中,无论是否在右表是否存在匹配记录
        • 语法:select 列 from 表1 left outer join 表2 on 表1.列=表2.列
        • [left outer join 表3 on…]select e.name,d.department_name from  employees as e LEFT OUTER JOIN department as d On e.d_id=d.id;右外连接:不管是否成功匹配连接条件都会返回右表中的所有记录
        • 语法: select 列 from 表1 right outer join 表2 on 表1.列=表2.列
        • [right outer join 表3 on…]SELECT e.name,d.department_name FROM employees AS e RIGHT OUTER JOIN department AS d ON e.d_id = d.id;IN(1,1);条件值 或者  ORBETWEEN 800 and 900条件 800-900的值GROUP BY dept_no  按dept_no 分组 HAVING MAX(e_salary)条件
    • 七.存储过程
      • 1.简介
        • 存储过程就是sql语句的集合  函数 方法我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
        • 一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。
      • 2.操作
        • 1.DILIMITER //   //是分隔符 将;结束符号变成//2.创建无参存储过程:CREATE PROCEDURE procename()BEGINsql 语句END//将//换成;DILINITER ;3.删除存储过程 DROP PROCEDURE sp_name;4.调用存储过程CALL sp_name();5.创建带输入参数的 存储过程
        •   以下 存储过程能够输入的学生号 查出改学生的信息 参数sid 代表参数 in代表 输入参数create procedure getStudentByid(in sid int)beginselect * from student where student id = sid;end//设置参数 :set @sid = 1;调用存储过程 : call getStudent(@sid);
        • 6.创建带输出参数的 存储过程create procedure getMaxage(out Max int)beginselect Max(age) INTO Max from student;end//调用 存储 过程:call getMaxage(@Max);查看 输出参数:select @Max;7.带输入 输出参数create procedure inout(INOUT p int)beginselect p;set @p=10;select p;end//set @2=10;call inout(@p);8.多个参数 create procedure p_all(INT p int ,OUT c int)beginselect Max(age) INTO  c from student where sno=p;end//set @p=2;call p_all(@p,@c);select @c;
    • 一.mysql概述
      • mysql介绍
        • 关系型数据库
        • oracle公司
        • 开源项目(企业版和社区版本)
      • mysql安装
        • Next,Next,Next
      • 登录和退出
        • Mac 登录未加入环境变量  进入终端需要加上 PATH="$PATH":/usr/local/mysql/bin  登录:mysql -u root -p  ,   mysql -u用户 -p密码 -P端口 -h主机       exit 退出! (Windows)
      • 目录结构
    • 五.Mysql函数
      • Mysql 函数内建SQL函数的语法是:SELECT function(列) FROM USER;select SUM(id) from User;查询User表中id的 和.SELECT AVG(id) FROM USer;返回 某列的平均值
    • 二.数据类型,权限约束
      • 数据类型:
        • 日期和时间数据类型

        • MySQL数据类型
        • 含义
        • date
        • 3字节,日期,格式:2014-09-18
        • time
        • 3字节,时间,格式:08:42:30
        • datetime
        • 8字节,日期时间,格式:2014-09-18 08:42:30
        • timestamp
        • 4字节,自动存储记录修改的时间
        • year
        • 1字节,年份
        • 数值数据类型

        • 整型
        • MySQL数据类型
        • 含义(有符号)
        • tinyint
        • 1字节,范围(-128~127
        • smallint
        • 2字节,范围(-32768~32767
        • mediumint
        • 3字节,范围(-8388608~8388607
        • int
        • 4字节,范围(-2147483648~2147483647
        • bigint
        • 8字节,范围(+-9.22*1018次方)
        • 浮点型
        • MySQL数据类型
        • 含义
        • float(m, d)
        • 4字节,单精度浮点型,m总个数,d小数位
        • double(m, d)
        • 8字节,双精度浮点型,m总个数,d小数位
        • decimal(m, d)
        • decimal是存储为字符串的浮点数
        • 字符串数据类型
        • MySQL数据类型
        • 含义
        • char(n)
        • 固定长度,最多255个字符
        • varchar(n)
        • 可变长度,最多65535个字符
        • tinytext
        • 可变长度,最多255个字符
        • text
        • 可变长度,最多65535个字符
        • mediumtext
        • 可变长度,最多224次方-1个字符
        • longtext
        • 可变长度,最多232次方-1个字符                保存Boolean型 tinyint 0,1
      • 约束
        • 主键约束 不重复, 长度约束,不能为空约束,自动增长约束(int),外键约束
      • 权限
        • 设置用户访问数据库的 权限 增加 删除 改查 
    • 三.操作数据库和表
      • 中文乱码处理:
        • Mac 拷贝 my-default.cnf文件 到User外的文件目录 ,当前文件夹下无法编辑,复制my-default.cnf 将my-default.cnf的 内容 到 my.cnf 将需要的 更改的 代码行 添加到 尾端       set character_set_client=utf8;
        • setcharacter_set_connection=utf8;
        • set character_set_database=utf8;
        • set character_set_results=utf8;
        • set character_set_server=utf8;
        • set character_set_system=utf8;
        • set collation_connection=utf8;
        • set collation_database=utf8;
        • set collation_server=utf8;             win 直接修改my.ini配置文件  修改编码即可
      • 增删改查
        • create databases 数据库名;    Show databases;显示数据库      use数据库名;进入数据库             显示数据库结构 desc 查看表结构   show tables; 显示表                    删除数据库:drop database 名字;     drop table 名;                         show variables like 'char%';            MySql 修改表结构语句  
        • ALTER TABLE:添加,修改,删除表的列,约束等表的定义。
        • 查看列:desc 表名;
        • 修改表名:alter table t_book rename to bbb;
        • 添加列:alter table 表名 add column sex varchar(30);
        • 删除列:alter table 表名 drop column 列名;
        • 修改列名MySQL: alter table bbb change nnnnn hh int;
        • 修改列名SQLServer:exec sp_rename't_student.name','nn','column';
        • 修改列名Oracle:alter table bbb rename column nnnnn to hh int;
        • 修改列属性:alter table 表名 modify name varchar(22);
        • 显示数据库下所以表:show tables;
        • 插入数据
        • INSERT INTO `db1606`.`course` (`id`, `number`, `name`, `discription`, `time`) VALUES ('2', '1002', 'Java', 'java服务端开发', '189');
        • 删除数据
        • DELETE FROM `db1606`.`course` WHERE `id` = '1' AND `number` = '1002' AND `name` = 'ANDO' AND `discription` = '安卓编程' AND `time` = '189';
    • 六.索引
      • 1.什么是索引
        • 索引
        • 使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee表的姓(lname)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。

        • 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引的方式与您使用书籍中的索引的方式很相似:它搜索索引以找到特定值,然后顺指针找到包含该值的行。

        • 在数据库关系图中,您可以在选定表的索引/属性页中创建、编辑或删除每个索引类型。当保存索引所附加到的表,或保存该表所在的关系图时,索引将保存在数据库中。

        • 注意   并非所有的数据库都以相同的方式使用索引。作为通用规则,只有当经常查询索引列中的数据时,才需要在表上创建索引。索引占用磁盘空间,并且降低添加、删除和更新行的速度。在多数情况下,索引用于数据检索的速度优势大大超过它的不足之处。但是,如果应用程序非常频繁地更新数据或磁盘空间有限,则可能需要限制索引的数量。

        • 可以基于数据库表中的单列或多列创建索引。多列索引使您可以区分其中一列可能有相同值的行。

        • 如果经常同时搜索两列或多列或按两列或多列排序时,索引也很有帮助。例如,如果经常在同一查询中为姓和名两列设置判据,那么在这两列上创建多列索引将很有意义。

        • 确定索引的有效性: 

        • 检查查询的 WHERE JOIN 子句。在任一子句中包括的每一列都是索引可以选择的对象。 

        • 对新索引进行试验以检查它对运行查询性能的影响。 

        • 考虑已在表上创建的索引数量。最好避免在单个表上有很多索引。 

        • 检查已在表上创建的索引的定义。最好避免包含共享列的重叠索引。 

        • 检查某列中唯一数据值的数量,并将该数量与表中的行数进行比较。比较的结果就是该列的可选择性,这有助于确定该列是否适合建立索引,如果适合,确定索引的类型
        • 索引就是将某个字段 放入 一个特定的 一个表中 查询的 时候从而 提高 查询速度效率
      • 2.索引的操作
        • CREATE INDEX index_name ON employee(e_name);//创建索引.SHOW INDEX FROM employee;//查看索引DROP INDEX index_name ON employee;//删除索引EXPLAIN SELECT * FROM employee WHERE e_name=‘王二’;//查看索引解释
0 0
原创粉丝点击