mysql连表查询基本增删改查

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: mysql连表查询基本增删改查
1. #MYSQL的一下基础
2. 启动mysql服务
3. net start mysql
4. 
5. 
6. ===================================================
7. CREATE TABLE user_u_s (
8.  id INT(4) ZEROFILL,#属性zerofill长度不够0来补齐
9.  `name` NVARCHAR(20)
10. );
11. =====================================================
12. CREATE TABLE user_tb(
13.   id INT(5) PRIMARY KEY AUTO_INCREMENT,#auto_increment属性为自增
14. 
15. );
16. =========================================================
17. 
18. #表 test
19. DESC test  #desc 表名 查看表结构
20. 
21. SHOW CREATE TABLE test;#展示创建表的语a句
22. 
23. 
24. ======================================================
25. #创建t01表
26. CREATE TABLE t01 (
27.   id INT(5)PRIMARY KEY AUTO_INCREMENT,
28.   `name` NVARCHAR(10)
29. )AUTO_INCREMENT =100;#创建表的末尾添加auto_increment = 100 ;自增从100开始
30. #修改表的自增方式,增长方式为20,20 的增加
31. ALTER TABLE t01 AUTO_INCREMENT = 20;
32. 
33. #增长方式为跳着增长.为5个5个的增长
34. SET @@auto_increment = 5;
35. 
36. #清空表,但是自增在原有数据上增长
37. DELETE FROM t01;
38. #清空表,自增从1开始 truncate
39. TRUNCATE
40. =======================================================
41. 
42. CREATE TABLE t02(
43.   id INT(4),
44.   `name` NVARCHAR(10) DEFAULT '男' #default 用来设置默认值的
45. 
46. );
47. =====================================================
48. CREATE TABLE t03(
49.   id INT(2) COMMENT 't03表的主键',#列注释
50.   `name` NVARCHAR(10) COMMENT '姓名'#列注释
51.   PRIMARY KEY ('id') #约束可以这样写
52. )COMMENT = 't03表' ;#表注释
53. 
54. 数据库表类型
55. =============================================
56. #表类型写在括号后面
57. creat table 表 (
58. 
59. id int(4),
60. name varcher(10)
61. 
62. )engine = MyISAM或engine = innoDB;
63. #engine = MyISAM用于表查询
64. #engine = innoDB 用于表事物,增删改
65. 
66. 
67. =============================================
68. #修改表名:ALTER TABLE 旧表名 RENAME AS 新表名;
69. ALTER TABLE test RENAME AS test01;
70. 
71. #添加字段
72. ALTER TABLE test01 ADD `age1` INT(2);
73. #修改字段属性
74. ALTER TABLE test01 MODIFY `name` CHAR(4)
75. #删除字段
76. ALTER TABLE test01 DROP age;
77. #修改字段
78. ALTER TABLE test01 CHANGE `name` `username` NVARCHAR(10)
79. #添加主键
80. ALTER TABLE test01 ADD CONSTRAINT pk_test01 PRIMARY KEY(id);
81. #删除主键
82. ALTER TABLE test01 PRIMARY KEY ;
83. #删除外键
84. ALTER TABLE test01 DROP FOREIGN KEY fk_test01;
85. #添加外键
86. ALTER TABLE test01
87.   ADD CONSTRAINT  fk_test01
88.   FOREIGN KEY (id)
89.   REFERENCES test(id);
90. 
91. 创建主外键
92. ===================================================
93. CREATE TABLE t01(
94. id INT(5) AUTO_INCREMENT PRIMARY KEY NOT NULL,
95. `name` NVARCHAR(10)
96. 
97. );
98. 
99. CREATE TABLE t02(
100. idd INT(5)  NOT NULL,
101. `name` NVARCHAR(10)
102. 
103. );
104. 
105. ALTER TABLE t02 ADD CONSTRAINT
106. fk_t02 FOREIGN KEY (idd) 
107. REFERENCES t01(id);
108. 
109. 
110. 
111. 
112. ===================================================
113. DML数据操作介绍
114. insert
115. update
116. delete
117. 
118. ================================================
119. INSERT INTO t01 (`name`,age) VALUES('掌',1);
120. COMMIT
121. 
122. 修改数据
123. ====================================================
124. update t01 set name = 'zhang' , age =0 ; #不加where条件表里面的数据会全部被修改
125. 
126. UPDATE t01 SET `name`='张' ,age = 4 WHERE id= 3;
127. 
128. mysql自带的一些函数
129. UPDATE t01 SET age = age +10;
130. 
131. concat字符追加、、、在name列字段前添加hao的字符
132. UPDATE t01 SET `name` = CONCAT('hao',`name`);
133. 
134. 
135. where 条件拼接
136. =====================================================
137. and  or  < > !=或<>  >=  <= between(一般不用 效率低)
138. 
139. UPDATE t01 SET `name` ='新值' WHERE id>1 AND id<4; 
140. 
141. UPDATE t01 SET `name` ='hehe' WHERE id BETWEEN 3 AND 5; 
142. 
143. 
144. 
145. 事物提交方法
146. ===========================================================
147. 1.start transction 开始一个事物,标记事物的起点。
148. 2.commit 提交一个事物给数据库。
149. 3.rollback 将事物回滚,数据回到本次事物的初始状态。
150. 4.set autocommit = 1; 还原mysql数据库的自动提交。
151. 5.set autocommit = 0; 关闭mysql数据库的自动提交。
152. 
153. 演示银行转账
154. ============================================================
155. CREATE TABLE `account`(
156. `id` INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
157. `name` NVARCHAR(30) NOT NULL,
158. `cash` DECIMAL(9,2) NOT NULL #整数位9位,小数位2位。
159. 
160. )ENGINE=INNODB;
161. 
162. INSERT INTO account (`name`,`cash`) VALUES('a',2000);
163. INSERT INTO account (`name`,`acsh`) VALUES('b',3000);
164. 
165. SET autocommit=0;
166. START TRANSACTION;
167. 
168. UPDATE account SET cash=cash-600 WHERE `name`= 'a';
169. UPDATE account SET cash=cash_600 WHERE `name`='b'
170. sql语句。。。
171. SET autocommit =1;
172. #commit
173. #rollback
174. 
175. 
176. 使用DQL查询
177. ============================================================
178. `grade` 年级表  
179. 字段
180. `GradeID`(PRIMARY KEY),`GradeName`
181. PRIMARY KEY (`GradeID`)
182. 
183. `result` 成绩表
184. 字段
185. `StudentNo`,`SubjectNo`,`ExamDate`,`StudentResult`
186. KEY `SubjectNo` (`SubjectNo`)
187. 
188. `subject` 课程表
189. 字段
190. `SubjectNo`,`SubjectName`,`ClassHour`,`GradeID`
191. PRIMARY KEY (`SubjectNo`)
192. 
193. student 学生表
194. 字段
195. `StudentNo`,`LoginPwd`,`StudentName`,`Sex`,`GradeId`,`Phone`,`Address`,`BornDate`,`Email`,`IdentityCard`
196. PRIMARY KEY (`StudentNo`)
197. ==========================================================
198. SELECT * FROM student ;# 用*查询效率低,一般不用
199. 
200. SELECT Sex,Phone FROM student; #只查看Sex,Phone 这两个字段
201. SELECT s.`Address`,s.`Email` FROM student AS s ; 使用别名查询其中 AS 可以省略(表起别名)
202. 
203. SELECT s.`Address`,s.`Email` FROM student s ; 使用别名查询(表起别名)
204. 
205. SELECT s.`Address` AS 地址,s.`Email` AS 邮箱 FROM student s ; 字段使用别名查询
206. 
207. SELECT COUNT(studentno) AS 总数 FROM student; 记录总数的函数(count)
208. 
209. 使用distinct
210. =====================================================================
211. 使用distinct去除重复,跟在select后面 后面是需要去除重复的字段
212. 语法:select distinct 字段1,字段2,字段N from 表
213. SELECT DISTINCT r.`SubjectNo`FROM result AS r;
214. 
215. ===============================================================
216. concat 查询出的列前加:学生 并跟列起的别名:学生姓名
217. SELECT CONCAT('学生:',studentName) 学生姓名 FROM student ;
218. 
219. SELECT VERSION();查询版本号
220. 
221. SELECT s.`ClassHour` AS 旧课时,s.`ClassHour`+10 新的课时 FROM `subject` AS s;
222. 
223. SELECT s.subjectName AS 课程名称,s.`ClassHour` AS 总课时, s.`ClassHour`/10 AS 平均课时 FROM `subject` AS s;
224. 
225. where条件语句
226. ==========================================================
227. 逻辑操作符
228. and或&& 逻辑与
229. or或|| 逻辑或
230. xor或^ 逻辑异域
231. not或!逻辑非
232. SELECT r.`StudentResult` AS 考试成绩 FROM result AS r 
233.  WHERE r.`StudentResult`>=70 AND r.`StudentResult`<=90;
234. 
235. 
236. =========================================================
237. #查询StudentName 为空的字段 而不是StudentName=null
238. SELECT s.`StudentName` FROM student AS s WHERE s.`StudentName` IS NULL; 
239. #查询StudentName字段 ‘李 ’开头的
240. SELECT s.`StudentName` FROM student AS s WHERE s.`StudentName` LIKE '李%';
241. #查询StudentName字段 ‘文’ 结尾的
242. SELECT s.`StudentName` FROM student AS s WHERE s.`StudentName` LIKE '%文';
243. #查询StudentName字段 ‘李 ’开头的后面匹配 任意 一个 字 一个下划线代表一个字
244. SELECT s.`StudentName` FROM student AS s WHERE s.`StudentName` LIKE '李_';
245. #查询StudentName字段 开头的匹配任意一个 字 末尾以梅字结尾 一个下划线代表一个字
246. SELECT s.`StudentName` FROM student AS s WHERE s.`StudentName` LIKE '_梅';
247. #查询StudentResult字段 成绩等于 79,90,80的人
248. SELECT r.`StudentResult` FROM result AS r WHERE r.`StudentResult` IN (79,90,80);
249. #转义字符 关键字 escape 来定义转义字符
250. SELECT r.`StudentResult` FROM result AS r WHERE r.`StudentResult` LIKE '%:%%' ESCAPE ':';
251. 
252. 
253. 联合查询(内连接)inner join
254. ===========================================================
255. 语法:select 字段1....字段n from 表1 inner join 表2 on 表1条件=表2条件;
256. (inner)可以省略
257. #两张表联合查询
258. SELECT s.`StudentName`,r.`StudentResult` 
259.  FROM student AS s INNER JOIN result AS r ON s.`StudentNo`=r.`StudentNo`
260. 
261. 
262. #三张表联合查询
263. SELECT s.`StudentName`,r.`StudentResult` ,u.`SubjectName`
264.  FROM student AS s INNER JOIN result r ON s.`StudentNo`=r.`StudentNo`
265.    INNER JOIN `subject` AS u ON r.`SubjectNo`=u.`SubjectNo`;
266. #查询成绩小于70的学生
267. SELECT s.`StudentName`,r.`StudentResult` 
268.  FROM student AS s INNER JOIN result AS r ON r.`StudentNo`=s.`StudentNo`
269.    WHERE r.`StudentResult`<=70;
270. 
271. left join    
272. =================================================================
273. #右表中没有返回null
274. SELECT DISTINCT s.`StudentName` AS 学生姓名:,r.`StudentResult`AS 成绩
275.  FROM student AS s LEFT JOIN result AS r ON s.`StudentNo`=r.`StudentNo`;
276. 
277. 
278. right join     
279. =================================================================
280. #左表中没有返回null 
281. SELECT DISTINCT s.`StudentName` AS 学生姓名:,r.`StudentResult`AS 成绩
282.  FROM student AS s RIGHT JOIN result AS r ON s.`StudentNo`=r.`StudentNo`;  
283. 
284. 等值与非等值(相当于 inner join) 
285. =============================================================
286. 语法:select 字段1,字段2 from 表1,表2 where 字段1=字段2;
287. SELECT a.`StudentName`,r.`StudentResult` FROM student AS a ,result AS r 
288.  WHERE a.`StudentNo`=r.`StudentNo` AND r.`StudentResult`>=80 
289. 
290. 自身连接
291. =================================================================
292. 1.类似父子标题的关系
293. CREATE TABLE IF NOT EXISTS  category(
294.  categoryId INT(10)  UNSIGNED  NOT NULL  AUTO_INCREMENT,
295.  pid  INT(10) NOT NULL,
296.  categoryName   VARCHAR(32) NOT NULL,
297.  PRIMARY KEY(categoryId)
298. );
299. 
300. INSERT INTO  category VALUES
301. (2,1,"美术设计"),
302. (3,1,"软件开发"),
303. (4,3,"数据库基础"),
304. (5,2,"Photoshop基础"),
305. (6,2,"色彩搭配学"),
306. (7,3,"PHP基础"),
307. (8,3,"一起学JAVA");
308. 
309. SELECT c1.`categoryName`,c2.`categoryName` FROM category AS c1 INNER JOIN category AS c2 
310.  ON c1.`categoryId` = c2.`pid`
311. 
312. ==================================================================
313. #order by 排序 desc (降序) asc(升序 默认)
314. 
315. SELECT r.studentResult AS 成绩 FROM result AS r ORDER BY r.studentResult DESC;
316. 
317. SELECT s.`SubjectName`,r.`StudentResult` 
318.  FROM result AS r INNER JOIN `subject` AS s ON s.`SubjectNo`=s.`SubjectNo`
319.  WHERE s.`SubjectName`='数据库结构-1' ORDER BY r.`StudentResult` DESC;
320. 
321. limit分页
322. ========================================================
323. #查询总素
324. SELECT COUNT(s.`StudentNo`)AS 总数 FROM student AS s ;
325. #分页关键字 limit 
326. #语法:limit m,n
327.  m 从第几条开始取(默认0)
328.  n 取出的 最大 数目
329. 
330. SELECT s.studentName,s.studentNo FROM student AS s ORDER BY s.studentNo LIMIT 0,3;
331. 
332. 子查询
333. =======================================================
334. 在查询语句中有嵌套了一个where查询
335. 
336. 
337. 
338. 
339. #聚合函数
340. ==========================================================
341. #聚合函数
342. COUNT() 总记录数
343. SUM()求和
344. AVG()平均数
345. MAX()最大值
346. MIN()最小值
347. 
348. SELECT COUNT(r.studentNo) '总条数',
349. AVG(r.studentResult) '平均数',
350. MAX(r.studentResult) '最高分', 
351. MIN(r.studentResult) '最低分'
352. FROM result AS r ;
353. 
354. 字符函数
355. ===========================================================
356. 
357. 数学函数
358. =============================================================
359. 
360. 日期函数
361. ==============================================================
362. SELECT NOW(); 获得系统当前时间。
363. 
364. 
365. 分组group by 一般与having结合使用(注意having的使用位置)
366. =============================================================
367. SELECT COUNT(r.studentNo) '总条数',
368. AVG(r.studentResult) '平均数',
369. MAX(r.studentResult) '最高分', 
370. MIN(r.studentResult) '最低分',
371.  s.subjectno AS 姓名
372. FROM result AS r INNER JOIN `subject` AS s ON r.subjectno=s.subjectno
373. GROUP BY  r.subjectno HAVING AVG(r.studentResult)>=80;
374. 
375. 
376. 
377. 索引
378. ==========================================================================
379. 作用:
380. 提高查询速度
381. 确保数据唯一性
382. 可以加速表和表之间的连接,实现表与表之间的参照完整性
383. 使用分组和排序子句进行数据检索可以显著减少分组和排序时间
384. 全文检索字段进行收索优化
385. 
386. # 主键索引primary key 
387. (只能有一个)
388. #唯一索引 unique
389. (避免重复 ,可以有多个)
390. 
391. #常规索引index/key
392. 注意:1.用于快速定位
393.    2.加在查找条件的列
394.    3.不宜添加太多常规索引,影响数据插入,修改,删除
395. #全文索引fulltext
396. 注意:1.fulltext索引只能用于MyISASM表类型;
397. 2.只能用于char ,varchar,text 数据类型列;
398.    3.适合大型数据集
399. 
400. 
401. 
402. 添加 primary key 默认这一列添加索引
403. 例:
404.  CREATE TABLE t03(
405. id INT(2) AUTO_INCREMENT PRIMARY KEY NOT NULL,
406. `name` NVARCHAR(10) NOT NULL unique(唯一索引) 
407.  或 UNIQUE KEY `nameID` (`name`)一般跟索引起名,不起名,默认用的列名。(一般用这种,方便删除)
408. 
409. );
410. 索引2(常规,唯一)创建
411. =========================================================================
412.  CREATE TABLE t03(
413. id INT(2) AUTO_INCREMENT PRIMARY KEY NOT NULL,
414. `name` NVARCHAR(10) NOT NULL unique(唯一索引) 
415.  或 UNIQUE KEY `nameID` (`name`)一般跟索引起名,不起名,默认用的列名。(一般用这种,方便删除)
416. `sex` NVARCHAR(2) INDEX/KEY(常规索引)一般常作为条件的时候添加索引
417.  或 INDEX index_sex ('sex')
418.  或 KEY key_sex('sex1','sex2')一次添加两个(谁的信息量小谁在前) 
419. );
420. #创建表完成后创建索引
421. ALTER TABLE 表名 ADD INDEX inde_sex('sex1','sex2');
422. 
423. 全文索引创建
424. =========================================================================
425. CREATE TABLE t03(
426. `name` VARCHAR(10) FULLTEXT,
427. `sex` text(10)
428. )ENGINE = MYISAM;
429. 
430. #或
431. ALTER TABLE t03 ADD FULLTEXT ('sex');
432. 
433. ALTER TABLE t03 ADD `sex` TEXT(100)
434. 
435. 注意:
436.  select * from t03 where match(列名) against(‘love’);
437.    1.添加索引后统计出现的(love)次数;
438.    2.使用关键字against
439. 
440. 管理索引
441. ==============================================================
442. 
443. #创建表索引
444. ALTER TABLE table_name ADD 索引类型 (‘列名’);
445. #删除索引
446. 1. DROP INDEX 索引名 ON 表名
447. 2. ALTER TABLE 表名 DROP INDEX 索引名
448. 3. ALTER TABLE 表名 DROP PRIMARY KEY;
449. 
450. #查看索引
451. SHOW INDEX  FROM 表名
452. 
453. mysql数据备份(DOS窗口下)
454. ================================================================
455. 备份方法:
456.  1.使用命令
457.  2.使用管理工具sqlyog
458.  3.直接拷贝数据文件和相关配置文件
459. 
460. mysql dump客户端
461. 语法:
462. mysqldump -h主机名 -u用户名 -p数据库名 [表1 表2 表n] >path/filename.sql
463. 例:
464. mysqldump -uroot -pt04 student(数据库名) student(表名) > f:/sql.sql  回车
465. 
466. mysql恢复
467. ==============================================================
468. 1.是mysql下
469.  关键字 source
470.    source /path/sql.sql
471. 2.DOS下
472.  mysql -u用户名 -p密码 数据库名 表名 </path/sql.sql;
473. 
474. 
475. 
476. 触发器
477. =============================================================
478. 
479. 
480. 创建视图
481. ===============================================================
482. view_lottert:视图的名
483. db_lottery:数据库中的表名
484. 查询视图跟普通查询一样
485. 视图一般做查询用
486. CREATE VIEW view_lottert AS SELECT * FROM db_lottery LIMIT 0,3
487. 
488. 
489. 
490. 
491. 复制表结构
492. =============================================================
493. 
494. 
495. 存储过程(看做函数或sql的集合)
496. ================================================================
497. 
498. 
499. 
500. 索引
501. ==========================================================================
502. 作用:
503. 提高查询速度
504. 确保数据唯一性
505. 可以加速表和表之间的连接,实现表与表之间的参照完整性
506. 使用分组和排序子句进行数据检索可以显著减少分组和排序时间
507. 全文检索字段进行收索优化
508. 
509. # 主键索引primary key 
510. (只能有一个)
511. #唯一索引 unique
512. (避免重复 ,可以有多个)
513. 
514. #常规索引index/key
515. 注意:1.用于快速定位
516.    2.加在查找条件的列
517.    3.不宜添加太多常规索引,影响数据插入,修改,删除
518. #全文索引fulltext
519. 注意:1.fulltext索引只能用于MyISASM表类型;
520. 2.只能用于char ,varchar,text 数据类型列;
521.    3.适合大型数据集
522. 
523. 
524. 
525. 添加 primary key 默认这一列添加索引
526. 例:
527.  CREATE TABLE t03(
528. id INT(2) AUTO_INCREMENT PRIMARY KEY NOT NULL,
529. `name` NVARCHAR(10) NOT NULL unique(唯一索引) 
530.  或 UNIQUE KEY `nameID` (`name`)一般跟索引起名,不起名,默认用的列名。(一般用这种,方便删除)
531. 
532. );
533. 索引2(常规,唯一)创建
534. =========================================================================
535.  CREATE TABLE t03(
536. id INT(2) AUTO_INCREMENT PRIMARY KEY NOT NULL,
537. `name` NVARCHAR(10) NOT NULL unique(唯一索引) 
538.  或 UNIQUE KEY `nameID` (`name`)一般跟索引起名,不起名,默认用的列名。(一般用这种,方便删除)
539. `sex` NVARCHAR(2) INDEX/KEY(常规索引)一般常作为条件的时候添加索引
540.  或 INDEX index_sex ('sex')
541.  或 KEY key_sex('sex1','sex2')一次添加两个(谁的信息量小谁在前) 
542. );
543. #创建表完成后创建索引
544. ALTER TABLE 表名 ADD INDEX inde_sex('sex1','sex2');
545. 
546. 全文索引创建
547. =========================================================================
548. CREATE TABLE t03(
549. `name` VARCHAR(10) FULLTEXT,
550. `sex` text(10)
551. )ENGINE = MYISAM;
552. 
553. #或
554. ALTER TABLE t03 ADD FULLTEXT ('sex');
555. 
556. ALTER TABLE t03 ADD `sex` TEXT(100)
557. 
558. 注意:
559.  select * from t03 where match(列名) against(‘love’);
560.    1.添加索引后统计出现的(love)次数;
561.    2.使用关键字against
562. 
563. 管理索引
564. ==============================================================
565. 
566. #创建表索引
567. ALTER TABLE table_name ADD 索引类型 (‘列名’);
568. #删除索引
569. 1. DROP INDEX 索引名 ON 表名
570. 2. ALTER TABLE 表名 DROP INDEX 索引名
571. 3. ALTER TABLE 表名 DROP PRIMARY KEY;
572. 
573. #查看索引
574. SHOW INDEX  FROM 表名
575. 
576. mysql数据备份(DOS窗口下)
577. ================================================================
578. 备份方法:
579.  1.使用命令
580.  2.使用管理工具sqlyog
581.  3.直接拷贝数据文件和相关配置文件
582. 
583. mysql dump客户端
584. 语法:
585. mysqldump -h主机名 -u用户名 -p数据库名 [表1 表2 表n] >path/filename.sql
586. 例:
587. mysqldump -uroot -pt04 student(数据库名) student(表名) > f:/sql.sql  回车
588. 
589. mysql恢复
590. ==============================================================
591. 1.是mysql下
592.  关键字 source
593.    source /path/sql.sql
594. 2.DOS下
595.  mysql -u用户名 -p密码 数据库名 表名 </path/sql.sql;
596. 
597. 
598. 
599. 
600. 
601. 
602. 
603. 
604. 
605. 
606. 
607. 
608. 
609. 
610. 
611.

 

