首页 > 技术文章 > MySQL笔记

kin02 2021-05-06 14:08 原文

  1  SHOW DATABASES;#查看当前所有的数据库
  2  USE 库名;#打开指定的库
  3  SHOW TABLES;#查看当前库的所有表
  4  SHOW TABLES FROM 库名;#查看其他库的所有表
  5  DESC 表名;#查看表的列信息
  6  SELECT * FROM 表名;#查看表中所有数据
  7  SELECT `字段`,`字段`FROM 表名;#自定义查询表中多个字段
  8  SELECT DATABASE();#查看当前所在库
  9  10  UPDATE USER SET PASSWORD=PASSWORD('123456')WHERE USER='root';#修改密码
 11  SET PASSWORD =PASSWORD('123456');#改密码
 12  FLUSH PRIVILEGES;#刷新数据库
 13  CREATE DATABASE NAME;#创建数据库
 14  SELECT VERSION();#查看服务器的版本
 15  #sc delete mysql 清空服务
 16  17  /*
 18  unsigned 无符号整数
 19  zerofill 空位零补充
 20  auto_InCrement 自增
 21  */
 22  23  #修改
 24  ALTER TABLE 旧表名 RENAME AS 新表明;#修改表名
 25  ALTER TABLE 表名 ADD 字段名 列属性[INT(4)];#增加表的字段
 26  27  ALTER TABLE 表名 MODIFY 字段名 列属性;#修改表的字段名
 28  ALTER TABLE 表名 CHANGE 旧名字 新名字 列属性;#字段修改约束或类型
 29  /*
 30  change用来字段重命名,不能修改字段类型和约束
 31  modify不用来字段重命名,只能修改字段类型和约束
 32  */
 33  #删除
 34  DROP TABLE IF EXISTS 表名;#删除表
 35  /*
 36  为防止报错在创建和删除操作是尽量加上判断,一面报错~
 37      #if exists#
 38  */
 39  40  SHOW CREATE DATABASE 库名;#查看数据库的定义
 41  SHOW CREATE TABLE 表名;#查看数据表的定义
 42  43  44  #增
 45  INSERT INTO 表名(字段1,字段2,字段3,...) VALUES('值1','值2','值3')
 46  /*注:字段和字段之间使用英文逗号隔开;
 47        字段是可以省略的,但是后面的值必须要一一对应,不能少
 48        可以同时插入多条数据,values后面的值,需要使用,隔开即可 values(),()...
 49  */
 50  51  #改
 52  UPDATE 表名 SET `指定列名`='要改的内容',[`指定列名`='要改的内容'] WHERE [条件]
 53  /*注:指定列名是数据库的列,尽量带上``
 54        条件:筛选的条件如果没有指定,则会修改组欧诺的列
 55        要更改的内容是一个具体的值,也可以是一个变量
 56        多个设置的属性之间,使用英文逗号隔开
 57  */
 58  59  #删
 60  DELETE FROM `表名`; -- 自增不清零
 61  TRUNCATE TABLES `表名`; -- 自增清零
 62  63  #查
 64  SELECT `字段`,... FROM `表名`;
 65  66  -- 查询指定字段
 67  SELECT `employee_id`,`first_name` FROM `employees`
 68  69  -- 给查询的字段取别名[AS 可以给字段和表起别名]
 70  SELECT `employee_id`AS 员工ID,`first_name`AS 名字 FROM `employees`AS kin
 71  72  -- 函数 Concat(a,b)
 73  SELECT CONCAT('名字',`first_name`,'工资:',`salary`) AS 新名字 FROM `employees`
 74  75  #去重
 76  SELECT * FROM `employees`;-- 查看所以数据
 77  SELECT `manager_id` AS 工种 FROM `employees`;-- 发现重复数据
 78  SELECT DISTINCT `manager_id` AS 工种 FROM `employees`;-- 去重
 79  --
 80  SELECT VERSION();-- 查看mysql版本
 81  SELECT 250*7+2500+1750+1750 AS 计算结果;-- 计算数值
 82  -- 结果 +1 查看
 83  SELECT `first_name` AS 员工,`manager_id` +1 AS 加薪后 FROM `employees`; 
 84  85  -- ===============================  where查询  ===================================
 86  87  -- ID 在110~130之间的数据
 88  SELECT `employee_id` AS ID,`salary` AS 薪水 FROM `employees`
 89  WHERE `employee_id`>=110 AND `employee_id`<=130;
 90  91  -- ID 小于110或等于130的数据
 92  SELECT `employee_id` AS ID,`salary` AS 薪水 FROM `employees`
 93  WHERE `employee_id`<=110 || `employee_id`=130;
 94  -- ID 不等于110的数据
 95  SELECT `employee_id` AS ID,`salary` AS 薪水 FROM `employees`
 96  WHERE `employee_id`!=100 AND `salary`>=10000;
 97  98  SELECT `employee_id` AS ID,`salary` AS 薪水 FROM `employees`
 99  WHERE `employee_id` BETWEEN 100 AND 110 AND `salary`<=10000
