文章目录

  • 一、Mysql的登录
  • 二、创建数据库
  • 三、查看MySQL服务器中的所有的数据库
  • 四、删除数据库
  • 五、使用数据库
  • 六、DDL操作:table
  • 1)创建表
  • 2)查看表
  • 3)删除表
  • 4)修改表结构格式
  • 七、DML数据操作语言
  • 1)insert
  • 2)update
  • 3)delete
  • 八、SQL约束
  • 1)主键约束
  • 1.添加主键约束
  • 2.删除主键约束
  • 3.自动增长列
  • 2)非空约束
  • 3)唯一约束
  • 4)外键约束
  • 九、DQL数据查询语言
  • 1)条件查询
  • 2)排序查询
  • 3)聚合查询
  • 4)分组查询
  • 5)分页查询
  • 十、多表操作
  • 1)外键约束
  • 2)多表查询
  • 3)索引的操作
  • 4)唯一索引
  • 十一、MySql开窗函数


一、Mysql的登录

此处是基础Linux系统的终端操作

方式1:
			mysql -u root - p123456
			mysql -u root -p			然后回车输入密码

		方式2:
		该方式用在通过远程方式连接到别的Mysql服务器
		mysql --host=xx.xxx.xxx(目的ip) --user=root --password=123456
		mysql --host=xxx.xxx.xx(目的ip) --user=root --password		然后回车输入密码

二、创建数据库

  • 格式
create database 数据库名;
	create database if not exists bigdata_db;
	create database 数据库名 character set 字符集;

三、查看MySQL服务器中的所有的数据库

show databases;

四、删除数据库

drop database bigdata_db;

五、使用数据库

  • 选择数据库
use bigdata_db;
  • 查看正在使用的数据库
select database();

六、DDL操作:table

1)创建表

  • 格式
create table if not exists 表名(
	字段名		类型(长度)[约束],
	字段名		类型(长度)[约束],
	...
	);
  • 实列:
CREATE TABLE category(
	cid varchar(20) primary key,
	cname varchar(100)
	);

2)查看表

  • 查看数据库重的所有表
show tables;
  • 查看表结构
格式:desc 表名
	例如:desc sort

3)删除表

格式: drop talbe  表名;

4)修改表结构格式

  • alter table 表名 add 列名 类型(长度)[约束];
    作用:修改表添加列.
ALTER TABLE catagory ADD 'desc' VARCHAR(20);
  • alter table 表名 change 旧列名 新列名 类型(长度)约束;
    作用:修改表修改列名.
ALTER TABLE category CHANGE 'desc' description VARCHAR(30);
  • alter table 表名 drop 列名
    作用:修改表删除列
ALTER TABLE category DROP description;
  • rename table 表名 to 新表名;
    作用:修改表名
RENAME TABLE 'category' TO category2;

七、DML数据操作语言

1)insert

  • 语法
insert into 表(字段1,字段2,字段3...)values(值1,值2,值3...);
	insert into 表 values(值1,值2,值3...);
  • 注意:
  1. 值与字段必须对应,个数相同,类型相同
  2. 值的数据大小必须在字段的长度范围内
  3. 除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
  4. 如果要插入空值,可以不写字段,或者插入 null。
  • 例如
INSERT INTO category(id,name) VALUES('001','电器');

2)update

  • 语法
update 表名 set 字段名=值,字段名=值,...;
	update 表名 set 字段名=值,字段名=值,... where 条件;
  • 注意
  1. 列名的类型与修改的值要一致.
  2. 修改值得时候不能超过最大长度.
  3. 除了数值类型外,其它的字段类型的值必须使用引号引起
  • 实例
update category set name = '水果' where id = '001';

3)delete

  • 语法
delete from 表名 [where 条件];
	或者
	truncate table 表名;
  • 注意
  1. delete 一条一条删除,不清空auto_increment记录数。
  2. truncate 直接将表删除,重新建表,auto_increment将置为零,从新开始。
  • 实例
delete from category where id = '005';
	truncate category;

八、SQL约束

1)主键约束

  • PRIMARY KEY 约束唯一标识数据库表中的每条记录。
  • 主键必须包含唯一的值。
  • 主键列不能包含 NULL 值。
  • 每个表都应该有一个主键,并且每个表只能有一个主键。

1.添加主键约束

  • 方式一:创建表时,在字段描述处,声明指定字段为主键
CREATE TABLE Persons1
	 (
		Id int PRIMARY KEY,
		LastName varchar(255),
		FirstName varchar(255), 
		Address varchar(255), 
		City varchar(255)
	)
  • 方式二:创建表时,在constraint约束区域,声明指定字段为主键
  1. 格式:[constraint 名称] primary key (字段列表)
  2. 关键字constraint可以省略,如果需要为主键命名,constraint不能省略,主键名称 一般没用。
  3. 字段列表需要使用小括号括住,如果有多字段需要使用逗号分隔。声明两个以上字段 为主键,我们称为联合主键