#MYSQL的一下基础
启动mysql服务
net start mysql
 
 
===================================================
CREATE TABLE user_u_s (
  id INT(4) ZEROFILL,#属性zerofill长度不够0来补齐
  `name` NVARCHAR(20)
);
=====================================================
CREATE TABLE user_tb(
  id INT(5) PRIMARY KEY AUTO_INCREMENT,#auto_increment属性为自增
 
);
=========================================================
 
#表 test
DESC test  #desc 表名 查看表结构
 
SHOW CREATE TABLE test;#展示创建表的语句
 
 
======================================================
#创建t01表
CREATE TABLE t01 (
  id INT(5)PRIMARY KEY AUTO_INCREMENT,
  `name` NVARCHAR(10)
)AUTO_INCREMENT =100;#创建表的末尾添加auto_increment = 100 ;自增从100开始
#修改表的自增方式,增长方式为20,20 的增加
ALTER TABLE t01 AUTO_INCREMENT = 20;
 
#增长方式为跳着增长.为5个5个的增长
SET @@auto_increment = 5;
 
#清空表,但是自增在原有数据上增长
DELETE FROM t01;
#清空表,自增从1开始 truncate
TRUNCATE
=======================================================
 
CREATE TABLE t02(
  id INT(4),
  `name` NVARCHAR(10) DEFAULT '男' #default 用来设置默认值的
 
);
=====================================================
CREATE TABLE t03(
  id INT(2) COMMENT 't03表的主键',#列注释
  `name` NVARCHAR(10) COMMENT '姓名'#列注释
  PRIMARY KEY ('id') #约束可以这样写
)COMMENT = 't03表' ;#表注释
 
