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;
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。