zoukankan      html  css  js  c++  java
  • JavaWeb之Mysql快速入门(十一)

    MySql快速入门

    1. mysql简介

    Structured Query Language 结构化查询语言
    SQL标准,由ANSI(美国标准学会,属于ISO的核心成员)进行管理和维护的。
    数据库厂商都支持该标准,并进行了扩展。扩展的部分,一般称之为方言。
    SQL标准和方言:普通话和方言
    
    作用:与数据库进行交互
    常用数据库:Oracle/DB2/MySQL/SQL Server
    
    

    2. SQL语句的分类

    DDL:Data Definition Language数据定义语言	alert/create/drop
    DML:Data Manipulation Language 数据操作语言	insert/update/delete
    DCL:Data Control Language 数据控制语言
    DQL:Data Query Language 数据查询语言		select
    TPL:事务处理语言

    3. 数据库入门操作

    -----------------------------------------------------------------
    数据库操作
    1). 创建数据库
    	CREATE DATABASE mydb1;
    2). 查看所有的数据库
    	SHOW DATABASES;		SHOW CREATE DATABASE mydb2;
    3). 创建数据库,指定字符集,并带校验规则的数据库
    	CREATE DATABASE mydb3 CHARACTER SET utf8 COLLATE utf8_general_ci;
    4). 删除创建的mydb1数据库
    	DROP DATABASE mydb1;
    5). 查看服务器中的数据库,并把mydb1的字符集修改为utf8;
    	ALTER DATABASE mydb1 CHARACTER SET utf8;
    
    -----------------------------------------------------------------
    表结构操作
    	数据类型
    	blob二进制数据			float(5,2)总共5位,小数位2位
    	char(20)表示字符20个		varchar(20)如果只占三个,其他17个回收,相应的性能会下降
    	1). 选择数据库
    		use mydb1;
    	2). 创建一个员工表employee
    		
    	3). 当前数据库中的所有表以及细节
    		SHOW TABLES;	desc employee查看细节	show create table employee;
    	4). 添加列/修改列类型/改变列名/删除列/修改表名
    		ALTER TABLE employee ADD image blob;
    		ALTER TABLE employee MODIFY job varchar(60);
    		ALTER TABLE employee CHANGE name username varchar(100);
    		ALTER TABLE employee DROP image;
    		RENAME TABLE employee TO user;
    		ALTER TABLE user CHARACTER SET gbk;	//修改表的字符集为gbk
    
    -----------------------------------------------------------------
    插入数据
    列名和列值顺序要一致
    insert into 表名 values(列值1, 列值2...)//有多少列就写多少
    insert into 表名(列名1, 列名2...) values(列值1, 列值2...)//指定插入哪些列值数据
    
    注意: 如果在dos窗口操作数据需要告知客户端以gbk编码发送,服务端以gbk编码接收,因为dos窗口默认gbk编码
    告知服务器客户端使用的编码为gbk
    set character_set_client=gbk;
    告知服务器客户端查看结果集用的编码为gbk;
    set character_set_results=gbk;
    
    -----------------------------------------------------------------
    更新数据
    UPDATE user SET salary=4000,job=’ccc’	WHERE username=’hch’;
    UPDATE user SET salary=salary+1000 where username=’皇甫张军’;
    
    -----------------------------------------------------------------
    删除数据
    DELETE FROM user WHERE username=’zhw’;
    清空表中记录
    DELETE FROM user;
    TRUNCATE TABLE user;//整张表格摧毁,然后重建的表结构。效率比一行一行的删除行速度快
    
    -----------------------------------------------------------------
    数据查询
    查询总分大于200的前三名姓名和分数
    select name, sum(math+english+chinese) as score from student
    group by name having score>200 order by score desc limit 0,3;

    4. 数据完整性

    数据完整性是为了保证插入到数据中的数据是正确的,它防止了用户可能的输入错,分为三类
    
    1. 实体完整性
    	规定表的一行(即每一条记录)在表中是唯一的实体。实体完整性通过表的主键来实现
    	
    	主键的特点:不能为null,必须有值,且不能重复
    		逻辑主键:不代表实际意义,只是区分不同记录用的。比如id
    		业务主键:代表者具体的实际意义。比如身份证号  用户名
    		声明主键:
    		第一种方式一般用于单个主键,id int PRIMARY KEY 声明id是主键
    		第二种方式一般用于联合主键,PRIMARY KEY(id,cardid)
    	注意主键也可以设置自增长
    		id int PRIMARY KEY auto_increment,
    
    2. 域完整性
    	指数据库表的列(即字段)必须符合某种特定的数据类型或约束
    	非空约束:not null	
    	唯一约束:unique
    	username varchar(100) not null unique, 非空和唯一约束
    
    
    3. 参照完整性
    	--------------------------------------------------------------
    	一对多(用的最多)
    	CREATE TABLE department(
    		id int primary key,
    		name varchar(100)
    	);
    
    	CREATE TABLE employee(
    		id int primary key,
    		name varchar(100),
    		salary float(8,2),
    		department_id int,
    		CONSTRAINT department_id_fk FOREIGN KEY(department_id) REFERENCES department(id)
    	);
    
    	------------------------------------------------------------
    	多对多(用的很多)
    	CREATE TABLE teacher(
    		id int primary key,
    		name varchar(100),
    		salary float(8,2)
    	);
    	CREATE TABLE student(
    		id int primary key,
    		name varchar(100),
    		grade varchar(10)
    	);
    	CREATE TABLE teacher_student(
    		t_id int,
    		s_id int,
    		CONSTRAINT t_id_fk FOREIGN KEY(t_id) REFERENCES teacher(id),
    		CONSTRAINT s_id_fk FOREIGN KEY(s_id) REFERENCES student(id),
    		PRIMARY KEY(t_id,s_id)
    	);
    
    	-----------------------------------------------------------
    	一对一(几乎不用)
    	CREATE TABLE person(
    		id int primary key,
    		name varchar(100)
    	);
    	CREATE TABLE idcard(
    		id int primary key,
    		number varchar(20),
    		person_id int unique,
    		CONSTRAINT person_id_fk FOREIGN KEY(person_id) REFERENCES person(id)
    	);

    5. 连接查询

    基本语法形式:FROM 表1 连接类型 表2 [on 连接条件][where 筛选条件]
    约定:表1在连接类型的左边,称之为左表
      表2在连接类型的右边,称之为右表
    
    1. 交叉连接:cross join
    返回左表和右表的笛卡尔积(左表5条记录 ,右表6条记录 5*6=30条)
    select * from customer,orders;
    select * from customer cross join orders;
    
    2. 内连接:inner join
    返回满足连接条件的所有记录。
    隐式内连接:(不使用inner join关键字)
    select c.*,o.* from customer c,orders o where c.id=o.customer_id;
    显式内连接:(使用inner join关键字)
    select * from customer c inner join orders o on c.id=o.customer_id;
    
    3. 左外连接:left outer join=left join
    返回满足连接条件的所有记录,同时返回左表中剩余的其他记录
    查询所有客户,有订单的把订单也显示出来
    select * from customer c left outer join orders o on c.id=o.customer_id;
    
    4. 右外连接:right outer join=right join
    返回满足连接条件的所有记录,同时返回右表中剩余的其他记录
    查询所有订单,同时打印订单所属的客户
    select * from customer c right outer join orders o on c.id=o.customer_id;
    
    

    6. 子查询/联合查询

    子查询也叫嵌套查询,是指在select子句或者where子句中又嵌入select查询语句
    select * from orders where customer_id in(select id from customer where name='tom');
    
    union关键字。
    联合查询能够合并两条查询语句的查询结果,去掉其中的重复数据行,然后返回没有重复数据行的查询结果
    SELECT * FROM orders WHERE price>200 UNION SELECT * FROM orders WHERE customer_id=1;
    

    7. MySQL数据库的备份与恢复

    备份数据库dos窗口
    mysqldump -h localhost -u root -p mydb1>mydb1.sql
    
    恢复数据库两种方式
    方式1:
    	create database mydb1;
    	use mydb1;
    	source C:/bak/mydb1.sql;
    
    方式2:
    	create database mydb1;
    	mysql -u root -p mydb1<C:/bak/mydb1.sql;
  • 相关阅读:
    哈希表(hash)
    并查集
    trie树(字典树)
    单调队列(滑动窗口)
    单调栈
    用数组实现栈与队列
    数组实现双链表
    数组实现单链表
    区间合并
    离散化
  • 原文地址:https://www.cnblogs.com/codingpark/p/4251779.html
Copyright © 2011-2022 走看看