MySQL入门学习

MySQL数据类型

1、 数值类型

			 TINYINT      1
			
			SMALLINT    2
			
			 MEDIUMINT  3
			
			INT         4
			
			BIGINT      8
			
			float(n,m)    n代表长度,m代表小数点后位数
			
			double(n,m)
			
			 decimal(n,m)

/2、日期类型

			date:日期
			
			time:时间
			
			datetime:日期时间
			
			timestamp:时间戳
			
			year:年

3、 字符串类型

			char:定长字符串
			
			varchar:可变长字符串
			
			binary:定长二进制
			
			varbinary:可变长二进制
			
			blob:二进制
			
			text:大对象,字符,文本
			
			 enum:枚举
			
			set:集合

sql的分类

  1. DDL(data definitation language):数据定义语言

       数据库,表,视图等的创建和销毁
       create,drop
    

2 DML(data manipulation language):数据操纵语言

		数据的增删改操作
		insert:添加
		delete:删除
		update:修改

3 DQL(data query language):数据查询语言

		数据的查询
		select

4 DCL(data control language):数据控制语言

		授权和取消授权
		grant,revoke

数据库的操作

  1. 创建数据库

     a) 语法: create {database|schema} [if not exists] dbname;
     
     	创建数据库
     	create database if not exists mydb;
    
  2. 销毁数据库

     a) 语法:drop {database|schema} [if exists] dbname;
     
     	销毁数据库
     	drop database if exists mydb;
     	[]表示可省略
    

数据库表的操作

  1. 数据库中的数据存放在数据库表中,以二维数组的形式存在。

     一行代表一条数据记录,称为记录。
     一列代表同一域的数据,表示同一属性。称为字段。
    

DDL操作

	a) 创建:create table [if not exists] tname;
	
			创建数据库表
			create table `user`(
			  userid int,
			  username varchar(20),
			  `password` varchar(20),
			  birthday date
			);
	ad) 查看表结构:desc tname;
	
	ae) 修改表结构:  alter
	
	A. 添加字段
	
			alter table tname add [column] col_name col_definition [after|first]
			添加sex列(默认最后一列)
			alter table `user` add sex varchar(10);
			添加到指定列后
			alter table `user` add sex varchar(10) after userid;
			添加到首列
			alter table `user` add sex varchar(10) first;
	G. 修改字段
	
			alter table tname change col_name new_col_name col_definition;
			修改数据类型
			alter table user CHANGE sex sex VARCHAR(10);
			修改字段名称
			alter table user CHANGE sex usex VARCHAR(10);
			修改字段位置
			alter table tuser change birthday birthday date after userid;
			 
	H. 删除字段
	
			alter table `user` drop col_name;
			删除sex列
			alter table user drop sex;
			 
	I. 重命名
	
			rename table tname to new_tname;
			修改user表为tuser
			rename table user to tuser;
	J. 清空表
	
			清空重置表所有数据,速度比delete快。自增将重置。
			truncate table tuser;

完整性约束

a) 完整性即数据的准确性。

af) 实体完整性:保证记录是唯一的,不重复的。

		主键约束:primary key
		主键字段唯一且不能为空
		Ø 创建表时声明主键
		
		create table user(
		userid int primary key,  #主键
		
		username varchar(20)
		
		);

Ø 创建表时声明主键

		create table user(
		 userid int,
		
		 username varchar(20),
		
		 primary key(userid)
		
		);
		
		Ø 修改表结构添加约束
		
		alter table user add CONSTRAINT PK_USERID primary key(userid);

唯一约束:unique
唯一约束字段值不能重复
Ø 创建表时声明唯一约束

		create table user(
		userid int primary key,
		
		username varchar(20),
		
		card varchar(18) unique,
		
		);

Ø 创建表时添加唯一约束

		create table user(
		userid int primary key,
		
		username varchar(20),
		
		card varchar(18),
		
		unique(card)
		
		);

Ø 修改表结构添加唯一约束

		alter table user add CONSTRAINT UN_CAED unique(card);

主键自增:auto_increment
create table user(
userid int primary key auto_increment,
username varchar(20),
card varchar(18)
);

ag) 域完整性:保证列的数据正确性。

类型约束
非空约束:not null
create table user(
userid int primary key auto_increment,
username varchar(20) not null,
card varchar(18) not null
);

默认值约束
create table user(
userid int primary key auto_increment,
username varchar(20) not null,
sex varchar(10) default ‘男’,
card varchar(18) not null
);

ah) 引用完整性:保证引用关系(外键)的正确性,参照完整性

		alter table emp add CONSTRAINT PK_DEPTNO foreign key(deptno) REFERENCES dept(deptno)

ai) 自定义完整性(check约束mysql不支持)

		添加约束保证部门编号只能在1到120之间
		alter table dept add CONSTRAINT CK_AGE check(deptno BETWEEN 1 and 120)

aj) 删除约束

		alter table emp drop primary key;
		alter table emp drop foreign key;
  1. 运算符