CREATE TABLE Persons2
	 (
		FirstName varchar(255), 
		LastName varchar(255), 
		Address varchar(255), 
		City  varchar(255), 
		CONSTRAINT pk_PersonID PRIMARY KEY (FirstName, LastName)
	 );

2.删除主键约束

ALTER TABLE Persons DROP PRIMARY KEY;

3.自动增长列

  • auto_increment
CREATE TABLE Persons4 
	(
			Id int PRIMARY KEY AUTO_INCREMENT,
			LastName varchar(255), 
			FirstName varchar(255),
			Address varchar(255),
			City  varchar(255)
	)
  • 扩展:默认AUTO_INCREMENT 的开始值是 1,如果希望修改起始值,请使用下列 SQL 语法:
ALTER TABLE Persons AUTO_INCREMENT = 100

2)非空约束

NOT NULL 约束强制列不接受 NULL 值。

CREATE TABLE Persons5 (
			Id int NOT NULL,
			LastName varchar(255) NOT NULL, 
			FirstName varchar(255),
			 Address   varchar(255), 
			 City   varchar(255)
			  )

3)唯一约束

UNIQUE 约束唯一标识数据库表中的每条记录。

  • UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

4)外键约束

FOREIGN KEY 表示外键约束

九、DQL数据查询语言

1)条件查询

mysql的if函数带and mysql if and_数据库

2)排序查询

SELECT *FROM 表名 ORDER BY 排序字段 ASC|DESC;

eg.

SELECT * FROM product ORDER BY price DESC;
	
	SELECT *FROM product ORDER BY price DESC,category_id DESC;

	SELECT DISTINCT price FROM product ORDER BY price DESC;

3)聚合查询

mysql的if函数带and mysql if and_mysql_02

#查询价格大于200商品的总条数
	SELECT COUNT(*) FROM product WHERE price > 200;

4)分组查询

分组查询是指使用group by字句对查询信息进行分组。

SELECT 字段1,字段2… FROM 表名 GROUP BY分组字段 HAVING 分组条件;
  • having与where的区别:
  1. having是在分组后对数据进行过滤.,where是在分组前对数据进行过滤。
  2. having后面可以使用分组函数(统计函数),where后面不可以使用分组函数。
# 统计各个分类商品的个数,且只显示个数大于1的信息
	SELECT category_id ,COUNT(*) FROM product GROUP BY category_id HAVING COUNT(*) > 1;

5)分页查询

SELECT 字段1,字段2... FROM 表明 LIMIT M,N
	M: 整数,表示从第几条索引开始,计算方式 (当前页-1)*每页显示条数
	N: 整数,表示查询多少条数据
查询product表的前5条记录
	SELECT * FROM product LIMIT 0,5

十、多表操作

1)外键约束

  • 声明外键约束
alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主 表 (主表的主键);

删除外键约束:

alter table 从表 drop foreign key 外键名称

2)多表查询

  1. 交叉连接查询(基本不会使用-得到的是两个表的乘积)
select * from A,B
  1. 内连接查询(使用的关键字 inner join – inner可以省略)
  • 隐式内连接:select * from A,B where 条件;
  • 显示内连接:select * from A inner join B on 条件;
  1. 外连接查询(使用的关键字 outer join – outer可以省略)
  • 外连接:select * from A left outer join B on 条件;
  • 外连接:select * from A right outer join B on 条件;

3)索引的操作

  1. 创建索引
  • 方式一:
CREATE INDEX indexName ON mytable(username([length]));
  • 方式二:
ALTER table tableName ADD INDEX indexName(columnName)
  • 方式三:
CREATE TABLE mytable( 
			ID INT NOT NULL, 
			username VARCHAR(16) NOT NULL, 
			INDEX indexName(username(length))
			);
  1. 查询索引
SHOW INDEX FROM table_name;
  1. 删除索引
DROP INDEX [indexName] ON mytable;

	alter table mytable drop index indexName;

4)唯一索引

  1. 创建索引
  • 方式一:
CREATE UNIQUE INDEX indexName ON mytable(username(length))
  • 方式二:
ALTER table mytable ADD UNIQUE [indexName] (username(length))
  • 方式三:
CREATE TABLE mytable( 
			ID INT NOT NULL, 
			username VARCHAR(16) NOT NULL, 
			UNIQUE [indexName] (username(length))
);
  1. 删除索引
DROP INDEX [indexName] ON mytable;

	alter table mytable drop index indexName;

十一、MySql开窗函数

  • 结构
<开窗函数> over ([PARTITION by <列清单>] 
						Order by <排序用列清单>)

常见开窗函数:row_number(), rank() ,dense_rank()