数据库表类型
=============================================
#表类型写在括号后面
creat table 表 (
 
id int(4),
name varcher(10)
 
)engine = MyISAM或engine = innoDB;
#engine = MyISAM用于表查询
#engine = innoDB 用于表事物,增删改
 
 
=============================================
#修改表名:ALTER TABLE 旧表名 RENAME AS 新表名;
ALTER TABLE test RENAME AS test01;
 
#添加字段
ALTER TABLE test01 ADD `age1` INT(2);
#修改字段属性
ALTER TABLE test01 MODIFY `name` CHAR(4)
#删除字段
ALTER TABLE test01 DROP age;
#修改字段
ALTER TABLE test01 CHANGE `name` `username` NVARCHAR(10)
#添加主键
ALTER TABLE test01 ADD CONSTRAINT pk_test01 PRIMARY KEY(id);
#删除主键
ALTER TABLE test01 PRIMARY KEY ;
#删除外键
ALTER TABLE test01 DROP FOREIGN KEY fk_test01;
#添加外键
ALTER TABLE test01
  ADD CONSTRAINT  fk_test01
  FOREIGN KEY (id)
  REFERENCES test(id);
 
创建主外键
===================================================
CREATE TABLE t01(
id INT(5) AUTO_INCREMENT PRIMARY KEY NOT NULL,
`name` NVARCHAR(10)
 
);
 