a) 算术运算符 + - * / div整除

		select 1+2;
		select 1-2;
		select 3*4;
		select 3/4;/*0.75*/
		select 3/0;/*null*/
		select 3 div 4;

ak) 比较运算符 >,<,>=,<=,!=,<>

       Is true,is not true,is null,is not null,between and,not between and,,in, not in
		select 1<>1;/*0*/
		select 1!=1;/*0*/
		select 1=1;/*1*/

al) 逻辑运算符 and or !

		select 1=1 and 1=2;/*0*/
		select !1<>1;/*1*/
		select 1=1 or 1=2;/*1*/

am) 位运算符

		select 1 | 1;
		select 1^2;
		select 1&0;

DML操作
a) 添加数据 insert

A. 插入数据

	values中的数据值与表的字段位置一致,字符串插入需要使用引号
	insert into user values(12,'zs','123');

K. 向特定字段位置插入数据

	前提是某些字段允许空值操作
	insert into user(userid,username) values(3,'ww');

L. 批量插入数据

	insert into user values(1,'zs','123'),(2,'ls','123')

M. 复制已有的表

	insert into user(id,name) select userid,username from tuser

an) 修改数据 update

	update tname set col_name = col_value
	使用update没有使用条件,将修改所有记录的值
	update tuser set password = '234' where userid = 2;

ao) 删除数据 delete

	使用delete语句,没有where条件将删除所有的数据
	//删除所有数据是一行一行删除,因此比truncate速度慢,而且不会重置自增值。
	delete from tuser where userid = 1;

DQL操作 select

select 的语法
select * from tbl_name
FROM 子句
where 子句
group by
HAVING
order by
limit

Ø 查询所有数据

			select * from user

Ø 查询指定列的数据

		select username,password from user

Ø 条件查询(单一):查询年龄>18的用户信息

		select * from user where age > 18

Ø 条件查询(组合),多个条件使用and或or连接

		查询年龄>18的所有女生
		
		select * from user where age >18 and sex = '女'

Ø 别名(字段)

		select userid [as] 编号,username [as] 名称 from user;

Ø 别名(表)

		select u.userid,u.username from user u; 

Ø 去重(distinct)

		select distinct username from user;

Ø 模糊查询 like

		%代表匹配0到多个字符
		
		_代表匹配一个字符
		
		查询以z打头的所有用户
		
		select * from user where username like 'z%';
		
		查询以s结尾的所有用户
		
		select * from user where username like '%s';
		
		查询包含s的所有用户
		
		select * from user where username like '%s%';
		
		查询第二个字为s的用户
		
		select * from user where username like '_s%'

Ø 非空 is null

		select * from user where sex is [not] null; 

Ø 范围查询 between … and …:查询年龄在12和20之间的用户

		select * from user where age BETWEEN 12 and 20;
		
		等价于
		
		select * from user where age >=12 and age <=20;

Ø 集合查询:查询用户id为1和2的用户

		select * from user where userid in (1,2);

等价于

		select * from user where age = 1 or age =2;

Ø 排序:按照年龄升序排序

		select * from user order by age [asc]

按照年龄升序排序,如果年龄一样,按照编号降序排序

		select * from user order by age,userid desc;

Ø 限制结果数量:用于分页查询 limit m,n:m代表开始索引(从0开始),n代表长度

		select * from user limit 0,2;

函数

  1. 单行函数

a) 数学函数

		Ø abs():绝对值
		
		select abs(-1);    //1
		
		Ø ceiling()/ceil():向上取整,最接近并且大于等于该值的整数值
		
		select ceil(12.5);   //13
		
		select ceil(-12.5);  //12
		
		Ø floor():向下取整,最接近并且小于等于该值的整数值
		
		select floor(12.5);  //12
		
		select floor(-12.5);  //13
		
		Ø mode(m,n):m对n取模
		
		select mode(5,3);   //2
		
		Ø PI():取PI的值
		
		Ø pow(m,n):取m的n次方
		
		select POWER(3,2);  //9
		
		Ø rand():取随机数  
		
		select rand();   //[0,1)之间获取随机数
		
		Ø round(m,n):四舍五入
		
		select round(3.5);    //4
		
		select ROUND(13.56,2);  //13.56  从小数点后n为开始四舍五入
		
		Ø truncate(m,n):截取m小数点后n位
		
		select TRUNCATE(3.56,1);  //3.5

ap) 字符函数

		Ø ascii(str):获取str的ascii码值
		
		select ASCII('a');    //97
		
		Ø lower(字段|表达式):将字符串转换为小写
		
		select LOWER('ABC');    //abc
		
		Ø upper(字段|表达式):将字符串转换为大写
		
		    select UPPER('abc');     //ABC
		Ø concat(str1,str2…):将字符串连接
		
		select CONCAT('aa',2,'cc');   //aa2cc
		
		Ø length(字段|表达式):获取字符串长度
		
		select LENGTH('hello mysql');  //11
		
		Ø substr(str,pos,len):截取字符串,pos开始位置,从1开始;len表示长度
		
		select SUBSTR('my name is gardy_lee',4,4);   //name
		
		Ø replace(str,old,new):在str中搜索old,使用new代替
		
		select REPLACE('my name is gardy_lee','my','your');//your name is grady_lee
		
		Ø lpad(str,len,s):str长度不够len,使用s左侧填充
		
		select LPAD('hello',10,'--');    //-----hello
		
		Ø rpad(str,len,s):str长度不够len,使用s右侧填充
		
		select RPAD('hello',10,'-');    //hello-----
		
		Ø trim():去重左右两侧的空格
		
		select trim('    hello');    //hello

