MySQL基础知识学习笔记
数据库概念
什么是数据库
数据库就是用来存储和管理数据的仓库
数据库存储数据的优点:
- 可存储大量数据;
- 方便检索;
- 保持数据的完整性、一致性;
- 安全、可共享。
数据库的发展历程
- 没有数据库,使用磁盘文件存储数据
- 层次结构模型数据库
- 网状结构模型数据库
- 关系结构模型数据库:使用二维表格来存储数据
- 关系-对象模型数据库
常见数据库
- Oracle:甲骨文
- DB2:IBM
- SQL Server:微软
- Sybase:赛尔斯
- MySQL:甲骨文
MySQl目录结构
MySQL的数据存储目录为data,data目录通常在C:\Documents and Settings\All Users\ApplicationData\MySQL\MySQL Server 5.1\data位置。在data下的每个目录都代表一个数据库。
MySQL的安装目录下:
- bin目录中都是可执行文件;
- my.ini文件是MySQL的配置文件;
基本命令
启动和关闭MySQl服务器
- 启动:
net start mysql
; - 关闭:
net stop mysql
;
在启动mysql服务后,打开windows任务管理器,会有一个名为mysqld.exe的进程运行,所以mysqld.exe才是MySQL服务器程序。
客户端登录退出MySQL
在启动MySQL服务器后,我们需要使用管理员用户登录MySQL服务器,然后来对服务器进行操作。登录MySQL需要使用MySQL的客户端程序:mysql.exe
- 登录:
mysql -uroot -p123 -hlocalhost
(后面不加分号) - -u:后面的root是用户名,这里使用的是超级管理员root;
- -p:后面的123是密码,这是在安装MySQL时就已经指定的密码;
- -h:后面给出的localhost是服务器主机名,他是可以省略的,例如:
mysql -uroot -p123
- 退出:
quit
或exit
;
在登陆成功后,打开windows任务管理器,会有一个mysql.exe的进程,所以mysql.exe是客户端程序。
SQL语句
SQL概述
什么是SQL
SQL(Structured Query Language)是“结构化查询语言”,它是对关系型数据库的操作语言。它可以应用到所有的关系型数据库中,例如:MySQL、Oracle、SQL Server等。SQL标准(ANSI/ISO)有:
- SQL-92:1992年发布的SQL语言标准;
- SQL:1999:1999年发布的SQL语言标准;
- SQL:2003:2003年发布的SQL语言标准;
这些标准就与JDK的版本一样,在新的版本中总要有一些语法的变化。不同时期的数据库对不同标准做了实现。
虽然SQL可以用在所有关系型数据库中,但很多数据库还都有标准之后的一些语法,我们可以称之为“方言”。例如MySQL中的LIMIT语句就是MySQL独有的方言,其它数据库都不支持!当然,Oracle或SQL Server都有自己的方言。
语法要求
- SQL语句可以单行或多行书写,以分号结尾;
- 可以用空格和缩进来来增强语句的可读性;
- 关键字不区别大小写
分类
- DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
- DML(Data Manipulation Language):数据操作(增删改)语言,用来定义数据库记录(数据);
- DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
- DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
DDL(数据定义语言)
基本操作
- 查看所有数据库名称:
SHOW DATABASES
; - 切换数据库:
USE mydb1
,切换到mydb1数据库;
操作数据库
- 创建数据库:
CREATE DATABASE [IF NOT EXISTS] mydb1
;
创建数据库,例如:CREATE DATABASE mydb1
,创建一个名为mydb1的数据库。如果这个数据已经存在,那么会报错。例如CREATE DATABASE IF NOT EXISTS mydb1
,在名为mydb1的数据库不存在时创建该库,这样可以避免报错。 - 删除数据库:
DROP DATABASE[IF EXISTS] mydb1
;
删除数据库,例如:DROP DATABASE mydb1
,删除名为mydb1的数据库。如果这个数据库不存在,那么会报错。DROP DATABASE IF EXISTS mydb1
,就算mydb1不存在,也不会的报错。 - 修改数据库编码:
ALTER DATABASE mydb1 CHARACTER SET UTF8
修改数据库mydb1的编码为utf8。在MySQL中所有的UTF-8编码都不能使用中间的“-”,即UTF-8要书写为UTF8。
数据类型
MySQL与Java一样,也有数据类型。MySQL中数据类型主要应用在列上。
常用类型:
- int:整形
- double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,及最大值为999.99;
- decimal:浮点型,在表示钱方面使用该类型,因为不会出现精度缺失问题;
- char:固定长度字符串类型;char(10)
- varchar:可变长度字符串类型;65535字节,根据数据的实际长度来占用内存空间;
- blob:大字节类型;text
- date:日期类型,格式为:yyyy-MM-dd;
- Time:时间类型,格式为:HH:mm:ss;
- Datetime:格式为:yyyy-MM-dd HH:mm:ss;
- timestamp:时间戳类型,格式为:yyyy-MM-dd HH:mm:ss
注意:字符串类型和日期类型需要加单引号
操作表
- 创建表:
CREATE TABLE 表名(
列名 列类型,
列名 列类型,
......
);
例如:
CREATE TABLE stu(
id CHAR(6),
name VARCHAR(20),
age INT,
gender VARCHAR(10)
);
- 查看当前数据库中所有表名称:
SHOW TABLES
; - 查看指定表的创建语句:
SHOW CREATE TABLE emp
,查看emp表的创建语句; - 查看表结构:
DESC emp
,查看emp表结构; - 删除表:
DROP TABLE emp
,删除emp表; - 修改表:
- 修改之添加列:给stu表添加classname列:
ALTER TABLE stu ADD(classname varchar(100));
- 修改之修改列类型:修改stu表的gender列类型为CHAR(2):
ALTER TABLE stu MODIFY gender CHAR(2);
- 修改之修改列名:修改stu表的gender列名为sex:
ALTER TABLE stu change gender sex CHAR(2);
- 修改之删除列:删除stu表的classname列:
ALTER TABLE stu DROP classname;
DML(数据操作语言)
插入数据
- 语法:
INSERT INTO 表名(列名1,列名2,......) VALUES(值1,值2);
例:
INSERT INTO stu(sid,sname) VALUES('s_1001','zhangSan');
- 语法:
INSERT INTO 表名 VALUES(值1,值2,......);
因为没有指定要插入的列,表示按创建表时列的顺序插入所有列的值;
例:
INSERT INTO stu VALUES('s_1002','liSi',32,'female');
注意:所有字符串数据必须使用单引号!
修改数据
- 语法:
UPDATE 表名 SET 列名1=值1,......,列名n=值n [WHERE 条件]
例:
UPDATE stu SET sname='liSi',age=20 WHERE age>50 AND gender='female';
删除数据
- 语法:
DELETE FROM 表名 [WHERE 条件];
例:
DELETE FROM stu WHERE sid='s_1001';
- 语法:
TRUNCATE TABLE 表名
例:
TRUNCATE TABLE stu;
虽然TRUNCATE和DELETE都可以删除表的所有记录,但原理不同。DELETE的效率没有TRUNCATE高!
TRUNCATE其实属于DDL语句,因为它是先DROP TABLE,再CREATE TABLE。而且TRUNCATE删除的记录是无法回滚的,但DELETE删除的记录是可以回滚的(回滚是事务的知识!)。
数据控制语言
创建用户
语法:
CREATE USER 用户名@地址 IDENTIFIED BY '密码';
例:
CREATE USER user1@localhost IDENTIFIED BY '123';
给用户授权
语法:
GRANT 权限1,...,权限n ON 数据库.* TO 用户名@IP
例:
GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO user1@localhost;
GRANT ALL ON mydb1.* TO user2@localhost;
撤销授权
语法:
REVOKE 权限1,...,权限n ON 数据库.* FROM 用户名
例:
REVOKE CREATE,ALTER,DROP ON mydb1.* FROM user1@localhost;