CREATE TABLE t02(
idd INT(5)  NOT NULL,
`name` NVARCHAR(10)
 
);
 
ALTER TABLE t02 ADD CONSTRAINT
fk_t02 FOREIGN KEY (idd) 
REFERENCES t01(id);
 
 
 
 
===================================================
DML数据操作介绍
insert 
update
delete
 
================================================
INSERT INTO t01 (`name`,age) VALUES('掌',1);
COMMIT
 
修改数据
====================================================
update t01 set name = 'zhang' , age =0 ; #不加where条件表里面的数据会全部被修改
 
UPDATE t01 SET `name`='张' ,age = 4 WHERE id= 3;
 
mysql自带的一些函数
UPDATE t01 SET age = age +10;
 
concat字符追加、、、在name列字段前添加hao的字符
UPDATE t01 SET `name` = CONCAT('hao',`name`);
 
 
where 条件拼接
=====================================================
and  or  < > !=或<>  >=  <= between(一般不用 效率低)
 
UPDATE t01 SET `name` ='新值' WHERE id>1 AND id<4; 
 
UPDATE t01 SET `name` ='hehe' WHERE id BETWEEN 3 AND 5; 
 
 
 
事物提交方法
===========================================================
1.start transction 开始一个事物,标记事物的起点。
2.commit 提交一个事物给数据库。
3.rollback 将事物回滚,数据回到本次事物的初始状态。
4.set autocommit = 1; 还原mysql数据库的自动提交。
5.set autocommit = 0; 关闭mysql数据库的自动提交。
 
