day01mysql基础学习笔记

SQL的分类

DDL【Data   Definition Language,
数据定义语言,创建、修改、删除数据库和表结构
DML【Data  Manipulation Language,
数据操作语言,用于对表数据进行增删改的操作
DQL【Data  Query Language,
数据查询语言,用于负责表数据的查询工作
DCL【Data Control Language】:
数据控制语言,用来定义访问权限和安全级别

表常用数据类型

数据类型

数据库操作

关于show的操作

show databases;
show tables;
#查看创建表的详细信息
show create table table_name;

1.DDL

使用关键字:CREATE ALTER DROP

1.1 create创建

1.1.1 数据库创建

CREATE DATABASE database_name charset=utf8;

1.1.2 表的创建

CREATE TABLE 表名 (
		字段1 字段类型[列级别约束条件][默认值],
		字段2 字段类型[列级别约束条件][默认值],
		….
		字段n 字段类型[列级别约束条件][默认值]
		[表级别约束条件]
)

演示总结

#查询当前数据库服务器中的所有数据库
mysql> show databases;			    
+--------------------+	
| Database           |
+--------------------+
| information_schema |            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

#查看当前正在使用的数据库
mysql> select database();
+------------+
| database() |
+------------+
| NULL       |
+------------+
1 row in set (0.00 sec)

#创建一个数据库
mysql> create database mydb1 charset=utf8;
Query OK, 1 row affected (0.00 sec)

#切换数据库
mysql> use mydb1;
Database changed

# 创建user表
create table user(
	id int primary key auto_increment, 
	name varchar(20), 
	age int
);

1.2 alter操作

修改
关键字:rename、modify、change

#1.修改表名
ALTER TABLE old_table_name RENAME [TO] new_table_name

#2.修改字段的数据类型
语法规则:ALTER TABLE table_name MODIFY 字段名 数据类型
#修改完成之后可以查看DESC table_name检验结果

#3.修改字段名
ALTER TABLE table_name CHANGE 旧字段名 新字段名 数据类型

#4.修改字段的排列位置
ALTER TABLE table_name MODIFY 字段1 数据类型 FIRST|AFTER 字段2
	first: 设置成第一个
	after 字段2: 在指定字段2的后面

添加和删除
关键字 add、drop

#5.添加字段
ALTER TABLE table_name ADD 新字段名 数据类型 [约束条件] [FIRST|AFTER 已经存在的字段名]

#为字段增加索引
alter table money add index(username);

#添加外键约束

#6.删除字段
ALTER TABLE table_name DROP 字段名

#7.删除表的外键约束
ALTER TABLE table_name DROP FOREIGN KEY 外键约束名

#删除索引
ALTER TABLE table_name DROP INDEX index_name

#8.删除数据表
#删除没有被关联的表
语法规则:DROP TABLE [IF EXISTS]1,表2...
#删除被其他表关联的的表
#直接删除会出现错误的,操作: 先解除关联 再进行删除

1.3 drop操作

# 删除数据库
DROP DATABASE database_name

# 删除表
drop table table_name;

2.DML

2.1 insert

关键词:values

#单行插入
INSERT INTO table_name (field1, field2,...fieldN) VALUES(value1, value2,...valueN);
                    
#多行插入[批量插入]
INSERT INTO table_name (field1, field2,...fieldN)
                    VALUES
                    (value1, value2,...valueN),
                    (value12, value22,...valueNN)...;

#如果给每个字段都赋值,就可以省略掉字段的书写
mysql> insert into worker values(3,'rose','g',6000);

#一次性插入多条数据【批量插入】
mysql> insert into worker(id,name,gender,salary) values(4,'bob','b',1500),(5,'hello','g',5500),(6,'abc','b',6600);

2.2 update

UPDATE table_name SET field1=new-value1, field2=new-value2  [WHERE Clause]

'''
注意:
	a.完全可以更新一个字段或者多个字段
	b.where相当于Python中的if语句
	c.可以指定任何条件到where子句中
	d.如果没有where子句,则默认所有的行都被同时更新为指定的操作[慎用!一般要结合where使用]
'''

2.3 delete

DELETE FROM table_name [WHERE Clause] DELETE FROM table_name [WHERE Clause]

