Mysql基础

核能气质少年 提交于 2020-03-08 09:46:26

SQL

1. 什么是SQL?
     Structed Query Language:结构化查询语言
2. SQL通用语法   
   1. Sql可以单行或多行书写,以分号结尾。
   2. 可以使用空格和缩进来增强语句的可读性。
   3. Mysql的数据库SQL语句不区分大小写,关键字建议使用大写。
   4. 3种注释
      * 单行注释:--注释内容  或   #注释内容(mysql特有)
      * 多行注释:/*注释内容*/
3. SQL的分类
	1. DDL(Data Definition Languange)数据定义语言
		用来定义数据库对象:数据库,表,列等。关键字:creat,drop,alter等
	2. DML
		用来对数据库表中的数据增删改。关键字:insert,delete,update等
	3. DQL
		用来查询数据库表中的记录(数据)。关键字:select,where等
	4. DCL(了解)
		用来定义数据库的访问权限和安全级别,和创建用户。关键字:GRANT,REMOVE等。

DDL:操作数据库,表

1. 操作数据库 :CRUD
	1. C(create):创建
		* 创建数据库;
			* create database 数据库名称
		* 创建数据库,判断不存在,再创建:
			* create database if not exists 数据库名称
	2. R(retrieve):查询
		* 查询所有数据库的名称:
			* show database;
        * 查询某个数据库的字符集:查询某个数据库的创建语句
        	* show create database 数据库名称;  
	3. U(update):修改
		* 修改数据库的字符集
			* alter database 数据库名称 character set 字符集名称
	4. D(delete):删除
		* 删除数据库
			* drop database 数据库名称:
		* 判断数据库存在,存在再删除
			* drop database if exists 数据库名称
	5. 使用数据库
		* 查询当前使用的数据库名称
			* select database();
		* 使用数据库
		    * use 数据库名称

MySql是一种关系型数据库

连接到mysql数据库:mysql -u root -p

什么是SQL:结构化的查询语句

SQL分类:

DDL:数据定义语言

  • create,alter,drop…

DML:数据操纵语言

* update,insert,delete

DCL:数据控制语言

* grant,if..

DQL:数据查询语言

* select

数据库增删查改

创建数据库:语法:create database 数据库 [character 字符集 collate 校对规则]

查看数据库:

查看所有数据库:show databases;

查看某个数据库:show create database 数据库名;

修改数据库:语法:alter database 数据库名 character 字符集 collate 校对规则

删除数据库:语法:drop database 数据库名;

切换数据库:use 数据库名;

查看当前使用数据库:select database();

数据库表操作

创建表语法:

create table 表名 (

字段名 类型(长度) 约束,

  字段名 类型(长度) 约束,

字段名 类型(长度) 约束

);

数据类型:

Java类型: MySQL:

byte/short/int/long tinyint/smallint/int/bigint

String char/varchar

                        * 区别?char是固定长度的字符串,varchar可变长度的字符串.

                        * char(8) 和 varchar(8)

                            * 如果插入一个字符串hello 插入到char 那么 插入hello   .插入到varchar中 插入hello

float float

double double

boolean bit

Date date/time/datetime/timestamp

                    * datetime和timestamp都是既有日期又有时间的日期类型

                        * 区别? datetime需要使用外部传入的日期.如果没传这个值就是Null. timestamp会使用系统当前的时间作为这个值的默认值.

文本文件 Text

二级制文件 BLOB

***** Oralce使用CLOB/BLOB

***** MYSQL中除了字符串类型需要设置长度其他的类型都有默认长度******

约束:
单表约束:

  • 主键约束:primary key (默认就是唯一非空的)

  • 唯一约束:unique

  • 非空约束:not null

创建一个表:
***** 创建表之前先选择数据库:use 某个数据库;
create table employee(

eid int primary key auto_increment,

ename varchar(20) not null,

email varchar(30) unique,

birthday date,

job varchar(20),

resume text

);

【表的查看】

查看数据库中有哪些表:

  • show tables;