演示银行转账
============================================================
CREATE TABLE `account`(
`id` INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
`name` NVARCHAR(30) NOT NULL,
`cash` DECIMAL(9,2) NOT NULL #整数位9位,小数位2位。
 
)ENGINE=INNODB;
 
INSERT INTO account (`name`,`cash`) VALUES('a',2000);
INSERT INTO account (`name`,`acsh`) VALUES('b',3000);
 
SET autocommit=0;
START TRANSACTION;
 
UPDATE account SET cash=cash-600 WHERE `name`= 'a';
UPDATE account SET cash=cash_600 WHERE `name`='b'
sql语句。。。
SET autocommit =1;
#commit 
#rollback
 
 
使用DQL查询
============================================================
`grade` 年级表  
字段
`GradeID`(PRIMARY KEY),`GradeName`
PRIMARY KEY (`GradeID`)
 
`result` 成绩表
字段
`StudentNo`,`SubjectNo`,`ExamDate`,`StudentResult`
KEY `SubjectNo` (`SubjectNo`)
 
`subject` 课程表
字段
`SubjectNo`,`SubjectName`,`ClassHour`,`GradeID`
PRIMARY KEY (`SubjectNo`)
 
student 学生表
字段
`StudentNo`,`LoginPwd`,`StudentName`,`Sex`,`GradeId`,`Phone`,`Address`,`BornDate`,`Email`,`IdentityCard`
PRIMARY KEY (`StudentNo`)
==========================================================
SELECT * FROM student ;# 用*查询效率低,一般不用
 
