mysql运用
有时候项目需要将存在表格中的批量数据导入数据库,最近自己正好碰到了,总结一下:
1.将excel表格另存为.csv格式文件,excel本身的.xlsx格式导入时可能会报错,为了避免不必要的格式错误,直接使用.csv格式。
2.使用notepad++编辑工具,打开.csv文件,将字符编码格式改为utf-8(不修改的话导入数据库后,中文会出现乱码)保存。
notepad++打开文件--编码--转为UTF-8编码格式--保存
3.按照excel数据格式新建数据库表,匹配字段(或者根据数据库要求的表格字段调整excel表格数据)
4.导入数据。
打开数据库--选择导入的数据库表--右键(导入向导)--CSV文件--选择要导入的文件--根据表格设计,修改字段名行和第一个数据行的数字--选择表的源字段(一一对应)--开始导入。
附上两个自己参考导入的链接:
https://blog.csdn.net/weixin_38437243/article/details/78974346
https://jingyan.baidu.com/article/fc07f9891cb56412ffe5199a.html
数据库的5个基本单位
数据库服务器
数据库
数据表
数据字段
数据行
登录数据库的命令(要记住)
Mysql –h localhost
–u root -p
写出数据库创建、查看、数据库表操作命令
(1)创建数据库:create database 数据库名字
(2)查看:show databases;
(3)查看表:show tables;
(4)删除表:drop table 表名
表创建及字段结构查看命令
(1)创建表:create table 表名
(2)查看表字段结构:desc 表名
说出MyISAM、nnoDB引擎区别
1、事务的支持不同(innodb支持事务,myisam不支持事务)
2、锁粒度(innodb行锁应用,myisam表锁)
3、存储空间(innodb既缓存索引文件又缓存数据文件,myisam只能缓存索引文件)
4、存储结构
(myisam:数据文件的扩展名为.MYD
myData ,索引文件的扩展名是.MYI myIndex)
(innodb:所有的表都保存在同一个数据文件里面 即为.Ibd)
列出Mysql数据字段操作常用命令
(1)、查看表结构:desc表名
(2)、修改表字段类型 modify :alter table 表名 modify 字段名varchar(20);
(3)、增加表字段:alter
table 表名 add column 字段名类型
(4)、增加字段时控制字段顺序:alter
table 表名add 字段名字段类型after 字段名;
(5)、删除表字段:alter table 表名 drop column 字段名;
(6)、表字段改名:alter table 表名 change 字段原名字段新名字段类型;
(7)、修改表字段排列顺序:alter table 表名modify 字段名 first;
(8)、修改表名:alter table 旧表名 rename 新的表名;
目前我们常用 的数据库编码有那2个
GBK UTF -8
写一条mysql普通索引命令
基本语法 alter table表 add index(字段)
示例 alter table usres add index(id)
写出mysql数据库增删改查之插入语句命令
插入基本语法一
基本语法 insert into表 values(值1,值2,值n);
插入基本语法二
基本语法 insert into表(字段1,字段2,字段n) values(值1,值2,值n);
基本语法1和基本语法2的区别是:
基本语法1的插入语句,表中有多少个字段就必须要插入多少个值。一个不能多,一个也不能少。若有默认值,不想传,可以写上null。
基本语法2中,除非有必填字段必须要写入值外。如果有默认值的不想写可以忽略不写。mysql会自动补主默认值。
1、 完成结果集分组排序
基本语法 select字段 from 表order by字段排序关键词
示例 select id,username,balance from money order by balance desc;
示例说明 查询money表中的id,username,balance字段,按照余额进行降序排序
排序用到的关键词:
asc 升序排列,从小到大(默认)
desc 降序排列,从大到小
在 select 出来之后的结果集中排序使用 order by ,其中 desc 和 asc 是排序顺序中的关键字。desc 表示按照字段进行降序排列,asc 表示升序排列,如果不写关键字默认升序排列。
2、 分别写出sum、count、max、min、avg等sql应用语句
基本语法 select函数(字段) from 表
1例如查询总金额:select sum(balance) from money;
2.查询money表的id总数
mysql> select count(uid) from money;
3.查询最大金额
mysql>select max(balance)from money;
4查询最小金额
mysql> select min(balance) from money;
5. 查询平均金额
mysql> select avg(balance) from money;
完成2个表的联合查询操作
mysql> select u.uid ,u.username as username,o.oid,o.uid,o.name as shopname from user u,order_goods o where u.uid = o.uid;
外连接
基本语法 select表1.字段 [as 别名],表n.字段 from表1 LEFT JOIN 表n on 条件;
示例 select * from user left join order_goods on user.uid = order_goods.uid;
示例说明 以左边为主,查询哪些用户未购买过商品,并将用户信息显示出来外连接又分为左连接和右链接,具体定义如下。
左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录
mysql> select * from user left join order_goods on user.uid = order_goods.uid;
右连接:包含所有的右边表中的记录甚至是右边表中没有和它匹配的记录
基本语法 select表1.字段 [as 别名],表n.字段 from表1 right JOIN 表n on 条件;
示例 select * from user right join order_goods on user.uid = order_goods.uid;
示例说明 查询商品表中哪些用户购买过商品,并将用户信息显示出来
mysql> select * from user right join order_goods on user.uid = order_goods.uid;
子查询
有时候,当我们查询的时候,需要的条件是另外一个select语句的结果,这时就需要使用子查询。用于子查询的关键字包括in、not in、=、!=、exists、not exists等。
基本语法 select字段 from表 where 字段 in(条件)
示例1 select * from user where uid in (1,3,4);
示例1说明 按照id 查询指定用户
示例2 select * from user where uid in (select uid fromorder_goods);
示例2说明 将购买过商品的用户信息显示出来
示例1:
mysql> select * from user where uid in (1,3,4);
示例2:
mysql> select * from user where uid in (select uid fromorder_goods);
记录联合
使用 union 和 union all 关键字,将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示。两者主要的区别是把结果直接合并在一起,而 union 是将 union all 后的结果进行一次distinct,去除重复记录后的结果。
基本语法 select语句1
union[all] select语句2
示例 select * from user where uid in (1,3,4);
示例说明 将商品表中的用户信息和用户表中的用户信息的结果组合在一起
mysql> select uid from user union select
uid from order_goods;
Mysql增删改查之更新记录
更新记录
更新数据我们已经说过。需要修改内容,修改银行卡余额,修改装备信息的时候都需要使用到update,修改语句。
money表数据结构:
CREATE TABLE IF NOT EXISTS money (
uid int(11) NOT NULL,
username varchar(30) NOT NULL,
balance DECIMAL(9,2) NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
money表数据:
INSERT INTO money(uid,username,balance)
values('1','zhangsai','15000.22');
INSERT INTO money(uid,username,balance)
values('2','zhangsa','16000.22');
INSERT INTO money(uid,username,balance)
values('3','lisi','17000.22');
INSERT INTO money(uid,username,balance)
values('4','wangwu','18000.22');
修改(也叫更新)语句的基本语语法如下:
基本语法 update表名 set 字段1=值1,字段2=值2,字段n=值n where 条件
示例 update money set balance=balance-500 where userid = 15;
示例说明 修改money表,将balance余额减500。要求userid为15
假设我们有下面这一个表,表结构如下:
mysql> select * from money where username='lisi';
使用 update 语句进行记录更新
mysql> update money set balance=balance-500 where uid = 15;
同时对两个表进行更新
基本语法 update表1,表2 set 字段1=值1,字段2=值2,字段n=值n where 条件
示例 update money m,user um.balance=m.balance*u.age where m.userid=u.id;
示例说明 修改money,将money表的别名设置为m;user表的别名设置为u;将m表的余额改为m表的balance*用户表的age。执行条件是:m.userid
= u.id
mysql> update money m,user u
m.balance=m.balance*u.password where m.uid=u.uid;
使用 delete 删除记录
基本语法 DELETE FROM表 [where 条件];
示例 DELETE FROM user whereid > 10;
示例说明 删除掉用户表中id大于10的所有用户
mysql> DELETE FROM money where uid='1';
Query OK, 1 row affected (0.08 sec)
删除掉了id为1的记录。
清空表记录
delete和truncate是一样的,但它们有一点不同,那就是DELETE可以返回被删除的记录数,而TRUNCATE TABLE返回的是0。
如果一个表中有自增字段,使用truncate table 这个自增字段将起始值恢复成1.
基本语法 TRUNCATE TABLE表名;
示例 TRUNCATE TABLE user;
示例说明 清空表的数据,并且让自增的id从1开始自增
【切记】
删除时一定要记住加上where条件,不然会清空掉整个表的记录。
删除重要数据前一定要备份、备份、备份。
[if !supportLists]2.1.4.2 [endif]Mysql 权限操作
添加权限
类别 详细解示
基本语法 grant权限 on 库.表 to '用户'@'主机'
identified by '密码';
示例 grant select, inserton test.* to 'liwenkai'@'localhost' identified by '4311';
示例说明 给予liwenkai用户,在本机连接test库所有表的权限。操作的这些表具有查询和写入权限
注:可以针对一个用户增加多条权限。
删除权限
基本语法 revoke权限 on 库.表 from '用户'@'主机';
示例 revoke select, insert ontest.* to 'liwenkai'@'localhost' identified by '4311';
示例说明 给予liwenkai用户,在本机连接test库所有表的权限。操作的这些表具有查询和写入权限。
参数说明
grant all 在grant后接all说明给予所有权限
revoke all 在revoke后接all说明删除所有权限
权限on . .所明给予所有库所有表的操作权限
'用户'@'主机' 主机里面若为%。任意来源的主机均可以使用这个用户来访问
创建数据库用户liwenkai ,具有对test数据库中所有标的 select / insert 权限
示例:增加权限
mysql> grant select, insert on test.* to
'liwenkai'@'localhost' identified by '4311';
Query OK, 0 rows affected (0.00 sec)
示例:移除权限
mysql> revoke insert on test.* from
'liwenkai'@'localhost';
Query OK, 0 rows affected (0.30 sec)
注:
上面的一些语句用的较少。你可以将知识点的掌握级别设置为了解级别。
更多的时候,权限设置项特别多,人们往往记不住具体的命令。更多的时候人们使用专门的工具来操作权限。