MySQL基础

MySQL常用数据类型

  • bit:值为0/1(0为false、1为true)
  • 整数:int
  • 变长字符串:varchar,用时需赋值长度
  • 定长字符串:char
  • decimal(M,D):浮点数,(M,D)中M表示所有位数,D表示小数点后的位数
  • datetime:通常使用它表示时间(起始时间1000节省时间9999)
  • timestamp:时间(起始时间1970结束时间2037)

DDL

  • 概念:数据定义语言(主要对表的结构进行操作)
  • 操作:
    • CREATE(创建)
      • 创建数据库:create database 数据库名
      • 创建表:create table 表名
      • 使用旧表创建新表
        • 不复制数据:create table 新表名 like 旧表名
        • 复制数据:create table 新表明 as select 旧表字段名 from 旧表名
      • 创建索引:create index 索引名 on 表名(表属性名)
      • 创建视图:create view 视图名 as select 表字段名 from (关联表)
/* 创建数据库 */
	create database sms;
	/* 使用sms数据库作为当前数据库 */
	use sms;
	/*创建表*/
	create table student(
		stu_no varchar(20) not null primary key,
		stu_name varchar(50) not null
	);
	
	/*描述表结构*/
	desc student;
	#使用旧表创建新表
	#复制值
	create table stumessage as select id,name,sex,birthday,height from stu;
	#不复制值
	create table stuname like stu;
	#创建索引
	create index name on stu(name);
	#重命名表
	rename table student to stu;
	#创建视图
	create view clazz_view as select stu.name as stu_name,
	clazz.name as class_name
	from stu,clazz
	where stu.clazz_id=clazz.id;
  • ALTER(修改)
    • 添加列:alter table 表名 add column 字段名 数据类型及长度 是否允许为空等
    • 删除列:alter table 表名 drop column 字段名
    • 修改列
      • 改变类型及长度:alter table 表名
        modify column 字段名 类型及长度;
      • 改名、改类型及长度:alter table 表名
        change column 旧字段名 新字段名 类型及长度;
    • 添加主键:alter table 表名 add primary key 字段名(auto-increment自增的必须设置为主键)
    • 添加外键:alter table 表名 add foreign key 字段名 references 关联表名 (字段名)
	alter table student#操作表 
	add column class#添加列名为class
	varchar(10) #声明数据类型为可变字符串
	not null#不允许为空
	commit'班级'#备注说明
	#删除列
	alter table student
	drop column class;
	#修改列属性及类型modify
	alter table student
	modify column name varchar(25)
	not null comment '姓名';
	#修改列,列名、属性及类型:change
	alter table student
	change column sex gender char(1)
	not null
	comment '性别';
	#添加主键
	alter table stu add parimary key id;
	#添加外键
	alter table course add foreign key (teacher_id)
references teacher(teacher_id);

DML

  • 概念:数据操纵语言(操作表中的数据)
  • 操作
    • SELECT(查询)
      • 查询全部:select * from 表名
      • 查询某些字段:select 字段名(可用多个","隔开) from 表名
      • 查询带多个条件:select 字段名 from 表名 where 条件1 and/or 条件2
      • 去重复查询 :select distinct
      • 排序:order by 字段名 asc(升序)/desc(降序)
      • 模糊匹配:like
      • between…and…区间选择
      • in指定几个选项
      • count统计条数
      • is null/is not null
	#MySQL 的 WHERE 子句的字符串比较是不区分大小写可使用 BINARY 关键字来设定 WHERE 子句的字符串比较是区分大小写的。
	select * from stu;
	select id,name from stu;
	select id,name,height from stu where height<1.80;
	select * from stu where clazz_id=2 and height>1.70;
	select * from stu where clazz_id>1 or height<1.75;
	select * from stu order by height desc , clazz_id asc;
	select distinct  clazz_id from stu  ; 
	#模糊匹配 like
	select * from stu where name like '张%龙';
	select * from stu where name like '张%';
	select * from stu where name like '%虎';
	select * from stu where name like '%一%';
	#between...and... 区间选择
	select * from stu where birthday between '1930-01-01' and '2000-01-01';
	# in 指定几个选项
	select * from stu where id in(1,2,5,6);
	# is null /is not null
	select * from stu where gender is not null;
	select * from stu where hometomw is null
	#count统计条数
	select count(*) from stu where class_id=1 and gender='男' and birthday > '2000-01-01';
  • 复杂查询
    - limit:限制显示条数
	# limit
	select * from score order by degree desc limit 3;
	select * from score order by sno;
	select * from score order by  sno limit 3,3;
	select * from score order by sno limit 0,5;
	select * from score order by sno limit 5,5;
	select * from score order by sno limit 10,5;
	#如果字符集采用的是 gbk(汉字编码字符集),直接在查询语句后边添加 ORDER BY:
	SELECT * FROM runoob_tblORDER BY runoob_title;
	#如果字符集采用的是 utf8(万国码),需要先对字段进行转码然后排序:
	SELECT * FROM runoob_tbl ORDER BY CONVERT(runoob_title using gbk);
	# limit (n-1)*pageSize,pageSize
	#最基本的分页方式:SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...
	SELECT * FROM score WHERE course_id = 123 ORDER BY sno LIMIT 50, 10
	#子查询的分页方式
	SELECT * FROM score WHERE course_id = 123 ORDER BY sno LIMIT 10000, 10
	#越往后分页,LIMIT 语句的偏移量就会越大,速度也会明显变慢。此时提高分页效率,大致如下:
	SELECT * FROM articles WHERE  id >=(SELECT id FROM articles  WHERE category_id = 123 ORDER BY id LIMIT 10000, 1) LIMIT 10
  • group by:分组
    - having:用在group by之后的选择
	# group by
	##max sum min avg count
	select cno,max(degree) from score group by cno;
	select ssex,count(*) from student group by ssex;
	#1.求每个班有多少人
	select class,count(*) from student group by class;
	#2.求每科的平均成绩
	select cno,avg(degree) from score group by cno;
	select cno,avg(degree) from score where degree>80 group by cno;
	select cno,avg(degree) from score group by cno having avg(degree)<80;
  • union与union all:有all不去重,没all去重
    - 子查询