SELECT Sex,Phone FROM student; #只查看Sex,Phone 这两个字段
SELECT s.`Address`,s.`Email` FROM student AS s ; 使用别名查询其中 AS 可以省略(表起别名)
 
SELECT s.`Address`,s.`Email` FROM student s ; 使用别名查询(表起别名)
 
SELECT s.`Address` AS 地址,s.`Email` AS 邮箱 FROM student s ; 字段使用别名查询
 
SELECT COUNT(studentno) AS 总数 FROM student; 记录总数的函数(count)
 
使用distinct
=====================================================================
使用distinct去除重复,跟在select后面 后面是需要去除重复的字段
语法:select distinct 字段1,字段2,字段N from 表
SELECT DISTINCT r.`SubjectNo`FROM result AS r;
 
===============================================================
concat 查询出的列前加:学生 并跟列起的别名:学生姓名
SELECT CONCAT('学生:',studentName) 学生姓名 FROM student ;
 
SELECT VERSION();查询版本号
 
SELECT s.`ClassHour` AS 旧课时,s.`ClassHour`+10 新的课时 FROM `subject` AS s;
 
SELECT s.subjectName AS 课程名称,s.`ClassHour` AS 总课时, s.`ClassHour`/10 AS 平均课时 FROM `subject` AS s;
 
where条件语句
==========================================================
逻辑操作符
and或&& 逻辑与
or或|| 逻辑或
xor或^ 逻辑异域
not或!逻辑非
SELECT r.`StudentResult` AS 考试成绩 FROM result AS r 
  WHERE r.`StudentResult`>=70 AND r.`StudentResult`<=90;
 
 
=========================================================
#查询StudentName 为空的字段 而不是StudentName=null
SELECT s.`StudentName` FROM student AS s WHERE s.`StudentName` IS NULL; 
#查询StudentName字段 ‘李 ’开头的
SELECT s.`StudentName` FROM student AS s WHERE s.`StudentName` LIKE '李%';
#查询StudentName字段 ‘文’ 结尾的
SELECT s.`StudentName` FROM student AS s WHERE s.`StudentName` LIKE '%文';
#查询StudentName字段 ‘李 ’开头的后面匹配 任意 一个 字 一个下划线代表一个字
SELECT s.`StudentName` FROM student AS s WHERE s.`StudentName` LIKE '李_';
#查询StudentName字段 开头的匹配任意一个 字 末尾以梅字结尾 一个下划线代表一个字
SELECT s.`StudentName` FROM student AS s WHERE s.`StudentName` LIKE '_梅';
#查询StudentResult字段 成绩等于 79,90,80的人
SELECT r.`StudentResult` FROM result AS r WHERE r.`StudentResult` IN (79,90,80);
#转义字符 关键字 escape 来定义转义字符
SELECT r.`StudentResult` FROM result AS r WHERE r.`StudentResult` LIKE '%:%%' ESCAPE ':';
 
 
联合查询(内连接)inner join
===========================================================
语法:select 字段1....字段n from 表1 inner join 表2 on 表1条件=表2条件;
(inner)可以省略
#两张表联合查询
SELECT s.`StudentName`,r.`StudentResult` 
  FROM student AS s INNER JOIN result AS r ON s.`StudentNo`=r.`StudentNo`
 
 
#三张表联合查询
SELECT s.`StudentName`,r.`StudentResult` ,u.`SubjectName`
  FROM student AS s INNER JOIN result r ON s.`StudentNo`=r.`StudentNo`
    INNER JOIN `subject` AS u ON r.`SubjectNo`=u.`SubjectNo`;
