mysql CRUD笔记

mysql常用命令:

查看数据库.

	1.show databases;
	2.use 数据库名称;
	3.show create database 数据库名称; --查看数据库的创建信息.
	4.select database();	--查看当前使用的数据库.

删除数据库(重点)

1.drop database 数据库名称; --删除数据库

修改数据库

1.语法:alter database 数据库名称 character set 'gbk' collate '校对规则';

表结构
创建表

1.语法:

create table 表名称(
	字段1 类型(长度) 约束,
	字段2 类型(长度) 约束,
	字段3 类型(长度) 约束
);

2.注意.

  • 创建表的时候,后面用小括号,后面分号.
  • 编写字段,字段与字段之间用逗号,最后一个字段不使用逗号.
  • 如果声明字符串类型的类型,长度必须指定的.
  • 如果不指定数据的长度,有默认值。int 类型的默认长度是11.

数据库数据类型(重点)
字符串类型(重点)

VARCHAR(用的比较多):长度是可变的。例子:name varchar(8),存进去'hello', 存入进去之后,
	字段长度自动变成5.
CHAR:长度不可变。
大数据类型(不常用)
BLOB : 字节(电影 MP3)
TEXT : 字符(文本的内容)

数据值(重点)

TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE

逻辑性
BIT
在Java中是true或者false
在数据库bit类型(1或者0)

日期型(重点)

DATE :只包含日期(年月日)
TIME : 只包含时间(时分秒)
DATATIME : 包含日期和时间。如果插入数据的时候, 字符值为空,字段的值就是空了.
TIMESTAMP : 包含日期和时间.如果插入数据的时候,设置字段的值为空,默认获取当前的系统的时间,
	把时间保存到字段中.

4.练习创建一张表结构.

create table employee(
	id int,
	name varchar(30),
	gender char(5),
	birthday date,
	entry_date date,
	job varchar(50),
	salary double,
	resume text
);

5.查看数据库表结构.

1).查询所有的表机构
	show tables;
2).查看表结构的详细的信息.
	desc 表名称;
3)
	show create table 表名称;

6.删除表
	drop table 表名称;

7.修改表(掌握)

	1.添加一个新的字段.
		alter table 表名称 add 字段名称 数据类型(长度) 约束;
	2.修改字段的数据类型, 长度或者约束.
		alter table 表名称 modify 字段名称 数据类型(长度) 约束;
	3.删除某一个字段.
		alter table 表名称 drop 字段名称 ;
	4.修改字段的名称.
		alter table 表名称 change 旧字段 新字段 数据类型(长度) 约束;
	5.修改表的名称.
		rename table 旧表名 to 新表名;

8.数据库的数据(CRUD)

插入数据(insert)
1.添加数据,使用insert来添加数据
	insert into 表(字段1,字段2,字段3) values(字段1,字段2, 字段3);
	insert into 表 values(字段1,字段2, 字段3...);
2.注意实现
	插入的数据与字段数据的类型相同.
	数据的大小应该在规定的范围内.
	数据中的数据的列的位置和字段位置的相同
	字符串和日期类型的数据,必须要使用单引号括起来
3.
	insert into user (username, job) values ('tom', 'it')
	insert into user values (2, 'tom2', ...)

4.插入中文数据乱码.
1.插入中文,会产生乱码的问题.
方案:修改mysql客户端的编码就可以了.改成GBK.

9.修改数据的语句(update).

修改数据,使用update关键字来完成修改数据.
	* update 表名称 set 字段1=值1, 字段2=值2, where 条件;
	* 修改字段1和字段2的值
		*如果没有where的关键字,说明修改的默认所有的记录.
		*如果有where的关键字,修改的是符合条件的记录.

10.删除数据(delete)

1.删除语句的语法
	* delete from 表 where 条件;

2.删除所有的数据
	* delete from 表;
		* 一行一行的数据
		* 支持事务的操作.事务是数据库中的特性.
	*truncate 表;
		* 先把整个表删除掉(数据也删除了),创建一个与原来一摸一样的表.
		* 不支持事务.
3.练习.
	* delete from user where username='tom'
	* 删除表中的所有记录
		添加事务
			* start transaction;
			* delete from user where username ='tom2';
			* rollback;
	* 使用truncate删除表记录.
		truncate user;

11. 查询数据select(重点)

1.查询语句的语法
	select * from 表;
	select 字段1,字段1,字段3 from 表;
	DISTINCT
	可以对查询的列进行运算.

	*查询语句中可以使用as的关键字,起别名.
	* 别名的真正的用法,采用的多表的查询,为了区分每张表,表起个别名.
	* as的关键字可以省略不写.中间需要使用空格
	*一般都是给表来起别名
		* select s.username, s.math from stu s;
		* select s.username, u.username from stu s, user u
	使用where的条件语句,进行查询条件的过滤.

2.练习 
	create table stu(
		id int,
		username varchar(20),
		math int,
		english int,
		chinese int
	);
	insert into stu values (1, '美美',18, 97, 35);
	insert into stu values (2, '小凤',98, 97, 95);
	insert into stu values (3, '小花',88, 90, 77);
	insert into stu values (4, '熊大',79, 59, 95);
	insert into stu values (5, '熊二',15, 11, 89);

1.查询表中的所有数据.
	select * from stu;
2.查询表中的所有学生的姓名和对应的英语成绩.
	select username, english from stu;
3.过滤表中的重复数据.
	select DISTINCT english from stu;
4.在所有学生分数加上10分特长分.
	select username, math+10, english+10, chinese+10 from stu;
