有关数据库(MySQL收集都中文文档)
SQL Structured Query Language 结构化查询语言
作用:与数据库进行交互
SQL标准 和 方言
SQL语句的分类:
DDL:数据定义语言
DML:数据操作语言
DCL:数据控制语言
DQL:数据查询语言
TPL:事务处理语言等
DDL:作用 定义数据库,表结构(关键字:create alter drop)
创建数据库:
创建数据库: show create database mydb1;
查看数据库创建细节: show create database mydb1;
创建一个使用utf8字符集的mydb2数据库; create database mydb2 character set utf8 ;
创建一个使用utf8字符集,并带有校对规则的mydb3数据库
Create database mydb3 character set utf8 collate utf8_general_ci;
显示库的语句 show databases;
显示数据库创建语句: show create database db;
数据库删除语句: drop database db;
查看服务器的数据库,并把其中某一库的字符集改成gbk;
alter database mydb2 character set gbk;
------------------------------------------------------------------------------
创建表结构操作
创建表之前要先选择数据库
创建一个员工表
Create table employ(
Id int ,
Name varchar(200),
Gender varchar(20),
Job varchar(300),
Resume text); //注意最后一行不能有 ’,’
查看当前数据库的所有表:
Show tables;
查看表的创建细节
Show create table employ;
修改表结构 使用alter关键字
在上述表中增加一个列 alter table employ add 列名 blob;
修改某个列 (change关键字是用来改列名的,modify 是改类型)
(例如将name 列的长度改成60) alter table employ modify name varchar(60)
删除gender的列
Alter table person drop gender;
把表的名字employ改成employees
Rename table employ to employees
修改表的字符集: alter table persons charcter set gbk;
修改列名name改成username alter table employee change name username varchar(10) ;
DML 数据操作语句 操作表中的数据
关键字:insert update delete select
执行 Mysql>Show variables like ‘character%’; 命令
即可列出对各方面(客户端、连接、数据库,结果集等)的编码字符集
对于编码格式,出现乱码的情况:(大部分应用使用到中文时)
告知服务器 客户端使用的编码为gbk set character_set_client=gbk;
告知服务器客户端查看结果集用的编码为gbk set character_set_results=gbk;
结果编码是暂时性的,永久性的修改可以到MySQL中的my.ini配置文件里面找到并修改
---------------------------------
首先对于插入数据 Insert:
字符串类型:使用单引号引起来 ‘asa’
日期时间: 使用单引号引起来 ‘ ’
特殊值: null
练习(举例按照上述员工表)
向员工表中插入三条员工信息 insert into employee (id,name,gender)values(3,’lisi’,’男’);
-----------------------------------
下面是对数据库表中的 查,删 改
Update employee set gender=’’;
Update employee set gender=’’ whrere username=’’;
Update employee set gender=’’,id= whrere username=’’; //更新
删除..的记录
Delete from employee where username=’’;
删除所有记录
Delete from employee; //删除
DQL 数据操作语言 作用来 查询 关键字Select
直接练习:
查询表中所有学生的信息 select * fromemployee;
查询表中所有学生的姓名和ID; select name ,Id from employee;
过滤表中重复的数据: select distinct gender from employee;
查询时可以进行算数计算 select id ,username+gender from employee;
别名: select id (AS) 别名,username+gender from 别名 employee;
还有where语句,另外在在where子句中经常使用的运算符
比较运算符 > < <= >= = <> 大于、小于、大于(小于)等于、不等于
BETWEEN ...AND... 显示在某一区间的值(含头含尾)
IN(set) 显示在in列表中的值,例:in(100,200)
LIKE ‘张pattern’ 模糊查询 Like语句中,% 代表零个或多个任 意字符,_ 代表一个字符,例first_name like ‘_a%’;
IS NULL 判断是否为空
逻辑运算符 and 多个条件同时成立
or 多个条件任一成立
not 不成立,例:where not(salary>100);
使用order by 子句排序查询结果。
Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。
Asc 升序、Desc 降序
ORDER BY 子句应位于SELECT语句的结尾。 默认是升序ASC
练习:
对数学成绩排序后输出。
mysql>SELECT name,math FROM student ORDER BY math;
对总分排序后输出,然后再按从高到低的顺序输出
mysql>SELECT name,chinese+english+math FROM student ORDER BY chinese+english+math DESC;
数据完整性
数据完整性是为了保证插入的数据是正确的,他防止了用户可能的输入错误
完整性分为三类:
实体完整性
域完整性
参照完整性
实体完整性:规定表的一行(即每一条记录)在表中是唯一的实体。实体完整性通过表的主键来实现。
id int primary key auto_increment;...
主键分类:逻辑主键和业务主键
逻辑主键:不代表实际意义,只是区分不同记录。比如id;
业务主键:代表具体的实际意义
域完整性:指数据库表的列(即字段)必须符合某种特定的数据类型或约束。比如NOT NULL。
非空约束;not null
唯一约束:unique
id int primary key auto_increment,
Username varchar(100) not null unique,
Gender varchar(10) not null
参照完整性:保证一个表的外键和另一个表的主键对应。
表间的关系:一对多,多对多,一对一
定义外键约束
constraint 表名id_FK foreign key(表名_id) references 表名(id)
参照多表,做删除表操作时,delete from 表名 where id= 1 ;删除不了
把表中的id设置成null,可以删除
数据查询语言(复杂一点的)
连接查询:
from TABLE1 join_type TABLE2 [on (join_condition)] [where (query_condition)]
其中,TABLE1和TABLE2表示参与连接操作的表,TABLE1为左表,TABLE2为右表。on子句设定连接条件,where子句设定查询条件,join_type表示连接类型
交叉连接查询CUSTOMER表和ORDERS表
SELECT * FROM customer CROSS JOIN orders;
SELECT * FROM customer,orders;
内连接查询
显式内连接:使用inner join关键字,在on子句中设定连接条件
SELECT * FROM customer c INNER JOIN orders o ON c.id=o.customer_id;
隐式内连接:不包含inner join关键字和on关键字,在where子句中设定连接条件
SELECT * FROM customer c,orders o WHERE c.id=o.customer_id;
左外连接查询
使用left outer join关键字,在on子句中设定连接条件
SELECT * FROM customer c LEFT OUTER JOIN orders o ON c.id=o.customer_id;
右外连接查询
使用right outer join关键字,在on子句中设定连接条件
SELECT * FROM customer c RIGHT OUTER JOIN orders o ON c.id=o.customer_id;
子查询
子查询也叫嵌套查询,是指在select子句或者where子句中又嵌入select查询语句
SELECT * FROM orders WHERE customer_id=
(SELECT id FROM customer WHERE name LIKE '%陈冠希%');
联合查询
联合查询能够合并两条查询语句的查询结果,去掉其中的重复数据行,然后返回没有重复数据行的查询结果。联合查询使用union关键字
SELECT * FROM orders WHERE price>200 UNION SELECT * FROM orders WHERE customer_id=1;
最后,学习一下数据的备份与恢复
数据库备份:
mysqldump -u root -psorry test>test.sql
数据库恢复:
创建数据库并选择该数据库
SOURCE 数据库文件
或者:
mysql -u root -psorry test<test.sql