aq) 日期函数

		Ø NOW()/SYSDATE()/CURRENT_TIMESTAMP():获取当前日期时间
		
		Ø CURRENT_DATE()/CURDATE():获取当前系统日期
		
		Ø CURRENT_TIME()/CURTIME():获取当前系统时间
		
		Ø DATE_ADD(date,INTERVAL expr unit):日期转换
		
		select ADDDATE('1998-08-08',INTERVAL 2 YEAR);   //2000-08-08
		
		Ø DAY(date):获取天数
		
		select DAY(‘1998-09-10’);  //10
		
		Ø MONTH(date):获取月份
		
		select MONTH('1989-09-10');   //9
		
		Ø YEAR(date):获取年份
		
		select YEAR('1989-09-10');    //1989
		
		Ø week(date):返回一年中的周数
		
		select WEEK('2001-02-05');    //5
		
		Ø weekday(date):返回一周中的第几天(0-6)
		
		select WEEKDAY('2001-02-06');  //1  周二
  1. 聚合函数

    	Ø avg():平均值
    	
    	Ø sum():获取总数
    	
    	Ø max():获取最大值
    	
    	Ø min():获取最小值
    	
    	Ø count():统计数目
    
  2. 分组函数

    	Ø GROUP BY子句
    	 用于将信息划分为更小的组
    	 每一组行返回针对该组的单个结果
    	Ø HAVING子句
    	 用于指定 GROUP BY 子句检索行的条件
    	   查询平均工资大于2000的部门编号
    	   select deptno,avg(sal) avg from emp group by deptno having avg>=2000
    
  3. 加密函数

    	Ø select md5('root');
    	
    	Ø select SHA('root');
    	
    	Ø select PASSWORD('root');
    

高级查询

  1. 多表查询(关联查询,连接查询)

     	a) 笛卡尔积
     	
     	emp表15条记录,dept表4条记录。
     	连接查询的笛卡尔积为60条记录。
     	ar) 内连接:不区分主从表,与连接顺序无关。两张表均满足条件则出现结果集中。
     	
     	Ø where子句
     	
     	select * from emp,dept
     	where emp.deptno = dept.deptno
     	
     	Ø inner join…on…
     	
     	select * from emp
     	inner join dept
     	on emp.deptno = dept.deptno
     	Ø inner join…using…
     	
     	select * from emp
     	
     	INNER JOIN dept
     	using(deptno)
    

as) 自然连接:寻找两表中字段名称相等的字段进行连接,会自动去重重复列。

		select * from emp NATURAL join dept;

at) 外连接:有主从表之分,与连接顺序有关。以驱动表为依据,匹配表依次进行查询;匹配表中找不到数据,则以null填充。

A. 左外连接:left [outer] join…on…

		select * from emp
		LEFT JOIN dept
		on emp.deptno = dept.deptno

N. 右外连接:right [outer] join…on…

		select * from dept
		LEFT JOIN emp
		on emp.deptno = dept.deptno
  1. 子查询:即嵌套查询,将一个查询结果作为另一个查询条件或组成部分的查询。

    	Ø 单行子查询:查询工资大于7788号员工的所有员工信息
    	
    	select * from emp where sal >(select sal from emp where empno =7788);
    	Ø 多行子查询:
    	
    	返回多值可以使用any或all来修饰。
    	
    	=any相当于in,<any小于最大值,>any大于最小值;
    	
    	<>all相当于not in,>all大于最大值,<all小于最小值。
    	
    	Ø 查询超过所在部门平均工资的员工信息
    	
    	select * from emp e1 where sal >
    	(select avg(sal) from emp e2 where e1.deptno = e2.deptno);
    	
    	Ø 查询薪水大于2000的部门名称
    	
    	select dname from dept d where deptno in
    	(select deptno from emp e where sal > 2000);
    	
    	    或
    	select dname from dept d where EXISTS
    	(select * from emp e where sal > 2000 and d.deptno=e.deptno);
    

Ø in和exists的区别

		in先执行子查询,在执行主查询;exists先执行主查询;
		
		exists子查询不返回具体结果,返回true值出现在结果集,否则不出现。
  1. 集合查询

    	a) UNION:并集,所有的内容都查询,重复的显示一次
    	
    	au) UNION ALL:并集,所有的内容都显示,包括重复的
    	
    	select * from emp where deptno = 20
    	UNION ALL
    	select * from emp where sal <=2000;
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值