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