#子查询
select s.SNAME from student s where s.SNO in (select sno from score c where c.DEGREE>80 and c.DEGREE<90);
  • 四种连接
    - inner join on
    - left join on
    - right join on
    - full join
	SELECT *
	FROM websites w
	INNER JOIN access_log a ON w.id=a.site_id;
	SELECT *
	FROM websites w
	LEFT JOIN access_log a ON w.id=a.site_id;
	select * from  access_log a right join websites w on w.id=a.site_id ;
	#select * from  access_log a full join websites w on w.id=a.site_id;
  • 多表关联from,取得笛卡尔积
#关联查询取得笛卡尔积
select * from stu,clazz where stu.class_id=clazz.id and stu.class_id=1;
  • DELETE(删除)
    • UPDATE(更新):update 表名 set 该字段数据
	#更新操作
	update stu set sex="女" where name="唐xx";
	select * from stu;
  • INSERT(插入):insert into 表名 values()
    - 全部
    - 部分(非必填、自增、含默认值可省略)
	#插入
	insert into stu values(4,"唐xx","男","1993-05-23 12:00:00",1.70,4); 
	#非必填、自增、默认值
	insert into stu(name,clazz_id,sex,birthday,height) values("唐逛逛",3,"女","1993-05-23 12:00:00",1.65);

DCL

  • 概念:权限操作

  • 操作

    • GRANT(授予权限)
    • REVOKE(撤销权限)
    • COMMIT(提交)
    • ROLLBACK(回滚)
  • 用户

    • 创建用户:create user 用户名@localhost idtentified by ‘xxxx’
    • 删除用户 :drop user 用户名@localhost
    drop user lucas@localhost;
    create user lucas@localhost identified by 'xxx123';
    	# 将test下的所有对象的所有权限赋给用户lucas
    grant all on test to lucas@'localhost';
    flush privileges;
    show grants for lucas@localhost;
    select * from book;
    revoke all on test from lucas@'localhost';
    revoke all on test.* from lucas@localhost;
    flush privileges;
    revoke all on test.book from lucas@localhost;
    		drop user lucas@localhost;
    

日期计算

  • 当前日期
select now();
select sysdate();
select current_timestamp;
  • 格式化与解析

    	#格式化与解析
    select date_format(now(), '%Y-%m-%d %H:%i:%s');
    
    select  date_format(str_to_date('2008/05/12','%Y/%m/%d'), '%Y-%m-%d %H:%i:%s');
    
    select year(now());
    
    select month(now());
    
    select day(now());
    
  • 日期计算

    #日期计算
    #date_add 加
    select date_add(now(), interval 2 day);
    select date_add(now(), interval 2 month);
    select date_add(now(), interval 2 QUARTER);
    select date_add(now(), interval 2 year);
    
    #date_sub 减
    select date_sub(now(), interval 2 day);
    select date_sub(now(), interval 2 month);
    select date_sub(now(), interval 2 QUARTER);
    select date_sub(now(), interval 2 year);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值