一、连接数据库,查看对象,数据库的维护,mysql的数据类型
1、连接数据库
mysql -hlocalhost -uroot -proot
2、查看对象
show databases; 查看有哪些数据库
show tables;查看有哪些表
show columns from [table_name];查看表里有哪些字段
show index from [table_name]; 查看表里的索引
3、数据库的维护
创建数据库:create databases test;
删除数据库:drop databases test;
选择数据库:use test;
4、数据类型
(1)字符串(UTF-8自负集问题,排序问题,长度问题)
排序使用order by函数。顺序排序,sql语句后面加asc
倒序排序,sql语句后面加desc
如果按照某个字段长度排序用order by加length函数,order by length(字段名)
如果你想根据字符串的字母进行排序,用 order by left(字段名,1)asc来进行排序
(2)数值(范围;小数,精度丢失,使用整数处理;)
精度丢失可以使用DECIMAL;四舍五入可以使用round如ROUND(your_column, 2)转换为数值类型,避免精度丢失CAST(your_column AS DECIMAL(10, 2));
(3)日期时间
时区,存储0时区的时间
5、表结构的维护
(1)创建表
CREATE TABLE `class` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(10) NOT NULL COLLATE 'utf8mb4_bin',
PRIMARY KEY (`id`),
UNIQUE INDEX `Unique_Class_Name` (`name`)
)
COLLATE='utf8mb4_bin'
ENGINE=InnoDB;
(2)索引
a、索引的作用:提高查询速度
b、在哪些字段上创建索引:查询条件里有哪些字段,这些字段可以用来创建索引
c、索引的缺点:占用存储空间,影响增删改的速度
d、索引有那几种类型:主键、唯一索引、普通索引
(3)表结构维护的一些常用语句
删除表:drop table `class`;
增加字段:ALTER TABLE `class`
ADD COLUMN `no` INT(11) NOT NULL DEFAULT '0' AFTER `id`;
删除字段:ALTER TABLE `class`
DROP COLUMN `no`;
修改字段:ALTER TABLE `class`
CHANGE COLUMN `name` `name2` VARCHAR(20);
增加数据:
-- 插入多行数据最优方案
INSERT INTO `class` (`id`, `no`, `name`) VALUES
(5, 1086, '李四'),
(6, 1086, '王五'),
(7, 1086, '麻子');
删除数据:-- 避免删除所有数据,必须有WHERE
DELETE FROM `test`.`class` WHERE `id`=1;
-- 这是sql注释
更新数据:-- 避免更新所有数据,必须有WHERE
-- name更新为新值
UPDATE `test`.`class` SET `name`='王五' WHERE `id`=6;
-- name后追加字符串
UPDATE `test`.`class` SET `name`= concat(`name`, '3') WHERE `id`=6;
6、表结构维护之查询语句
(1)数据量比较大,上万行,分页查询
-- 从0行记录开始,返回100条记录
select `id`, `no` from `class` where `id` > 1 limit 0, 100
(2)分组
把数据集分为多个组
group by 字段1[,字段2,字段3]。 分组是为了计算各个组的总体情况
结果里一般包括:分组字段和统计函数值 having支持使用聚合函数作为条件
查询重复数据:select login, count(*) c from user group by login having c>1
(3)过滤重复数据 select distinct(login) from user
删除重复数据
删除重复的行并保留id重复行最小的一行记录
DELETE FROM user
WHERE
login IN (
SELECT
login
FROM
user
GROUP BY
login
HAVING
count(login) > 1
) -- 所有重复数据的login
AND
id NOT IN (
SELECT
min(id)
FROM
user
GROUP BY
login
HAVING
count(login) >1
); -- 排除重复login的最小id
7、数据库维护的基本操作
(1)sql语句中where子句的用法
a、where后跟判断操作符 如= 、 > 、 <、 !=
b、where后跟逻辑运算符 如and 、or 、 not
(2)where后跟模糊查询
a、%表示任意多个字符:%王% 匹配 1王23 王3 王
b、表示任意一个字符:王 匹配 王四,不匹配 王12
c、数据库的模糊查询性能往往很低,使用全文检索系统(solr, els)来实现模糊查询
(3)函数
a、聚合函数:需要多条记录参与
b、非聚合函数:只需要一条记录参与
(4)事务
开启事务:BEGIN
提交事务:COMMIT
回滚事务:ROLLBACK