MySQL 数据库简介
MySQL 是一个真正的多用户、多线程 SQL 数据库服务器。SQL(结构化查询语言)是世界上最流行的和标准化的数据库
语言。MySQL 是以一个客户机/服务器结构的实现,它由一个服务器守护程序 mysqld 和很多不同的客户程序和库组成。
SQL 是一种标准化的语言,它使得存储、更新和存取信息更容易。例如,你能用 SQL 语言为一个网站检索产品信息及存
储顾客信息,同时 MySQL 也足够快和灵活以允许你存储记录文件和图像。
MySQL 主要目标是快速、健壮和易用。最初是因为我们需要这样一个 SQL 服务器,它能处理与任何可不昂贵硬件平台上
提供数据库的厂家在一个数量级上的大型数据库,但速度更快,MySQL 就开发出来。自 1996 年以来,我们一直都在使用
MySQL,其环境有超过 40 个数据库,包含 10,000 个表,其中 500 多个表超过 7 百万行,这大约有 100 个吉字节(GB)
的关键应用数据。
MySQL 建立的基础是业已用在高要求的生产环境多年的一套实用例程。尽管 MySQL 仍在开发中,但它已经提供一个丰富
和极其有用的功能集。
数据类型
MySQL 支持多种列类型:数值类型、日期/时间类型和字符串(字符)类型。
SQL
SQL语⾔包含4个部分
1. 数据定义语⾔(Data Definition Language--DDL):如CREATE, DROP,ALTER等语句
2. 数据操纵语⾔(Data Manipulation Language- -DML):INSERT, UPDATE, DELETE语句
3. 数据查询语⾔(Data Query Language --DQL):SELECT语句
4. 事务控制语⾔(Transaction Control Language--TCL):如COMMIT, ROLLBACK等语句
数据定义语⾔(DDL
创建数据库(CREATE DATABASE语句)
CREATE DATABASE mydatabase;
show databases; //查看当前服务器上存在的数据库(当前登录⽤户可⻅的)
use mydatabase; //访问数据库
创建表(CREATE TABLE语句)
create table student(
sid int(11) primary key auto_increment,name varchar(20),gender char(1),age
int(2),birth date
);
desc student; //查看表结构
//创建表
删除表(DROP TABLE语句)
DROP TABLE student;
//drop table 语句会删除该的所有记录及表结构
show create table student; --查看表结构创建语句
desc student; --查看表结构
修改表结构(ALTER TABLE语句)
alter table test add column name varchar(10); --添加表列
alter table test rename test1; --修改表名
alter table test drop column name; --删除表列
alter table test modify address char(10) --修改表列类型
alter table test change address address char(40) --修改表列类型
alter table test change column address address1 varchar(30)--修改表列名
数据操纵语⾔(DML)
添加数据(INSERT INTO…语句)
INSERT INTO student(name,gender,birth) values(‘Tom’,’男’,’1985-2-5’);
修改数据(UPDATE … SET语句)
UPDATE student SET name=’LILY’,gender=’⼥’,birth=’1988-1-1’ where id=1;
删除数据(DELETE FROM…语句)
DELETE FROM student; --删除所有记录 DELETE FROM student where id=1; --删除ID为1的
记录
数据查询语⾔(DQL)
查询数据(SELECT … FROM …语句)
#查询表中的单个字段
SELECT last_name FROM employees;
#查询表中的多个字段
SELECT last_name,salary,email FROM employees;
#查询表中的所有字段
SELECT
`employees`.`employee_id`,
`employees`.`first_name`,
`employees`.`last_name`,
`employees`.`email`,
`employees`.`phone_number`,
`employees`.`job_id`,
`employees`.`salary`,
`employees`.`commission_pct`,
`employees`.`manager_id`,
`employees`.`department_id`,
`employees`.`hiredate`
FROM
employees;
# ⽅式⼆
SELECT * FROM employees;
#查询常量值
SELECT 100;
SELECT 'john';
#查询表达式
SELECT 10%3;
#查询函数
SELECT VERSION();
#7. 别名
SELECT 50%3 AS 结果;
SELECT last_name AS 姓,first_name AS 名 FROM employees;
#⽅式⼆:使⽤空格(省略 AS)
SELECT last_name 姓,first_name 名 FROM employees;
#案例:查询⼯资,显示结果为 员⼯ ⼯资
SELECT salary "员⼯ ⼯资" FROM employees;
#去重复
#案例:查询员⼯表中设计到的所有部⻔编号
SELECT DISTINCT department_id FROM employees;
#查询 ID 为 100 的员⼯信息
SELECT * FROM employees WHERE employee_id=100;
#查询部⻔id为空的员⼯信息
SELECT * FROM employees WHERE department_id IS NULL;
#查询表中的多个字段
SELECT first_name,last_name FROM employees;
#查询 employees_id ⼤于105 的员⼯信息
SELECT * FROM employees WHERE employee_id>105;
#查询 job_id 为 ST_MAN 并且 manager_id 为 100 的员⼯信息
SELECT * FROM employees WHERE job_id='ST_MAN' AND manager_id=100;
#查询 job_id 为 ST_MAN 或者 manager_id ⼤于 100 的员⼯信息
SELECT * FROM employees WHERE job_id='ST_MAN' OR manager_id>120;
#查询姓名的最后⼀个字符为“T”的员⼯信息
SELECT * FROM employees WHERE last_name LIKE '%T';
#查询姓名以“T”开头的员⼯信息
SELECT * FROM employees WHERE last_name LIKE 't%';
#查询姓名中包含“T”的员⼯信息
SELECT * FROM employees WHERE last_name LIKE '%t%';
#查询所有员⼯信息,并按⼯资降序排序(默认为升序:ASC)
SELECT * FROM employees ORDER BY salary DESC;
#多个排序条件:当第⼀个条件相同时,以第⼆个条件排序
SELECT * FROM employees ORDER BY salary DESC, department_id DESC;
#按部⻔分组查询各部⻔的⼈数
SELECT department_id, COUNT(department_id) AS ⼈数 FROM employees GROUP BY
department_id;
#HAVING条件语句⼀个HAVING⼦句(条件查询)必须位于GROUP BY⼦句之后,并位于ORDER BY⼦句之
前。
#按部⻔分组查询部⻔id为80的部⻔的⼈数
SELECT department_id, COUNT(department_id) AS 总数 FROM employees GROUP BY
department_id HAVING department_id=80;
#查询表的总记录数
SELECT COUNT(*) AS 总数 FROM employees;
#查询学⽣记录的前三条(从0位置开始找出3条)
SELECT * FROM employees LIMIT 0,3;
数据控制语⾔(TCL)
事务(Transaction)是访问并可能更新数据库中各种数据项的⼀个程序执⾏单元(unit)。事务通常由⾼级
数据库操纵语⾔或编程语⾔(如SQL,C++或Java)书写的⽤户程序的执⾏所引起,并⽤形如begin
transaction和end transaction语句(或函数调⽤)来界定。事务由事务开始(begin transaction)和事务
结束(end transaction)之间执⾏的全体操作组成。
例如:在关系数据库中,⼀个事务可以是⼀条SQL语句,⼀组SQL语句或整个程序。
事务是恢复和并发控制的基本单位。
事务应该具有4个属性:原⼦性、⼀致性、隔离性、持续性。这四个属性通常称为ACID特性。
原⼦性(atomicity)
⼀个事务是⼀个不可分割的⼯作单位,事务中包括的诸操作要么都做,要么都不做。
⼀致性(consistency)
事务必须是使数据库从⼀个⼀致性状态变到另⼀个⼀致性状态。⼀致性与原⼦性是密切相关的。
隔离性(isolation)
⼀个事务的执⾏不能被其他事务⼲扰。即⼀个事务内部的操作及使⽤的数据对并发的其他事务是隔
离的,并发执⾏的各个事务之间不能互相⼲扰。
持久性(durability)
持续性也称永久性(permanence),指⼀个事务⼀旦提交,它对数据库中数据的改变就应该是永
久性的。接下来的其他操作或故障不应该对其有任何影响。
⼩结:
事务(Transaction),也就是要么成功,要么失败,并恢复原状。
函数
GROUP BY(聚合)函数
AVG ([DISTINCT] expr)
返回expr 的平均值。 DISTINCT 选项可⽤于返回 expr的不同值的平均值。
SELECT department_id,AVG(salary) 平均薪资 FROM employees GROUP BY department_id;
SELECT gender, AVG(age) FROM student GROUP BY gender;