5.统计每个学生的总分.
	select username,(math+english+chinese) from stu;
6.使用别名表示学生分数.
	select username,(math+english+chinese) as t from stu;
7.查询姓名为美美的学生成绩.
	select * from stu where username = '美美';
8.查询英语成绩大于90分的同学.
	select username, english from stu where english > 90;
9.查询总分大于200分的同学.
	select username,(math+english+chinese) from stu where (math+english+chinese) > 150;

where子句后可以使用的符号.
1.常用的符号
	>	<	 <=	>=	=	<>
	in --代表的范围
		select * from stu where math = 88;
		select * from stu where math in (18,88,90); --表示english可以是18, 88,90这几个值.
	like	--模糊查询
		写法:
			select * from stu where username like '张_';	--使用_占位符,结果是姓张的,张飞,张三, 张翼德(不符合)
			select * from stu where username like '张%';	--使用%占位符,结果是姓张的,只要姓张的都可以.
		_:一个位置.
		%:多个位置.

		and:or:not:非
		between ... and

2.总结查询的语句
	select 字段1,字段2, | * from 表 where 条件的过滤;

12.使用order by对结果进行排序.

1.语法
	order by 字段 asc | desc;
		asc: 升序(默认值).
		desc: 降序.
2.注意.
	order by 自己放在select的语句末尾.
	select * from xx where xx order by xx;

3.练习.
	select username, math from stu order by math asc;
	select username, math from stu order by math desc;

13.聚集函数.

1.什么是聚集函数:Excel表格.求数量,求和,平均值,最大值,最小值.
2.聚集函数操作的是某一列的数据.
3.聚集函数.
	count()	--求数量
		select count(*) | count(列名) from 表;

	练习:
		统计一个班级共有多少学生?
			select count(*) from stu;
			select count(id) from stu;
		统计数学成绩大于90的学生有多少个?
		select count(math) from stu where math > 60;
		select username, count(math) from stu where math > 60; --不会这样查询
		统计总分大于220的人数有多少?
		select count(*) from stu where (math+english+chinese) > 220;

	sum()	--求某一列数据的和
		注意:没有sum(*), 求的某一列, sum只对数值类型起作用.

	练习
		统计一个班级数学总成绩?
			select sum(math) from stu;

	avg() -- 求平均分
		select avg(字段) from stu;
	max() -- 求最大值
	min() -- 求最小值

14.分组查询.

group by 字段 根据字段进行分组.

create table orders(
	id int,
	product varchar(20),
	price float
);
insert into orders values(1, '电视', 900);
insert into orders values(2, '洗衣机', 100);
insert into orders values(3, '电视', 90);
insert into orders values(4, '电视', 900);
insert into orders values(5, '洗衣粉', 90);
insert into orders values(6, '洗衣粉', 90);

练习:
对订单表中商品归类后,显示每一类商品的总价?
	select product, sum(price) from orders group by product;
		--已经把原来的一组的数据,现在分为两组.在统计数据的时候,以组为单位.

having和where类似,但是只能放在group by后面
where后面不能使用聚集函数,having可以.

15.单表的约束(主键)

1.可以把某一列字段声明主键,这一列的数据有如下特点.
	非空
	唯一
	被引用	--当前主键的列,作为一条记录的标识.
2.声明主键
	使用关键字primary key 声明某一个字段为主键.

3.测试主键
	创建新的数据
		create database day06;
		use day06;
		create table person(
			id int primary key,
			username varchar(20)
		);
	添加数据
		insert into person values(1, '美美')
		insert into person values(2, '小凤')
4.主键的自动增长.
	主键的值特点, 可以把主键的值交给数据库去维护.
	自动增长只能使用int 和bigint类型
	通过关键字auto_increment


唯一和非空约束
1.唯一的约束.
	* 可以把某一个字段声明成唯一的值.
	* 使用该关键字 unique
2.非空
	* 可以把某一个字段声明成非空的
	* 值是不能空值
	* 使用关键字 not null
练习:
	create table person(
		id int primary key auto_increment,
		username varchar(30) unique,
		email varchar(30) not null
	);

16.多表约束(外键)

外键的约束:目的保证表结构中数据的完整性!
外键字段的取值只能从主键获取值.
1.模拟的过程
2.有一个部门,还有一个员工表.一个部门有多个员工.
3.创建表结构.
	create table dept(
		did int primary key auto_increment,
		dname varchar(30)
	);

	create table emp(
		eid int primary key auto_increment,
		ename varchar(30),
		sal double,
		dno int,
		foreign key (dno) references dept (did)
	);

17.多表的设计.

一对一(了解):
	公司表		地址表
  id 名称   时间     id 名称 xxx
	  主键对主键
	可以合成一张表.


一对多(重点):一般两张表
主表(一方),从表(多方)
建表原则,在多方表中添加字段,把该字段作为外键,指向一方表的主键.


多对多(重点):
场景:
1..	订单表		商品表
2.用户与角色.一个用户拥有多个角色.一个角色被多个用户所拥有.
其实有三张表,有一张中间表,存储数据关系.
	用户表			角色表
	id 主键			id 主键
	name			rname

	 
		用户角色中间表	
	 	至少要包含2个字段
		uid	外键->用户id
		rid	外键->角色id
eg:			
			 中间表
	用户表		uid	rid	角色表
	1  张三		1	1	1.管理员
	2.赵四		1	2	2.游客
			2	1

多对多拆可以分成21对多的场景.

你可能感兴趣的:(mysql)