A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kuqi3712 中级黑马   /  2018-1-15 21:15  /  1419 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

数据库中的表的记录的CRUD
                        想数据表中添加数据
                insert into 表名(列名1,列名2,....) values (要添加的值1,值2,值3) 除了数字之外 其他类型必须加''
                        注意:列名和表名的问题
                        对应(值与前面的列名都要对应 且数据类型也要对应;
                添加数据格式:
                        不考虑主键:会出现断号的情况
                                insert into 表名  (列名) values (值)
                添加数据格式:
                        所有值全给出
                        insert into 表名 values (全列值)
                        insert into 表名 (列名1,..2,...3) values (值1,..2,..3),(值1,..2,..3),(值1,..2,..3)
                注意事项:
                列名的个数与值的个数对应,
                类型也要对应
                列的类型如果是日期或者字符串的时候,要使用单引号
                插入的最大长度不能超过本列的最大长度
               
               
               
                出现中文错误的原因,windos系统,mysql客户端(Client),mysql服务端编码不一致(server)
                                                          bgk         默认 utf-8                       默认 utf-8
                插入中文的解决方法:
                        一次性修改 修改DOS命令的编码 输入命令 set names 'gbk'
                        永久性修改 Mysql的配置文件(my.ini) default-character-set=gbk;修改完成后重新下mysql服务,services.msc
               
                show variables like '%character%'
                会显示出所有的跟字符集相关的数据
               
               
                修改记录
                                update 表明 set 列1=值1,列2=值2 where 条件 如果不加条件所有的数据都会被修改
                                注意事项:
                                        修改的列名与值的类型要对应,长度要符合要求,日期或者字符串要用''
                                        修改条件的写法:
                                        between  and
                                        in
                                        like        '_'一个下划线代表1一个字符(一个汉字)
                                        SELECT * FROM students WHERE 班级 LIKE '%基础班%'
                                        is null
                                        is not null
                                       
                                        id=6;
                                        id<>6;不等于
                                        id<=6;
                                        id in(1,2,3,4) 满足 1234都执行
                                        与或非:
                                                        与and
                                                        或 or
                                                        非 not
                                                       
                删除记录
                        delete from 表名 where 条件语句
                        不加条件会删除所有
                       
                delete form 表名 :一条一条的删 但是不清空auto_inrement 事务的管理只能在DML语句上,如果在一个事物中使用delete删除所有记录,可以找回
                truncate 表名: 直接删除表然后重新建表 auto_increment被置为0,属于DDL,删完了找不回来
               
                start transaction
                delete from 表名
                rollback;之后可以继续查询到已经删除的数据,但是truncate不行
               
                查询记录 :
                select 列名1,列名2... from 表名 where 列明='';
                select distinct 列名 from 表名;对列名进行去重
                select distinct 列名1,列名2 from 表名;对列名1,2整体进行去重
                查询重命名列
                select zname AS '' 查询出来的数据重新建一个列名
               
                查询过程中直接对数字进行计算
                SELECT zname,zmoney+1000 FROM 表名
               
               
                聚合
                可以对一列进行计算,返回单一的值
                count
                select count (*) from 表名
               
                select sum(money) from 表名
                select sum(列名+列名) 横着加            单行统计(如果有null 那么这一行都是null)完后再统计所有列
                select sum(列名),sum(列名) 竖着加  单列(如果有null会自动处理为0)统计完后再统计所有行
                如果表中有值为空,上面两种结果会不同
                解决办法:
                select sum(ifnull(列名,0)+列名) from 表名 ; 横着加的时候null加上任何值都为null
                ifnull(列名,0) 如果列中有null就视为0
               
               
                select max()  最大值
                select min()        最小值
                select avg() 平均数
                select truncate(avg(列名),2) from 表名 计算平均值后保留2位
               
                这些方法的后面不能有空格
                分组
                SELECT COUNT(*),department FROM student GROUP BY department;
               
                查询后 在count 列的后面有一个department列
                分组之后再次筛选 用having 关键字
                where 与 having 区别
                where 是分组之前过滤 having 是分组之后过滤
               
                排序:
                SELECT 列名1,列名2  FROM 表名 order BY 列名1,列名2 desc; 2种排序
                排序语句一定是在sql语句的末尾
                asc 升序 desc降序
               
                查询语句的语序
                select 列名,sum(列名) from 表名 where 条件语句 group by 列名having 条件语句 order by 排序 limit start,length;
                Start 开始值,默认值是0
                length 数据长度(多少条数据)
               
               
表与表之间的关系:
                数据库的多表设计
                        一对多建表原则:
                                在多的(乙方)创建一个字段最为 外键指向甲方的主键
                                外键可以重复可以为空,如果他有值必须是一的一方的主键
                                添加一的一方再添加多的一方
                                删除的时候先删除多的一方,再删除一的一方
                        多对多的建表原则:
                                创建第三张表(中间表),中间表中至少需要2个字段分别作为外键 指向多对多双方各自的主键
                               
                        一对一建表原则:
                                外键对应,在一对多的基础上  加一个 唯一约束
                                主键对应,在主键建立映射
                       
               
                       
                实体与实体之间的关系
                        1.一对多
                        客户与订单
                        部门和员工
                        2.多对多
                        学生和课程
                        3.一对一
                        公司和地址
                       
                多表的约束:外键约束.
                        给orders中的cid添加外键约束
                        方式一:
                                建表的时候加
                                FOREIGN KEY (cid) REFERENCES customer (cid)
                        方式二:
                                alter table 表名1 add foreign key (cid) references 表名2 (cid)
                有了外键约束后无法直接删除 表2 的数据
                需要先删除表1的数据 再删除表2的数据               
               
        多表的查询方式
                方式一:
                        连接查询:
                                内连接:inner join inner可以省略
                                        显示内连接:
                                                select * from a inner join b on 条件;
                                        隐式内连接:
                                                select * from a,b where 条件;
                                        查询到的是两张表中符合条件的数据
                                        注意隐式的条件是where 显式的是on
                                外连接:outer join, outer可以省略
                                        左外连接:left outer join
                                                select * from a left outer join b on 条件;
                                                以左边表为基准机型查询
                                                如果左边表有的 右边没有 就会自动添加 null
                                                如果右边有多余的 左边没有,就不会被显示出
                                        右外连接:right outer join
                                                select * from a right outer join b on 条件;
                                                以右边表为基准机型查询
                                                如果右边表有的 左边没有 就会自动添加 null
                                                如果左边有多余的 右边没有,就不会被显示出
                                交叉连接:基本不用
                                        select * from a,b
                                        select * from a cross join b
                                       
                        子查询:
                                一个sql语句再查询过程中依赖另外一个语句
                                select * from customer c,order o where c.cid=o.cid And c.cid in(select cid from orders where addr like '海淀%' )
                               
                                SELECT c.cname,COUNT(*) FROM customer c,orders o WHERE c.cid=o.cid GROUP BY c.cname;
                               
                                select case sex when 0 then '男' when 1 then '女' else '人妖' end  as sex from user;
                                case:如果这一列是sex就判断值是 0 还是 1 0就是男  1 就是女
                                数据合并(公司收购的时候整合数据库,会拿一个不重复的字符串(UUID  varchar类型)作为主键)
                               
                Select length(name)        from exam;查询name列中所有的姓名的长度 一个中文占用3个字符
                Select ASCII('a');查询a的asc码
                Select Concat('aa','cc');拼接
                select Reverse("xxoo") 交换
                select truncate(3.14,0)直接取整
                select Round(3.14)四舍五入
                select Least(33,22,11)最小值
                select Greatest(33,44,55);
                select now(); 当前时间
                select sysDAte();系统时间

3 个回复

正序浏览
期待你每天的进步   温故而知新
回复 使用道具 举报
继续努力哦
回复 使用道具 举报
期待每天都看到你的进步~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马