数据库是长期储存在计算机内、有组织的、可共享的数据集合。数据库中的数据指的是以一定的数据模型组织、描述和储存在一起、具有尽可能小的冗余度、较高的数据独立性和易扩展性的特点并可在一定范围内为多个用户共享。
这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改、查由统一软件进行管理和控制。
(1)实现数据共享
(2)减少数据的冗余度,由于数据库实现了数据共享,从而避免了用户各自建立应用文件,减少了大量重复数据,减少了数据的冗余度。
(3)数据的独立性
(4)数据实现集中控制
(5)数据一致性和可维护性,以确保数据的安全性和可靠性
主要包括:①安全性控制:以防止数据丢失、错误更新和越权使用;②完整性控制:保证数据的正确性、有效性和相容性;③并发控制:使在同一时间周期内,允许对数据实现多路存取,又能防止用户之间的不正常交互作用。
我们学习的数据库是关系型数据库。
常见的数据库
DB2:IBM公司
Oracle:Oracel公司,市场占有率最大的数据库,龙头霸主。
SQL Server:微软
mySQL:现被Oracle收购
mySQL:MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。
由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
我们在官网下载mysql社区版(免费)。
然后在控制台界面进入bin目录。
net start mysql:启动mysql服务
net stop mysql:关闭mysql服务
进入mysql mysql -u用户名 -p密码
我们先使用超级管理员用户名,默认为root。既可登录。退出用exit
SQL:结构化查询语言( Structured Query Language)
用于存取数据以及查询、更新和管理关系数据库系统。
SQL语言包括
-DQL:数据查询语言:用来查询数据。
-DML:数据操作语言:增删改表记录等。
-DCL:数据控制语言:用来定义访问权限和安全级别等。
-DDL:数据定义语言,用来定义数据库对象:数据库,表,列等。
-int:整型
-double:浮点型,例如double(5,2)表示最多5位,其中必须有两位小数。
-decimal:浮点型:与double相比,decimal 类型具有更高的精度和更小的范围,它适合于财务和货币计算。
-char:固定长度字符串类型,例如我们定义char(255),我们只输入一个字节,剩下的254个字节用空格填充,长度固定。
-varchar:可变长度字符串类型,例如我们定义 varchar(255),只使用了5个字节,长度即为6个字节,因为有一个字节记录了其数据的长度。
-text:字符串类型,分为TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT四种text类型,可容纳值的长度不同
-blob:字节类型,分为TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。
-date:日期类型,格式为YYYY-MM-DD
-time: 时间类型,格式为hh:mm:ss
-timestamp:时间戳,格式为YYYY-MM-DD hh:mm:ss
.
操作数据库
1.查看所有数据库 :SHOW DATABASES;
2.选择要操作的数据库:USE 数据库名;
3.创建数据库:CREATE DATABASE[IF NOT EXISTS] 数据名名称 ;([]里的可写可不写)
4.删除数据库:DROP DATABASE [IF EXISTS] 数据库名;
操作表:
创建表:CREATE TABLE [IF NOT EXISTS] 表名(
列名 列类型,
列名 列类型,
.....
列名 列类型 //最后一行不用加逗号
);
查看指定表的创建语句:SHOW CREATE TABLE 表名;
查看表结构:DESC 表名;
删除表:DROP TABLE 表名;
修改表:
前缀:ALTER TABLE 表名
>修改表之添加列
ALTER TABLE 表名 ADD(
列名 列类型,
列名 列类型,
.....
列名 列类型
);
>修改表之修改列类型
ALTER TABLE 表名 MODIFY 列名 列类型;
>修改表之修改列名
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;
>修改之删除列
ALTER TABLE 表名 DROP 列名;
>修改表名称
ALTER TABLE 表名 RENAME TO 新表名;
INSERT 插入数据
INSERT INTO 表名(列名1,列名2,列名3....) VALUES(列值1,列值2,列值3...);
-没有指定的列插入null值。
-值的顺序必须与前面指定的列对应。
INSERT INTO 表名 VALUES(列值1,列值2,列值3)
-当没有给出插入的列,默认插入所有列。
-值的个数必须为列的个数
-值的顺序,必须与列的默认顺序相同
UPDATE 修改数据
UPDATE 表名 SET 列名1=列值1,列名2=列值2,.....[WHERE 条件];
*条件(可选)
>条件必须是一个boolean类型的值或者表达式
>sql的常用运算符:=,!=,<>,<=,>=,BETWEEN...AND,IN(...),IS NULL,NOT,OR,AND
DELETE 删除数据
DELETE FROM 表名 [WHERE 条件];
-没有条件的话就删除所有数据
1.创建用户
CREATE USER 用户名@IP地址 IDENTIFIED BY '密码';
>用户只能在指定的ip地址上登录 例如 :CREATE USER [email protected] IDENTIFIED BY '123456';
CREATE USER 用户名@'%' IDENTIFIED BY '密码';
>用户可以在任意ip地址上登录
我们创建用户后发现无法看到其他数据库和无法对数据库进行操作,所以我们需要对用户进行授权。
2.给用户授权
GRANT 权限1,权限2...权限n ON 数据库.* TO 用户名@IP地址
>给用户分配在指定数据库上指定的权限
例如:
GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mysql1.* TO [email protected];
给user用户分配在mysql1数据库上的CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT等权限。
GRANT ALL ON 数据库.* TO 用户名@IP地址
给用户分配指定数据库上的所有权限
3.撤销授权
REVOKE 权限1,权限2,...权限n ON 数据库.* FROM 用户名@IP地址
>撤销指定用户在指定数据库上的指定权限
例如:
REVOKE CREATE,ALTER,DROP ON mysql1.* FROM [email protected];
撤销user用户在mysql1数据库上的CREATE,ALTER,DROP权限。
4.查看权限
SHOW GRANTS FOR 用户名@IP地址
>查看指定用户的权限
5.删除用户
DROP USER 用户名@IP地址
基础查询
1.查询所有列
SELECT * FROM 表名;
2.查询指定列
SELECT 列1,列2,... FROM 表名;
3.去除完全重复的行(并不修改数据库数据)
SELECT DISTINCT 列1,列2..... FROM 表名;
例如查询工资,相同的工资只显示一次。
4.连接字符串
SELECT CONCAT(列1,列2,..) FROM 表名;
5.转换null值,任何值加上null都等于null。这是我们需要将null当成0来看待
SELECT IFNULL(列名,要转换的值) FROM 表名;
例如:SELECT IFNULL(SAL,0) FROM STU; //将stu表中sal列为null的转换成0
6.给列起别名
SELECT 原列 AS 新列名 FROM 表名;
条件查询
SELECT * FROM 表名 WHERE 条件;
模糊查询
SELECT * FROM WHERE NAME LIKE 'A_'; // '_' 用来匹配一个字符。
SELECT * FROM WHERE NAME LIKE 'A%'; // %用来匹配0到n个字符。
排序
SELECT * FROM 表名 ORDER BY 列名 排序方式; ASC升序排列, DESC 降序排列
SELECT * FROM 表名 ORDER BY 列名 排序方式,列名 排序方式...;
//代表当第一列排序完之后,相同的行再按照第二列的排序方式进行排序
常用聚合函数
-COUNT():计算表中行数。
例如:SELECT COUNT(*) FROM 表名;
-MAX():计算最大值
例如:SELECT MAX(列名) FROM 表名;
-MIN():计算最小值
例如:SELECT MIN(列名) FROM 表名;
-SUM():计算总和
例如:SELECT SUM(列名) FROM 表名;
-AVG():计算平均值
例如:SELECT AVG(列名) FROM 表名;
分组查询
SELECT 分组的列,聚合函数 FROM 表名 GROUP BY 分组的列;
LIMIT关键字(mysql独有)
SELECT * FROM 表名 LIMIT 从第几行查,查的行数
例如:
SELECT * FROM STU LIMIT 0,5
从stu表的第一行开始查,往下查五行数据。
-主键约束(唯一标识)
当表的某一列被指定为主键后,该列不能为空,不能有重复值出现。
-创建表时指定主键的两种方式
(1)CREATE TABLE stu(
SID CHAR(10) PRIMARY KEY, //指定主键
SNAME VARCHAR(20)
)
(2)CREATE TABLE stu(
SID CHAR(10),
SNAME VARCHAR(20),
PRIMARY KEY(SID) //指定主键
)
-给没有主键的表添加主键
例如有一个stu表,无主键
ALTER TABLE stu ADD PRIMARY KEY(列名); //指定列名为主键
-删除表中的主键
ALTER TABLE stu DROP PRIMARY KEY;
-主键自增长,只有主键为int类型时可以
例如:
CREATE TABLE STU(
SID INT PRIMARY KEY AUTO_INCREMENT, //设置主键自增长
SNAME VARCHAR(20)
)
-非空约束和唯一约束
例如:
CREATE TABLE STU(
SID INT PRIMARY KEY,
SNAME NOT NULL, //设置非空约束,值不能为空
AGE UNIQUE //设置唯一约束,值必须唯一
)
-外键约束
CREATE TABLE stu(
ID INT PRIMARY KEY,
NAME VARCHAR(20),
JOB INT,
CONSTRAINT FK_JOB FOREIGN KEY(JOB) REFERENCES STU1(JOB) //给job列添加外键约束,添加的是和STU1表的job列的约束
)
添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY(本表的约束列) REFERENCES 外表名(外表列)
连接查询,子查询都在以前学习sqlserver时学习过。这里只是简述。可以参考以前的文章。
sql语句要多加练习,找一些练习题来做,才能提升的很快。