#查询成绩小于70的学生
SELECT s.`StudentName`,r.`StudentResult` 
  FROM student AS s INNER JOIN result AS r ON r.`StudentNo`=s.`StudentNo`
    WHERE r.`StudentResult`<=70;
 
left join     
=================================================================
#右表中没有返回null
SELECT DISTINCT s.`StudentName` AS 学生姓名:,r.`StudentResult`AS 成绩
  FROM student AS s LEFT JOIN result AS r ON s.`StudentNo`=r.`StudentNo`;
 
 
right join    
=================================================================
#左表中没有返回null  
SELECT DISTINCT s.`StudentName` AS 学生姓名:,r.`StudentResult`AS 成绩
  FROM student AS s RIGHT JOIN result AS r ON s.`StudentNo`=r.`StudentNo`;  
 
等值与非等值(相当于 inner join)  
=============================================================
语法:select 字段1,字段2 from 表1,表2 where 字段1=字段2;
SELECT a.`StudentName`,r.`StudentResult` FROM student AS a ,result AS r 
  WHERE a.`StudentNo`=r.`StudentNo` AND r.`StudentResult`>=80 
 
自身连接
=================================================================
1.类似父子标题的关系
CREATE TABLE IF NOT EXISTS  category(
  categoryId INT(10)  UNSIGNED  NOT NULL  AUTO_INCREMENT,
  pid  INT(10) NOT NULL,
  categoryName   VARCHAR(32) NOT NULL,
  PRIMARY KEY(categoryId)
);
 
INSERT INTO  category VALUES
(2,1,"美术设计"),
(3,1,"软件开发"),
(4,3,"数据库基础"),
(5,2,"Photoshop基础"),
(6,2,"色彩搭配学"),
(7,3,"PHP基础"),
(8,3,"一起学JAVA");
 
SELECT c1.`categoryName`,c2.`categoryName` FROM category AS c1 INNER JOIN category AS c2 
  ON c1.`categoryId` = c2.`pid`
 
==================================================================
#order by 排序 desc (降序) asc(升序 默认)
 
SELECT r.studentResult AS 成绩 FROM result AS r ORDER BY r.studentResult DESC;
 
SELECT s.`SubjectName`,r.`StudentResult` 
  FROM result AS r INNER JOIN `subject` AS s ON s.`SubjectNo`=s.`SubjectNo`
  WHERE s.`SubjectName`='数据库结构-1' ORDER BY r.`StudentResult` DESC;
 
limit分页
========================================================
#查询总素
SELECT COUNT(s.`StudentNo`)AS 总数 FROM student AS s ;
#分页关键字 limit 
#语法:limit m,n
  m 从第几条开始取(默认0)
  n 取出的 最大 数目
  
SELECT s.studentName,s.studentNo FROM student AS s ORDER BY s.studentNo LIMIT 0,3;
 
子查询
=======================================================
在查询语句中有嵌套了一个where查询
 
 
 
 
#聚合函数
==========================================================
#聚合函数
COUNT() 总记录数
SUM()求和
AVG()平均数
MAX()最大值
MIN()最小值
 
SELECT COUNT(r.studentNo) '总条数',
AVG(r.studentResult) '平均数',
 MAX(r.studentResult) '最高分', 
 MIN(r.studentResult) '最低分'
FROM result AS r ;
 
字符函数
===========================================================
 
数学函数
=============================================================
 
日期函数
==============================================================
SELECT NOW(); 获得系统当前时间。
 
 
分组group by 一般与having结合使用(注意having的使用位置)
=============================================================
SELECT COUNT(r.studentNo) '总条数',
AVG(r.studentResult) '平均数',
 MAX(r.studentResult) '最高分', 
 MIN(r.studentResult) '最低分',
 s.subjectno AS 姓名
FROM result AS r INNER JOIN `subject` AS s ON r.subjectno=s.subjectno
GROUP BY  r.subjectno HAVING AVG(r.studentResult)>=80;
 
 
 
索引
==========================================================================
作用:
提高查询速度
确保数据唯一性
可以加速表和表之间的连接,实现表与表之间的参照完整性
使用分组和排序子句进行数据检索可以显著减少分组和排序时间
全文检索字段进行收索优化
 
# 主键索引primary key 
(只能有一个)
#唯一索引 unique  
(避免重复 ,可以有多个)
 
#常规索引index/key
注意:1.用于快速定位
    2.加在查找条件的列
    3.不宜添加太多常规索引,影响数据插入,修改,删除
#全文索引fulltext
注意:1.fulltext索引只能用于MyISASM表类型;
      2.只能用于char ,varchar,text 数据类型列;
    3.适合大型数据集
 
 
 
添加 primary key 默认这一列添加索引
例:
  CREATE TABLE t03(
id INT(2) AUTO_INCREMENT PRIMARY KEY NOT NULL,
`name` NVARCHAR(10) NOT NULL unique(唯一索引) 
  或 UNIQUE KEY `nameID` (`name`)一般跟索引起名,不起名,默认用的列名。(一般用这种,方便删除)
 
);
索引2(常规,唯一)创建
=========================================================================
  CREATE TABLE t03(
id INT(2) AUTO_INCREMENT PRIMARY KEY NOT NULL,
`name` NVARCHAR(10) NOT NULL unique(唯一索引) 
  或 UNIQUE KEY `nameID` (`name`)一般跟索引起名,不起名,默认用的列名。(一般用这种,方便删除)
`sex` NVARCHAR(2) INDEX/KEY(常规索引)一般常作为条件的时候添加索引
  或 INDEX index_sex ('sex')
  或 KEY key_sex('sex1','sex2')一次添加两个(谁的信息量小谁在前) 
);
#创建表完成后创建索引
ALTER TABLE 表名 ADD INDEX inde_sex('sex1','sex2');
 
