• mySql


    phpmyAdmin 可视化 php 客户端管理工具
    使用:MySql WorkBench
     
    快捷键
    执行整篇sql脚本, ctrl+shift+enter 
    执行当前行,ctrl+enter 
    注释/取消注释, ctrl+/ 
    格式化sql语句(美化sql语句), ctrl+b 
    自动补全,ctrl+space 
     
    数据库默认存放位置:C:ProgramDataMySQLMySQL Server 5.7Data
     
    ef连接mysql时报错System.Data.StrongTypingException: 表“TableDetails”中列“IsPrimaryKey”的值为 DBNull
    1. 运行services.msc,重启MySQL服务.2. 在MySQL运行一下命令:   use mydbname;   set global optimizer_switch='derived_merge=OFF';3. 重新生成 .edmx
     
    创建数据库
    CREATE SCHEMA `david2018_db` ;
    DROP DATABASE `david2018_db`;
     
    数据类型
    int(integer) 整型
    double 浮点型
    decimal(m,d) m数字几位,m小数点几位
    date 日期类型 年月日
    time 时间 时分秒
    datetime 年月日 时分秒
    varchar 可变字符串
    text 存储超大型文本
     
     
    创建表
    CREATE TABLE `david2018_db`.`FirstTable` (
    `Id` INT NOT NULL AUTO_INCREMENT,
    `Name` VARCHAR(45) NULL,
    `CreateTime` DATETIME NULL,
    `Double` DOUBLE NULL,
    `Price` DECIMAL(2) NULL,
    `Content` TEXT(1000) NULL,
    PRIMARY KEY (`Id`));
     
    修改表结构
     
    ALTER TABLE `david2018_db`.`FirstTable`
    CHANGE COLUMN `Name` `FirstName` VARCHAR(45) NOT NULL ,
    CHANGE COLUMN `CreateTime` `CreateTime` DATETIME NOT NULL ,
    CHANGE COLUMN `Double` `Double` DOUBLE NOT NULL ,
    CHANGE COLUMN `Price` `Price` DECIMAL(2,0) NOT NULL ,
    CHANGE COLUMN `Content` `Content` TEXT NOT NULL ,
    ADD COLUMN `LastName` VARCHAR(45) NULL AFTER `FirstName`,
    ADD UNIQUE INDEX `Id_UNIQUE` (`Id` ASC);
     
    创建用户表
    CREATE TABLE `david2018_db`.`users` (
    `uid` INT NOT NULL AUTO_INCREMENT,
    `uname` VARCHAR(20) NULL,
    `uaddress` VARCHAR(200) NULL,
    PRIMARY KEY (`uid`));
     
    Primary Key 主键约束
    auto_increment 自增长
     
    show databases 查看所有数据库
    show tables 查看当前库所有表
    desc 表名 查看表结构
    drop table 表名 删除表
     
    修改用户表结构
    ALTER TABLE `david2018_db`.`users`
    ADD COLUMN `tel` VARCHAR(50) NULL AFTER `uaddress`;
     
    插入数据
    insert into users(uid,uname,uaddress) values(1,'david','beijing');
    insert into users(uname,uaddress) values ('zhagnsan','shandong')--不写主键
    insert into users values(3,'lisi','haerbin','13845054318') --全列值
    insert into users(uname,uaddress) values ('wangwu','qiqihaer'),('liuliu','jilin')--批量插入
     
    更新数据
    update users set tel = '13966854481' where uid = 5 --修改一条
    update users set tel = '13966854482' where uid != 5 --不等于5
    update users set tel = '139668544' where uid in (1,2,3) --123中修改
    update users set tel = '18782942222' --修改所有
    mySql有个限制 不加where或条件不准确时禁止修改, 关闭: 菜单项Edit → Preferences → 选中左侧SQL Editor → 取消复选框 “Safe Updates” 后重启
     
    删除数据
    delete from users where uid = 1
     
    查询
    select uid,uname from users --查询指定列
    select * from users --查询所有列
    select distinct tel from users --去重
    select tel as 电话 from users --查询临时修改列名
     
    where条件
    比较运算符 >、<、<=、>=、 =、!=
    between ... and .. 显示在某一区间的值(含头含尾)
    in(set) 范围
    like 通配符 %匹配多个字符 _匹配一个字符
    is null 断空
    is not null 非空
    and 多个条件同时成立
    or 多个条件任意一面
    not where not(a>1) 非 查询不大于的
    select * from users where uid >1
     
    排序
    select * from users where uid >1 order by uid desc --降序
    select * from users where uid >1 order by uid ASC --升序 可不写asc
     
    聚合
    select count(*) from users --总条数
    select sum(uid) from users --求和
    select avg(uid) from users -- 平均值
    select max(uid) from users --最大值
    select min(uid) from users -- 最小值
     
    分组
    select tel,max(uid) from users group by tel
    select tel from users group by tel having tel like '13%' --having子句 加条件
     
     limit关键字
    select * from users  limit 3; #page1 3
    以下第三页 结果相同 offset偏移 

    select * from users limit 3 offset 6; #page3
    select * from users limit 6,3

     
    多表
     一对多关系
    一的一方为主表 多的一方为从表

    1.分类表
    create table category(
    cid varchar(32) primary key,
    cname varchar(100)
    );

    2.商品表
    create table product(
    pid varchar(32) primary key,
    pname varchar(40),
    price double,
    category_id varchar(32)
    );

    把product表中的 category_id 设置外键到category表中的cid键 

    3.alter table product add foreign key(category_id) references category(cid); 

    主表与从表的建 类型必须相同

    4.插入测试数据

    insert into category(cid,cname) values('c001','家电');
    insert into category(cid,cname) values('c002','服饰');
    insert into category(cid,cname) values('c003','化妆品');

    insert into product(pid,pname,price,category_id) values('p001','lx','5000','c001');
    insert into product(pid,pname,price,category_id) values('p002','hl','5000','c001');
    insert into product(pid,pname,price,category_id) values('p003','ls','5000','c001');

    insert into product(pid,pname,price,category_id) values('p004','JACK JONES','800','c002');
    insert into product(pid,pname,price,category_id) values('p005','weis','200','c002');
    insert into product(pid,pname,price,category_id) values('p006','huahua','440','c002');
    insert into product(pid,pname,price,category_id) values('p007','jinba','2000','c002');

    insert into product(pid,pname,price,category_id) values('p008','xnl','800','c003');
    insert into product(pid,pname,price,category_id) values('p009','benc','200','c003');

     执行删除语句,无法删除此数据,因为有外键引用,

    delete from category where cid = 'c001';

    如果想删除,必须要先将引用的表中相应数据删除掉 才可以删除这个表

    delete from product where category_id = 'c001';
    delete from category where cid = 'c001';

    由此可见,使用外键可以保持数据的完整性,一致性。

    多对多关系

    需要创建第三张表,中间表至少两个字段,这两个字段分别作为外键指向各自一方的主键。

    5.订单表
    create table orders(
    oid varchar(32) primary key,
    totalprice double
    );

    6.订单项表
    create table orderitem(
    oid varchar(50),
    pid varchar(50)
    );

    7.联合主键
    alter table orderitem add primary key(oid,pid);

    8.订单表和订单项表的主外键关系
    alter table orderitem add constraint orderitem_orders_fk foreign key(oid) references orders(oid);

    9.商品表和订单项表的主外键关系
    alter table orderitem add constraint orderitem_product_fk foreign key(pid) references product(pid);

     
    一对一 主键对主键
    实际开发中不多见,可以合并成一张表。
     
     多表查询
    1.交叉连接查询(基本不会使用-得到的是两个表的乘积)
    语法:select * from A,B;
    2.内连接查询(使用 inner join --inner可以省略)
    语法:select * from A inner join B on 条件;
    隐示:select * from category , product where category.cid = product.category_id;
    显示:select * from category inner join product on category.cid = product.category_id;
    3.外连接查询(使用 outer join -outer可以省略)
    左外连:select * from A left outer join B on 条件;
    右外连:select * from A right outer join B on 条件;
    insert into category values ('c009' , 'hh');
    select * from category left join product on category.cid = product.category_id; #左为主 右边有null
    select * from category right join product on category.cid = product.category_id; #右表为主 左边有null

    子查询

    一条查询的结果作为另一条select语句的一部分,

    select * from product where category_id = (select cid from category where cid = 'c001')

  • 相关阅读:
    N个数字每X个数字组成一组,求组数
    生成带文本的UIImage
    Linux创建环境变量(Mac OS)
    为UIView绘制单边的boder
    ecshop之随机文章
    微软继MVC5后,出现ASP.NET VNEXT
    本科毕业生转正之前谈待遇
    ecshop title优化
    百度地图开发之一】申请Key和配置初览显示地图
    项目总结—jQuery EasyUI-DataGrid 拼表及查看详情
  • 原文地址:https://www.cnblogs.com/baidawei/p/8778730.html
Copyright © 2020-2023  润新知