-- 查看数据表结构
desc api_job;
-- 数据表字段解释
explain api_job;
/**
使用explain可以分析mysql的查询性能,查看
表的读取顺序
数据读取操作的操作类型
哪些索引可以使用
哪些索引被实际使用
表之间的引用
每张表有多少行被优化器查询
开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划。
查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看
**/
explain select * from api_job limit 10;
-- 查看创建SQL的DDL语句
show create table api_test;
参考博客
https://www.jianshu.com/p/c3b7db87b061
MySQL的官网http://www.mysql.com/downloads/ ,在页面中会看到“MySQL Community Server”
下载后安装,最后一步有弹出框提示root账号默认的密码,需要记住,如果没记,需要修改root的密码
启动方式1:Mac系统偏好设置启动
1、系统偏好设置->最下边点MySQL,在弹出页面中,关闭服务,但是有时候无法关闭,则用ps -ef|grep -v 'grep'|grep mysql
查看mysql进程。再用➜ ~ ps -ef|grep -v 'grep'|grep mysql|awk '{print $2}'|xargs sudo kill -9 杀掉进程
杀掉进程查看mysql
启动方式2:终端命令行
2、终端输入:
cd /usr/local/mysql/bin/
3、回车后 登录管理员权限
sudo su
4、回车后输入以下命令来禁止mysql验证功能
./mysqld_safe --skip-grant-tables &
5、回车后mysql会自动重启(偏好设置中mysql的状态会变成running)
6、输入命令
./mysql
7、回车后,输入命令
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPass!';
⚠️MySQL 设置的密码中必须至少包含一个大写字母、一个小写字母、一个特殊符号、一个数字,密码长度至少为8个字符。
此时查看 Mac的系统偏好设置-mysql为running状态
设置成功,连接成功的截图如第一张图片
双击打开-新建数据库-打开数据库
新建连接,Navicat-connections-mysql,一切默认即可,connection name名字随意
-- 删除表
-- 1. drop (删除表):删除内容和定义,释放空间。简单来说就是把整个表去掉.以后要新增数据是不可能的,除非新增一个表。
-- drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。
-- 2. truncate (清空表中的数据):删除内容、释放空间但不删除定义(保留表的数据结构)。与drop不同的是,只是清空表数据而已。
-- 注意:truncate 不能删除行数据,要删就要把表清空。
--
-- 3. delete (删除表中的数据):delete 语句用于删除表中的行。delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存。以便进行进行回滚操作。
-- truncate与不带where的delete :只删除数据,而不删除表的结构(定义)
DROP TABLE orderinfo;
-- 创建用户订单表
CREATE TABLE orderinfo (
`id` int NOT NULL AUTO_INCREMENT,
`orderid` varchar(40) NOT NULL COMMENT '用户订单id',
`userid` varchar(50) NOT NULL COMMENT '用户id',
`describe` varchar(50) DEFAULT NULL COMMENT '用户id',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=6011 DEFAULT CHARSET=utf8
COMMENT='用户订单表';
-- 插入数据
INSERT INTO orderinfo VALUES (1,"abc","123","");
INSERT INTO orderinfo VALUES (2,"abd","123","雅诗兰黛");
INSERT INTO orderinfo VALUES (3,"abe","124","兰蔻");
INSERT INTO orderinfo VALUES (4,"abf","125","希思黎");
INSERT INTO orderinfo VALUES (5,"abg","124","希思黎");
-- 删除指定的列
-- DELETE FROM orderinfo WHERE id=1;
SELECT * FROM orderinfo;
-- 查询所有的用户id
SELECT DISTINCT(userid) FROM orderinfo;
-- 查询所有不重复的用户数量,考虑到一个用户可能会下多个订单
SELECT COUNT(DISTINCT(userid)) FROM orderinfo;
-- 查询结果起一个新的名称
SELECT COUNT(DISTINCT(userid)) as usercount FROM orderinfo;
如遇Incorrect string value: '\xE5\xB0\x8F\xE6\x9D\x8E' for column 'name' at row 1
CREATE TABLE student (
id varchar(10) NOT NULL,
name varchar(40) DEFAULT NULL,
gender varchar(10) DEFAULT NULL,
age int(10) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
由此发现charset设置为Latin1,Latin1不支持中文字符,因此我们需要修改编码格式
2.修改student表编码格式:alter table Student default character set utf8;
3.查看student表显示:
CREATE TABLE student (
id varchar(10) CHARACTER SET latin1 NOT NULL,
name varchar(40) CHARACTER SET latin1 DEFAULT NULL,
gender varchar(10) CHARACTER SET latin1 DEFAULT NULL,
age int(10) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
此时表的编码格式已经改变,但是列的编码格式显示为Latin1
CREATE TABLE `bossnew` (
`id` int(11) DEFAULT NULL,
`name` text,
`bossid` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
修改编码后插入数据成功
如果还是报错 则修改对应报错字段的编码
alter table boss change name name varchar(255) character set utf8;
修改后插入数据成功
如遇报错
Error : Column 'name' in field list is ambiguous
今天在写SQL的时候用到了子查询,将子查询修改为外连接查询时遇到了错误,在这里记录一下,以及相应的解决办法。
左关联查询:select name,id from boss as A left join boss as B on A.id=B.bossid;
执行结果:
错误原因/原因分析
列’name / id’在字段列表中重复,其实就是两张表有相同的字段,但是使用时表字段的名称前没有加表名,导致指代不明,前面加上前缀boss表就没问题了
解决办法:1.修改其中一个表的主键名称。2.查询的时候通过别名限制查询的是哪一个表的字段
修改后SQL:select A.name,A.id from boss as A left join boss as B on A.id=B.bossid;
执行结果:
。。。。。。