'''
Truncate是一个能够快速清空资料表内所有资料的SQL语法。并且能针对具有自动
递增值的字段,做计数重置归零重新计算的作用。
'''
mysql> truncate table worker; 

'''
注意:
delete:删除表中的指定数据,表结构还在,删除之后的数据可以找回,对自动增加的字段无影响
truncate:清空表中的数据,删除的数据是不能找回的,执行速度比delete快,自动增加的字段会重新计数
drop: 删除表,数据和表结构都删除
'''

3.DQL

SELECT 列名 FROM 表名【WHERE --> GROUP BY -->HAVING--> ORDER BY】

3.1 基础查询

#1.查询所有列
mysql> select * from student;
+------+----------+------+--------+
| id   | name     | age  | gender |
+------+----------+------+--------+
| 1    | aaaa     |   19 | female |
| 2    | bbbbbbbb |   20 | male   |
| 3    | cc       |   15 | male   |
| 4    | ddd      |   16 | female |
| 5    | eee      |   20 | female |
+------+----------+------+--------+
5 rows in set (0.00 sec)


#2.查询指定列
mysql> select id,name,gender from student;
+------+----------+--------+
| id   | name     | gender |
+------+----------+--------+
| 1    | aaaa     | female |
| 2    | bbbbbbbb | male   |
| 3    | cc       | male   |
| 4    | ddd      | female |
| 5    | eee      | female |
+------+----------+--------+
5 rows in set (0.00 sec)

3.2 条件查询

关键字where

  • 操作符 说明
  • <>/!= 不等
  • = 相等
  • < 小于
  • <= 小于等于
  • in(A,B,…) 符合区间里面的任意一项
  • between A and B 位于AB之间的
  • and
  • or
  • is / is not 常用语判断null值

3.3 模糊查询

关键字:where、like
通配符:
​ _: 匹配一个任意字符
​ %:匹配0~n个任意字符【n大于等于1】

#1.查询姓名由4个字符组成的记录
mysql> select * from student where name like '____';

#2.查询姓名由3个字符组成的记录,并且最后一个字母为c的记录
mysql> select * from student where name like '__c';

#3.查询以a开头的记录
mysql> select * from student where name like 'a%';

#4.查询姓名中包含b的记录
mysql> select * from student where name like '%b%';

#5.查询姓名中第2个字母为c的记录
mysql> select * from student where name like '_c%';

3.4 字段控制查询

关键字:as、distinct

#1.去除重复记录
mysql> select distinct id from student;

#2.给列名起别名
mysql> select name as 姓名,gender as 性别  from student;

3.5 排序

关键字:order by(asc默认、desc)

#2.查询所有学生记录,按照年龄降序排序,如果年龄相等,则按照编号进行升序排序 
mysql> select * from student order by age desc,id asc; 

用法:select from 表 order by xxx
#####3.6 分组查询
聚合函数

  • count():统计指定列不为null的记录行数
  • sum():计算指定列的数值和
  • 求指定列中的最大值和最小值max():min():
  • avg()

关键字:group by、having

#1.查询各个部门的人数
mysql> select count(*) from emp group by deptno;

#2.查询每个部门的部门编号和每个部门的工资和
mysql> select deptno,sum(sal) from emp group by deptno;

#3.查询每个部门的部门编号和每个部门的人数
mysql> select deptno,count(*) from emp group by deptno;

#4.查询每个部门的部门编号和每个部门工资大于1500的人数
mysql> select deptno,count(*) from emp where sal>1500 group by 

#5.查询工资总和大于7000的部门编号以及工资和
mysql> select deptno,sum(sal) from emp group by deptno having sum(sal)>7000;

'''
总结:
​	having和where的区别
​	a.二者都表示对数据执行条件
​	b.having是在分组之后对数据进行过滤
​	    where是在分组之前对数据进行过滤
​	c.having后面可以使用聚合函数
​            where后面不可以使用聚合函数
'''

3.7 分页查询

关键字:limit

#1.查询4行记录,起始行从0开始
mysql> select * from emp limit 0,4;

猜你喜欢

转载自blog.csdn.net/qq_37783111/article/details/107695113