100 101  SELECT `department_id` AS 部门,`salary` AS 薪水 FROM `employees`
102  WHERE `department_id`>=90 AND NOT `salary`<=10000
103 104  -- ===============================  模糊查询  ===================================
105 106  -- like 结合[ % 表示从0到任意一个字符,_ 表示任意一个字符]
107 108  #like
109  SELECT `first_name`,`last_name` FROM `employees`
110  WHERE `first_name` LIKE 'S%'
111 112  SELECT `first_name`,`last_name` FROM `employees` 
113 WHERE `first_name` LIKE 'S%' 
114 115 SELECT `姓名`,`年龄`FROM `stu` 
116 WHERE `姓名` LIKE '王__' 
117 118 SELECT `姓名`,`年龄`FROM `stu` 
119 WHERE `姓名` LIKE '%梦%' 
120 121 -- in() 在某个范围内 
122 123 SELECT `ID`,`姓名`FROM `stu` 
124 WHERE `性别` IN('') 
125 126 -- is null  is not null 
127 SELECT *FROM `departments` 
128 SELECT `department_name` AS 姓名,`location_id` AS 工种 FROM `departments` 
129 WHERE `manager_id` IS NULL OR `department_id` IN(230,240,250) 
130 131 SELECT `department_name` AS 姓名,`location_id` AS 工种 FROM `departments` 
132 WHERE `manager_id` IS NOT NULL 
133 134 SHOW CREATE TABLE `stu`#查询表结构 
135 136 #聚合函数 
137 138 SELECT COUNT(`姓名`) FROM `stu_copy` 
139 140 函数名称  函数功能 
141 142 COUNT()  返回选取结果集中行的数目 
143 144 SUM()  返回选取结果集中所有值的总和 
145 146 AVG()  返回选取结果集中所有值的平均值 
147 148 MAX()  返回选取结果集中所有值的最大值 
149 150 MIN()  返回选取结果集中所有值的最小值 
151 152 语法:SELECT 函数(`列名`) FROM `表名` 
153 154 #排序查询 order by 
155 SELECT * FROM `stu_copy` ORDER BY `工资` ASC #升序 
156 SELECT * FROM `stu_copy` ORDER BY `工资` DESC #降序 
157 #分页函数 limit 
158 SELECT * FROM `stu` 
159 LIMIT 0,5 
160 -- 语法:limit 起始下标,查询起始长度 
161 162 #联立查询 
163 164 -- INNER JOIN 
165 SELECT s.`ID`,`工种`,`成绩`,`性别` 
166 FROM `stu` AS s 
167 INNER JOIN `stu_copy` AS c 
168 WHERE s.stu=c.stu_copy 
169 170 -- Right join 
171 SELECT s.`ID`,`工种`,`成绩`,s.`姓名` 
172 FROM `stu` AS s 
173 RIGHT JOIN `stu_copy` AS c 
174 ON s.`ID`=c.`ID` 
175 176 -- Left join 
177 SELECT s.`ID`,`工种`,`成绩`,s.`姓名` 
178 FROM `stu` AS s 
179 LEFT JOIN `stu_copy` AS c 
180 ON s.`ID`=c.`ID` 
181 182 SELECT s.`ID`,`工种`,`成绩`,s.`姓名` 
183 FROM `stu` AS s 
184 LEFT JOIN `stu_copy` AS c 
185 ON s.`ID`=c.`ID` 
186 WHERE `成绩` IS NULL 
187 188 -- join (连接的表) on (判断的条件) 连接查询 
189 -- where 等值查询 
190 191 #方法 
192 /* 
193 我要查询哪些数据:select …… 
194 从哪几个表中查:from 表名 左表[as *] join 连接的表[as *] on 交叉条件 
195 假设存在一种多张表查询,慢慢来,先查询两张表然后在慢慢增加 
196 */ 
197 198 #SELECT语法 
199 SELECT [ALL | DISTINCT] 
200 {* | table.*| [table.field1[AS alias1]][,...]]} 
201 FROM table_name [AS table_alias] 
202 [LEFT | RIGHT | INNER JOIN table_name2]  -- 联合查询 
203 [WHERE ...]  -- 指定结果需满足的条件 
204 [GROUP BY ...]  -- 指定结果按照哪几个字段来分组 
205 [HAVING]  -- 过滤分组的记录必须满足的次要条件 
206 [ORDER BY ...]  -- 指定查询记录按一个或多个条件排序 
207 [LIMIT {[OFFSET,]ROW_COUNT | row_countOFFSET OFFSET}]; 
208 -- 指定查询的记录从哪条至哪条 
209 注意 : [ ] 括号代表可选的 , { }括号代表必选得 
210 211 -- ==================== 函数 ==================== 
212 #数学运算 
213 SELECT ABS(-8)-- 绝对值 
214 SELECT CEILING(9.5)-- 向上取整 
215 SELECT FLOOR(9.5)-- 向下取整 
216 SELECT RAND()-- 返回0~1之间的随机数 
217 SELECT SIGN()-- 判断一个数的符号 0=0 正=1 负=-1 
218 219 #字符串函数 
220 SELECT CHAR_LENGTH('勿以恶小而为之')-- 字符串长度 
221 SELECT CONCAT('2020','2月','19日')-- 拼接字符串 
222 SELECT INSERT('我爱炉石传说',2,1,'喜欢打')-- 替换字符串 
223 SELECT LOWER('ScHool')-- 转换为小写字母 
224 SELECT UPPER('ScHool')-- 转换为大写字母 
225 SELECT INSTR('Hello word','o')-- 搜索指定字符,返回第一个发现指定字符的位置 
226 SELECT REPLACE('二戒喜欢打炉石传说','喜欢','')-- 字符串替换函数 
227 SELECT SUBSTR('我爱学习sql语言,然后学习jdbc',2,9)-- 返回指定的子字符串(源字符串,截取的位置,截取的长度) 
228 SELECT REVERSE('你的生字表')-- 反转 
229 230 #时间和日期函数 
231 SELECT NOW()-- 获取当前时间 
232 /* 
233 select current_date()-- 获取当前日期 
234 select curdate()-- 获取当前日期 
235 select localtime()-- 本地时间 
236 select sysdate()-- 系统时间 
237 */ 
238 SELECT YEAR(NOW())--
239 SELECT MONTH(NOW())--
240 SELECT DAY(NOW())--
241 SELECT HOUR(NOW())--
242 SELECT MINUTE(NOW())--
243 SELECT SECOND(NOW())--
244 245 #系统 
246 SELECT SYSTEM_USER()-- 系统当前用户 
247 SELECT USER()-- 系统当前用户 
248 SELECT VERSION()-- 系统当前版本 
249 250 -- ==================== 聚合函数 ==================== 
251 -- 都能够统计 表中的数据(想查询一个表中有多少个记录,就使用这个count()) 
252 SELECT COUNT(`ID`) FROM `copy`;-- count(列名),会忽略所有的 null 值 
253 SELECT COUNT(*) FROM `copy`;-- count(*),不会忽略null值,本质计算行数 
254 SELECT COUNT(1) FROM `copy`-- count(1),不会忽略所有的null值 本质计算行数 
255 256 SELECT SUM(`成绩`) AS 总分 FROM `copy`-- 求和 
257 SELECT AVG(`成绩`) AS 平均分 FROM `copy`-- 求平均值 
258 SELECT MAX(`成绩`) AS 最高分 FROM `copy`-- 求最大值 
259 SELECT MIN(`成绩`) AS 最低分 FROM `copy`-- 求最小值 
260 261 262 #索引 
263 SELECT * FROM `app_user` WHERE `name` ='用户999999' 
264 EXPLAIN SELECT * FROM `app_user` WHERE `name`='用户999999' 
265 266 -- id_表名_字段名 
267 -- create index 索引名 on 表(字段) 
268 CREATE INDEX id_app_user_name ON app_user(`name`) 
269 270 SELECT * FROM `app_user` WHERE `name` ='用户999999' 
271 /*索引在小数据量的时候,用处不大,但是在大数据的时候,局别十分明显 
272 索引的原则: 
273 索引不是越多越好 
274 不要对进程变动数据加索引 
275 小数据量的表不需要加索引 
276 索引一般加在常用来查询的字段上! 
277 */ 
278 279 -- 创建用户 create user 用户名 identified by '密码' 
280 CREATE USER kin IDENTIFIED BY '123456' 
281 282 -- 修改密码(修改当前用户密码) 
283 SET PASSWORD=PASSWORD('123456') 
284 285 -- 修改密码(修改指定用户密码) 
286 SET PASSWORD FOR kin=PASSWORD('200105') 
287 288 -- 重命名 rename user 原来名字 to 新的名字 
289 RENAME USER kin TO kin2 
290 291 -- 用户授权:all privileges on(全部的权限)库.表 to 指定用户 
292 #除了给别人授权,其他都可以  
293 GRANT ALL PRIVILEGES ON *.* TO kin2 
294 295 -- 查看权限 
296 SHOW GRANTS FOR kin2-- 查看指定用户权限 
297 SHOW GRANTS FOR root@localhost 
298 SHOW GRANTS FOR  
299 300 SET PASSWORD FOR LONG=PASSWORD('123456') 
301 302 303 #导出 
304 -- 使用命令行导出 mysqldump 命令行使用 
305 # mysqldump -h 主机 -u 用户名 -p 密码 数据库 表名 > 物理磁盘位置/文件名 
306 mysqldump -h localhost -u root -p123456 school day1 > C:/a.sql-- 单表导出 
307 308 # mysqldump -h 主机 -u 用户名 -p 密码 数据库 表名1 表名2 … > 物理磁盘位置/文件名 
309 mysqldump -h localhost -u root -p123456 school day1 day2 > C:/b.sql-- 多表导出 
310 311 # mysqldump -h 主机 -u 用户名 -p 密码 数据库 > 物理磁盘位置/文件名 
312 mysqldump -h localhost -u root -p123456 school > C:/b.sql-- 数据库导出 
313 314 315 #导入 
316 -- 登录mysql的情况下 
317 -- 命令行操作:source 物理磁盘位置/文件名 
318 source c:/a.sql 

 

推荐阅读