查看表结构:

  • desc 表名;

【表的删除】

表的删除:
drop table 表名;

【表的修改】

修改表添加列:

  • alter table 表名 add 列名 类型(长度) 约束;

    • alter table employee add image varchar(50);

修改表删除列:

  • alter table 表名 drop 列名;

    • alter table employee drop job;

修改表的列的类型长度及约束:

  • alter table 表名 modify 列名 类型(长度) 约束;

    • alter table employee modify image varchar(80) not null;

修改表的列名

  • alter table 表名 change 旧列名 新列名 类型(长度) 约束;

    • alter table employee change image eimage varchar(60);

修改表名

  • rename table 旧表名 to 新表名;

    • rename table employee to user;

修改表的字符集:

  • alter table 表名character set 字符集;

    • alter table user character set gbk;

*使用SQL操作数据库中的表的记录(对表的记录的CRUD的操作)
【插入记录】

语法

  • insert into 表名 (列名,列名,…) values (值1,值2,…); —插入指定列的值

  • insert into 表名 values (值1,值2,…); —插入所有列的值

注意事项:

  • 列名的个数与值的个数对应.

  • 列的类型与值的类型对应.位置也要对应.

  • 列的类型如果是字符串或者日期,写值的时候使用单引号将值引起来.

  • 插入的值的最大长度不能超过列的最大长度.

【修改记录】

语法:

  • update 表 set 列名=值,列名=值 [where 条件];

注意事项:

  • 列名和值类型也要一致.

  • 值不能超过列的最大长度.

  • 值是字符串或日期,需要使用单引号.

练习:

  • 修改employee表中所有记录的job为WORKER

    • update employee set job=‘WORKER’;
  • 修改employee表将name为aaa的邮箱改为aaa@163.com

    • update employee set email = ‘aaa@163.com’ where ename = ‘aaa’;
  • 修改employee表将name为bbb的邮箱改为bbb@163.com同时修改job为HR

    • update employee set email = ‘bbb@163.com’ , job=‘HR’ where ename=‘bbb’;

【删除记录】

语法:

  • delete from 表 [where 条件];

注意事项:

  • 删除表中的一行记录,不能删除某列值

  • 如果没有条件删除表中的所有列.

练习:

  • 删除id为8的记录:

    • delete from employee where eid = 8;
  • 删除所有记录:

    • delete from employee;

删除表中的所有记录truncate table 表名 和 delete from 表 区别?

  • 区别:

    • truncate table 删除表的记录:将整个表删除掉,重新创建一个新的表.truncate属于DDL.

    • delete from 删除表的记录:一条一条进行删除. delete属于DML。

      • 事务管理 只能作用在DML语句上.如果再一个事务中使用delete删除所有记录,可以找回.

【基本查询】

查询语句:

  • select [distinct] *|列名 from 表 [where 条件];

【条件查询】

where语句后面可以加:
条件的关键字:

= , > , >= , <, <= , <>

like中可以使用占位符: _ 和 % :下划线匹配一个字符, %:可以匹配任意多个字符.

【排序查询】

`order by 对数据进行排序.默认升序. (asc升序,desc降序)

【聚合函数】

`sum() 求和

`count() 统计

`max() 最大值

`min() 最小值

`avg() 平均数

【分组】

group by

  • 交叉连接:

    • select * from A,B; — 获得的是两个表的笛卡尔积.
  • 内连接: inner join – inner 可以省略

    • 显式内连接:select * from A inner join B on 条件;

    • 隐式内连接:select * from A,B where 条件;

  • 外连接:outer join – outer 可以省略

    • 左外连接:left outer join – select * from A left outer join B on 条件;

    • 右外连接:right outer join – select * from A right outer join B on 条件;

【多表查询的子查询】

一个SQL语句查询的过程中需要依赖另一个查询语句.
SELECT * FROM customer c,orders o WHERE c.cid = o.cid AND c.cid IN (SELECT cid FROM orders WHERE addr LIKE ‘海淀%’);

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!