全文索引创建
=========================================================================
CREATE TABLE t03(
`name` VARCHAR(10) FULLTEXT,
`sex` text(10)
)ENGINE = MYISAM;
 
#或
ALTER TABLE t03 ADD FULLTEXT ('sex');
 
ALTER TABLE t03 ADD `sex` TEXT(100)
 
注意:
  select * from t03 where match(列名) against(‘love’);
    1.添加索引后统计出现的(love)次数;
    2.使用关键字against
 
管理索引
==============================================================
 
#创建表索引
ALTER TABLE table_name ADD 索引类型 (‘列名’);
#删除索引
1. DROP INDEX 索引名 ON 表名
2. ALTER TABLE 表名 DROP INDEX 索引名
3. ALTER TABLE 表名 DROP PRIMARY KEY;
 
#查看索引
SHOW INDEX  FROM 表名
 
mysql数据备份(DOS窗口下)
================================================================
备份方法:
  1.使用命令
  2.使用管理工具sqlyog
  3.直接拷贝数据文件和相关配置文件
 
mysql dump客户端
语法:
mysqldump -h主机名 -u用户名 -p数据库名 [表1 表2 表n] >path/filename.sql
例:
mysqldump -uroot -pt04 student(数据库名) student(表名) > f:/sql.sql  回车
 
mysql恢复
==============================================================
1.是mysql下
  关键字 source
    source /path/sql.sql
2.DOS下
  mysql -u用户名 -p密码 数据库名 表名 </path/sql.sql;
 
 
 
触发器
=============================================================
 
 
创建视图
===============================================================
view_lottert:视图的名
db_lottery:数据库中的表名
查询视图跟普通查询一样
视图一般做查询用
CREATE VIEW view_lottert AS SELECT * FROM db_lottery LIMIT 0,3
 
 
 
 
复制表结构
=============================================================
 
 
存储过程(看做函数或sql的集合)
================================================================
 
 
 
索引
==========================================================================
作用:
提高查询速度
确保数据唯一性
可以加速表和表之间的连接,实现表与表之间的参照完整性
使用分组和排序子句进行数据检索可以显著减少分组和排序时间
全文检索字段进行收索优化
 
# 主键索引primary key 
(只能有一个)
#唯一索引 unique  
(避免重复 ,可以有多个)
 
#常规索引index/key
注意:1.用于快速定位
    2.加在查找条件的列
    3.不宜添加太多常规索引,影响数据插入,修改,删除
#全文索引fulltext
注意:1.fulltext索引只能用于MyISASM表类型;
      2.只能用于char ,varchar,text 数据类型列;
    3.适合大型数据集
 
 
 
添加 primary key 默认这一列添加索引
例:
  CREATE TABLE t03(
id INT(2) AUTO_INCREMENT PRIMARY KEY NOT NULL,
`name` NVARCHAR(10) NOT NULL unique(唯一索引) 
  或 UNIQUE KEY `nameID` (`name`)一般跟索引起名,不起名,默认用的列名。(一般用这种,方便删除)
 
);
索引2(常规,唯一)创建
=========================================================================
  CREATE TABLE t03(
id INT(2) AUTO_INCREMENT PRIMARY KEY NOT NULL,
`name` NVARCHAR(10) NOT NULL unique(唯一索引) 
  或 UNIQUE KEY `nameID` (`name`)一般跟索引起名,不起名,默认用的列名。(一般用这种,方便删除)
`sex` NVARCHAR(2) INDEX/KEY(常规索引)一般常作为条件的时候添加索引
  或 INDEX index_sex ('sex')
  或 KEY key_sex('sex1','sex2')一次添加两个(谁的信息量小谁在前) 
);
#创建表完成后创建索引
ALTER TABLE 表名 ADD INDEX inde_sex('sex1','sex2');
 
全文索引创建
=========================================================================
CREATE TABLE t03(
`name` VARCHAR(10) FULLTEXT,
`sex` text(10)
)ENGINE = MYISAM;
 
#或
ALTER TABLE t03 ADD FULLTEXT ('sex');
 
ALTER TABLE t03 ADD `sex` TEXT(100)
 
注意:
  select * from t03 where match(列名) against(‘love’);
    1.添加索引后统计出现的(love)次数;
    2.使用关键字against
 
管理索引
==============================================================
 
#创建表索引
ALTER TABLE table_name ADD 索引类型 (‘列名’);
#删除索引
1. DROP INDEX 索引名 ON 表名
2. ALTER TABLE 表名 DROP INDEX 索引名
3. ALTER TABLE 表名 DROP PRIMARY KEY;
 
#查看索引
SHOW INDEX  FROM 表名
 
mysql数据备份(DOS窗口下)
================================================================
备份方法:
  1.使用命令
  2.使用管理工具sqlyog
  3.直接拷贝数据文件和相关配置文件
 
mysql dump客户端
语法:
mysqldump -h主机名 -u用户名 -p数据库名 [表1 表2 表n] >path/filename.sql
例:
mysqldump -uroot -pt04 student(数据库名) student(表名) > f:/sql.sql  回车
 
mysql恢复
==============================================================
1.是mysql下
  关键字 source
    source /path/sql.sql
2.DOS下
  mysql -u用户名 -p密码 数据库名 表名 </path/sql.sql;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
13天前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
|
21天前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
48 9
|
23天前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
51 3
|
28天前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法
|
27天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
148 1
|
2月前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
29天前
|
SQL 关系型数据库 MySQL
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
46 1
|
2月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
67 1
|
27天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
62 0
|
29天前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
31 0